![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
jachguate:
Te darás cuenta de que el código Código:
if PunteroClase = nil Then
Begin
// intentamos de nuevo registrar la clase, a ver que ocurre...
RegisterClass(TClass);
Assert(GetClass('TClass') <> nil, '¡Sigue siendo nil, RegisterClass ya no sirve!');
End;
Realmente este problema es muy extraño. La pregunta que le hice era tan sólo por no dejar pero si realmente GetClass devuelve nil inmediatamente después de RegisterClass pues creo que tu segundo Assert (el que jamás se ejecuta) realmente es cierto: '¡Sigue siendo nil, RegisterClass ya no sirve!'. // Saludos |
|
#2
|
||||
|
||||
|
ups... es cierto...
es la rápidez con la que respondi... Basta con hacer entonces: Código:
Procedure TForm1.Button1Click(Sender : TObject);
Var
Instancia : TClase;
{si esto compila estoy seguro que la unidad ha sido incluida en el uses }
PunteroClase : TObjectClass;
Begin
Instancia := TClass.Create(Parametros);
Instancia.Free; // para que el optimizador no quite la variable Instancia del camino...
PunteroClase := GetClass('TClass')
if PunteroClase = nil Then
ShowMessage('¡Es nil!');
if PunteroClase = nil Then
Begin
// intentamos de nuevo registrar la clase, a ver que ocurre...
RegisterClass(TClass);
Assert(GetClass('TClass') <> nil, '¡Sigue siendo nil, RegisterClass ya no sirve!');
End;
end;
lo siento de nuevo y mil gracias roman por la corrección...
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#3
|
||||
|
||||
|
¡ClassNameIs es sensible al tamaño!
¡Buen día a todos!
En vista de lo intrigante de este caso, decidí escudriñar un poco en la mejor referencia que hay de Delphi: el código fuente de su biblioteca. GetClass llama indirectamente al método clase ClassNameIs heredado de TObject. Me di cuenta que éste es sensible al tamaño. De hecho si hago esta prueba: Código:
RegisterClasses ([TForm1]);
C := GetClass ('TForM1');
No estoy seguro si en Delphi 5 era insensible al tamaño (habría que ver el código de TObject.ClassNameIs en la unidad System.pas de Delphi 5). Pero esa pudiera ser la causa del problema aquí planteado. Si este no fuera el caso, todavía cabe la posiblidad de que GetClass devuelva Nil por algo que encontré en el método TRegGroups.GetClass de la unidad Classes.pas: Código:
function TRegGroups.GetClass(const AClassName: string): TPersistentClass;
var
I: Integer;
begin
Result := nil;
for I := 0 to FGroups.Count - 1 do
with TRegGroup(FGroups [ I ]) do
begin
if Active then Result := GetClass(AClassName);
if Result <> nil then Exit;
end;
end;
Seguiremos investigando .Al González .
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas. Última edición por Al González fecha: 28-02-2004 a las 04:49:58. |
|
#4
|
||||
|
||||
|
Cita:
Cita:
// Saludos |
|
#5
|
||||
|
||||
|
Cita:
¿De casualidad no estarás tratando de cargar dinámicamente los paquetes? De ser así acuérdate de que debes usar la opción "Build with runtime packages" // Saludos |
|
#6
|
||||
|
||||
|
[quote=Al González
Me di cuenta que éste es sensible al tamaño.[/quote] En primer lugar yo diria sensible a Mayusculas y minusculas. Al principio no sabia exactamente lo que querias decir. He realizado la prueba en delphi 4 c/s y c <> nil; Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#7
|
|||
|
|||
|
Buenas, parece que he encontrado una posible solucion:
initialization ActivateClassGroup(Tcontrol); RegisterClasses( [ TFClass1, TFClass2 ]); El sistema permite que las clases puedan ser cargadas y grabadas para ser registradas en grupos separados. Esto permite distinguir al IDE entre las clases VCL y CLX. Esta llamada activa un grupo de clases que contiene la clase especifica. Aunque yo en la app solo utilizo VCL, se esta haciendo un lio con las clases VCL y CLX. Vamos, si utilizo ActivateClassGroup(TControl), se evita el problema. Gracias a todos. |
|
#8
|
||||
|
||||
|
¡Ah! Muy interesante. Por fin comienza a aparecer cierta lógica en este asunto. No sé porque se está confundiendo con las componentes, yo jamás uso nada de Kylix y me limito a desactivar las componentes desde que instalo Delphi. ¿Tú las tienes activadas?
// Saludos |
|
#9
|
||||
|
||||
|
¡Buen día a todos!
Cita:
.Cita:
¡Un abrazo! Al González .
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas. |
|
#10
|
||||
|
||||
|
No pretendo rebatir lo que decis... apreciado Al, sobre todo porque eso de las letras a mi no se me da mucho (imagino que ya lo has notado en mis participaciones aqui...) simplemente no me pareció claro el término, aunque sea correcto, evidentemente es poco usual (al menos en mi barrio
)hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#11
|
||||
|
||||
|
Cita:
Estoy de acuerdo contigo en cuanto a lo de "caja" (aunque preferiría "gaveta") más no a lo de "tamaño"- que da origen a tu traducción. El término "case", como bien dices, se originó en contextos tipográficos y se refiere a la caja donde se guardaban los moldes de la letras. Pero más que ser de distintos tamaños, las letras mayúsculas se colocaban en la caja o gaveta superior mientras que las minúsculas en la gaveta inferior. De ahí los términos "UpperCase" y "LowerCase". Así pues, siguiendo una traducción como la que propones, el término sería más bien "sensible a la posición de la caja (o gaveta)" Saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|