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.

 

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...