Frame Dinâmico
Pessoal, estou com certos erros ao fazer uma procedure que cria um frame dinâmico.
Utilizo a seguinte procedure:
E chamo ela assim:
Mas ocorre erro: [dcc32 Error] uFraCadastros.pas(33): E2010 Incompatible types: 'TFrame' and 'class of TFraGuiaClientes'
Sei que é devido a tipos incompatíveis. Teria alguma solução para eu colocar na procedure, ou na hora de usar a procedure?
Utilizo a seguinte procedure:
procedure TFrmPrincipal.FrameCreate(CustomFrame: TFrame);
var
Frame: TFrame;
begin
Frame := CustomFrame.Create(FrmPrincipal);
with Frame do
begin
Left := fraMenu.Width;
Top := stbInfo.Height;
Width := FrmPrincipal.Width - Left - 16;
Anchors := Anchors + [akLeft, akRight];
try
Parent := FrmPrincipal;
except
FreeAndNil(Frame);
raise;
end;
end;
end;
E chamo ela assim:
FrmPrincipal.FrameCreate(TFraGuiaClientes);
Mas ocorre erro: [dcc32 Error] uFraCadastros.pas(33): E2010 Incompatible types: 'TFrame' and 'class of TFraGuiaClientes'
Sei que é devido a tipos incompatíveis. Teria alguma solução para eu colocar na procedure, ou na hora de usar a procedure?
Thiago Santos
Curtidas 0
Respostas
Alex Constâncio
30/05/2013
Olá
Da forma como o método FrameCreate está declarado, ele espera uma instância de um Frame, mas entendo que você deseja passar a classe desse frame, para poder comandar a instanciação com classes diferentes. Neste caso será necessário declarar primeiramente um tipo que corresponde a classe do frame:
type
TCustomFrameClass = class of TCustomFrame;
Em seguida, este deverá ser o tipo do parâmetro no método FrameCreate:
procedure Txxx.FrameCreate(aFrameClass: TCustomFrameClass);
begin
end;
A instanciação deverá ocorrer com a classe passada e não mais hardcoded no interior do método:
novoFrame := aFrameClass.Create(Self);
Acho que com isso você resolve.
Alex
Da forma como o método FrameCreate está declarado, ele espera uma instância de um Frame, mas entendo que você deseja passar a classe desse frame, para poder comandar a instanciação com classes diferentes. Neste caso será necessário declarar primeiramente um tipo que corresponde a classe do frame:
type
TCustomFrameClass = class of TCustomFrame;
Em seguida, este deverá ser o tipo do parâmetro no método FrameCreate:
procedure Txxx.FrameCreate(aFrameClass: TCustomFrameClass);
begin
end;
A instanciação deverá ocorrer com a classe passada e não mais hardcoded no interior do método:
novoFrame := aFrameClass.Create(Self);
Acho que com isso você resolve.
Alex
GOSTEI 0