Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Frames en un paquete (https://www.clubdelphi.com/foros/showthread.php?t=53836)

TeAOrco 02-03-2008 20:29:38

Frames en un paquete
 
Hola estoy intentando en la aplicación principal mostrar los frames que estan almacenados en un paquete (que cargo de forma dinamica):


Código Delphi [-]
var
Modulo: HModule;
ClaseFrame: TCustomFrameClass;
FrameC: TFrame;
begin
Modulo:=LoadPackage('FramePru.bpl');
if Modulo<>0 then
begin
ClaseFrame:=TCustomFrameClass(GetClass('TfraVerde'));
if ClaseFrame<>Nil then
begin
FrameC:=TFrame(ClaseFrame.Create(Application));
FrameC.Parent:=Self;
FrameC.Align:=alBottom;
FrameC.Height:=200;
FrameC.Visible:=True;
end;
end;





Pero al ejecutarlo me da el siguiente error:

Project Prueba.exe raised exception class EConverErro with message 'Cannot assign a TFont to a TFont'.


El error lo da al asignar Código Delphi [-]FrameC.Parent:=Self;




Si modifico la sentencia Código Delphi [-]FrameC:=TFrame(ClaseFrame.Create(Application));

por Código Delphi [-]FrameC:=TFrame(ClaseFrame).Create(Application);

me da un error de Access violation at address...

Algun tipo de sugerencia, muchas gracias.:D

Lepe 02-03-2008 20:41:24

FrameC:=TFrame(ClaseFrame).Create(Self);

Por lógica, yo pondría el dueño y el padre al mismo control, en este caso el propio Form donde se creará el frame.

Saludos

Caral 02-03-2008 20:46:31

Hola
Lepe aprovecho para aprender.
Aqui veo algo extraño:
El parent no deberia ser el form?., es asi o me equivoco.?
Código Delphi [-]
FrameC:=TFrame(ClaseFrame).Create(Self);
FrameC.Parent:=Self; // esta linea, no debería de ser el Form?
Saludos

TeAOrco 02-03-2008 21:01:30

Modificado:
Código Delphi [-]
 
 
var
  Modulo: HModule;
  ClaseFrame: TCustomFrameClass;
  FrameC: TFrame;
begin
  Modulo:=LoadPackage('FramePru.bpl');
  if Modulo<>0 then
    begin
    ClaseFrame:=TCustomFrameClass(GetClass('TfraVerde'));
    if ClaseFrame<>Nil then
      begin
      FrameC:=TFrame(ClaseFrame.Create(Self));
      FrameC.Parent:=Self;
      FrameC.Align:=alBottom;
      FrameC.Height:=200;
      FrameC.Visible:=True;
      end;
    end;

Mismo error en la misma linea.

Caral 02-03-2008 22:17:55

Hola
Yo de esto no se, el maestro es Lepe, pero me parece que deberia de ser el parente el form en el que se hospeda.
Código Delphi [-]
var
  Modulo: HModule;
  ClaseFrame: TCustomFrameClass;
  FrameC: TFrame;
begin
  Modulo:=LoadPackage('FramePru.bpl');
  if Modulo<>0 then
    begin
    ClaseFrame:=TCustomFrameClass(GetClass('TfraVerde'));
    if ClaseFrame<>Nil then
      begin
      FrameC:=TFrame(ClaseFrame).Create(Form1); // el form donde se crea
      FrameC.Parent:=Form1; // el form donde vive
      FrameC.Align:=alBottom;
      FrameC.Height:=200;
      FrameC.Visible:=True;
      end;
    end;
Saludos

TeAOrco 02-03-2008 23:16:41

En este caso Self y Form1 son el mismo, ya que este codigo se ejecuta desde el Form1.

Caral 02-03-2008 23:22:23

Hola
Muy cierto, lo he probado de la dos formas y funciona, algo mas que aprendi.
Saludos

TeAOrco 06-03-2008 08:50:42

De esta forma si tira:

Código Delphi [-]
 
Var
  Modulo: HMODULE;
  AClass: TPersistentClass;
begin
  Modulo:=LoadPackage('Segundo.bpl');
  if Modulo<>0 then
    begin
    AClass:=GetClass('TfrmSegundo');
    if AClass<>nil then
      begin
      if Assigned(FrameC) then
        FrameC.Free;
      FrameC:=TFrame(TComponentClass(AClass).Create(Self));
      FrameC.Parent:=Self;
      FrameC.Align:=alClient;
      FrameC.Visible:=True;
      end;
    end;
end;

FrameC esta declarado en la parte publica del formulario como TFrame. :)


La franja horaria es GMT +2. Ahora son las 07:13:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi