Fórum Frame Dinâmico #444370

30/05/2013

0

Pessoal, estou com certos erros ao fazer uma procedure que cria um frame dinâmico.
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

Thiago Santos

Responder

Posts

31/05/2013

Alex Constâncio

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar