Jump to content

Forms multi Abas (TDI)


Fernando Duarte

Recommended Posts

Olá pessoal, uso unigui desde o inicio do ano, fiz um projeto para testes e uso até hoje para controle dos meus clientes. Pretendo iniciar algo maior em breve. 

 

Bem, uma das primeiras coisas que tentei fazer foi criar um ambiente com forms multi abas, o que seria ótimo na web. Mas tive problemas com a conversão da classe TDI da vcl que possuo (caso queiram podem buscar no site da devmedia que tem lá )

 

alguém já conseguiu fazer algo? sabemos que o unigui permite vários forms abertos, mas organizar em abas seria ideal e mais simples para usabilidade.

 

 

Link to comment
Share on other sites

Eu também estou tentando fazer dessa forma (TDI) mas por enquanto não consegui. Aqui no fórum eu cheguei a ver um exemplo, mas a pessoa não colocou os fontes. Procurei este post recentemente mas não o encontrei mais.

Link to comment
Share on other sites

Eu também estou tentando fazer dessa forma (TDI) mas por enquanto não consegui. Aqui no fórum eu cheguei a ver um exemplo, mas a pessoa não colocou os fontes. Procurei este post recentemente mas não o encontrei mais.

 

se alguém se interessar, posso enviar a classe TDI com algumas mudanças para o Unigui, porém ainda está com erros que não consegui resolver.

Link to comment
Share on other sites

Também tive o mesmo problema que vocês.

 

No UNIGUI não é possivel criar Abas com o TUniForm não é suportado.

 

para contornar este problema consegui criar ataves de TUniFrame, segue o código:

private
    { Private declarations }
    {Gerção de Formulários em Abas}
    procedure NovaAba(FormFrame: TFrame; Nome_Action: string);

{--}

procedure TFormPrincipal.NovaAba(FormFrame: TFrame; Nome_Action: string);
var
  TabSheet      :TUniTabSheet;
  FCurrentFrame :TUniFrame;
  I             :Integer;
begin

  PageControl.Visible:= True;

  {Verificando se a tela já está aberto e redicerionando a ela}
  for I := 0 to PageControl.PageCount - 1 do
    with PageControl do
      if Pages[I].Caption = Nome_Action  then
        begin
          PageControl.ActivePageIndex := I;
          Exit;
        end;

  TabSheet              := TUniTabSheet.Create(Self);
  TabSheet.PageControl  := PageControl;
  TabSheet.Caption      := Nome_Action;
  TabSheet.Closable     := True;
  TabSheet.OnClose      := VerificaAba;

  FCurrentFrame:= TUniFrameClass(FormFrame).Create(Self);

  with FCurrentFrame do
    begin
      Align               := alClient;
      Parent              := TabSheet;
    end;

  Refresh;

  PageControl.ActivePage := TabSheet;
end;
Link to comment
Share on other sites

 

Também tive o mesmo problema que vocês.

 

No UNIGUI não é possivel criar Abas com o TUniForm não é suportado.

 

para contornar este problema consegui criar ataves de TUniFrame, segue o código:

private
    { Private declarations }
    {Gerção de Formulários em Abas}
    procedure NovaAba(FormFrame: TFrame; Nome_Action: string);

{--}

procedure TFormPrincipal.NovaAba(FormFrame: TFrame; Nome_Action: string);
var
  TabSheet      :TUniTabSheet;
  FCurrentFrame :TUniFrame;
  I             :Integer;
begin

  PageControl.Visible:= True;

  {Verificando se a tela já está aberto e redicerionando a ela}
  for I := 0 to PageControl.PageCount - 1 do
    with PageControl do
      if Pages[I].Caption = Nome_Action  then
        begin
          PageControl.ActivePageIndex := I;
          Exit;
        end;

  TabSheet              := TUniTabSheet.Create(Self);
  TabSheet.PageControl  := PageControl;
  TabSheet.Caption      := Nome_Action;
  TabSheet.Closable     := True;
  TabSheet.OnClose      := VerificaAba;

  FCurrentFrame:= TUniFrameClass(FormFrame).Create(Self);

  with FCurrentFrame do
    begin
      Align               := alClient;
      Parent              := TabSheet;
    end;

  Refresh;

  PageControl.ActivePage := TabSheet;
end;

So uma duvida voce usa o frame como form principal ou dentro do principal?

Link to comment
Share on other sites

Amigo Marlon,

    

     creio que faltou ai a implementação do método VerificaAba.

outra dúvida, não achei a unit do TUniFrame, qual é?

 

a Procedure para Veirifca Aba é apenas para que o meu PageControl fique invisivel caso todas as abas seja fechadas:

procedure VerificaAba(Sender: TObject; var AllowClose: Boolean);

-------

procedure TFormPrincipal.VerificaAba(Sender: TObject; var AllowClose: Boolean);
begin
  if PageControl.PageCount = 1 then
    PageControl.Visible := False;
end;

Para voce criar um Frame voce segue o seguinte caminho:

 

File -> New -> Other -> Unigui for Delphi -> Frame

 

da classe TUniFrame.

Link to comment
Share on other sites

  • 6 months later...

Seguindo o exemplo do post http://forums.unigui...forms-tdi-tabs/

Estou fazendo alguns testes. Notei que o frame que não possui o evento onActivate.

Como vocês estão fazendo para dar um refresh ?

 

Por exemplo, em uma aba estou com o grid de consulta aberto. Abro outra aba e excluo um registro.

Ao retornar para a aba da consulta gostaria de dar um refresh para mostrar os dados já atualizados.

 

Como poderia simular um onActivate em uma frame ?

 

Qualquer dica é bem vinda.

Link to comment
Share on other sites

Realmente um frame não tem onActivate, para burlar a falta, você pode fazer do modo mais dificil...

Você pode fazer um loop dentro da aba (TUniTabSheet) atual (activepage) em todos os controles, até encontrar o panel com o nome colocado dentro do Frame. Esse panel dentro do frame contem todos os controles dbUniEdit (faz um for para todos os controls). Quando você encontrar um TUniDBEdit (verifique com Control[x] is TUniDBEdit), você pode capturar o dataset através de sua propriedade Dataset e depois chegar a query por ele. Chegando na query, você pode dar um refresh.

Complicado não?? rsrsrsrs.. mas funciona.. é assim que faço.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...