Como fazer minha tela desta maneira?

13/02/2006

Olá amigos, gostaria de uma ajuda de vocês, gostaria de fazer uma tela parecida com esta do Delphi 2005:
[img:bd112992f3]http://www.digitum.info/cb.gif[/img:bd112992f3]

As abas seriam os Captions dos formulários, e quando eu clicasse na aba, automaticamente, abaixo abriria o Form, porém não sei fazer isso, estou tentando usar um componente que vem com o JEDI, porém me parece que ele come muita memória, e já me falaram que eu poderia usar Frame para isso... mas eu nunca usei...

Pois bem, queria fazer isso, e de uma forma que não ficasse muito pesado.. As abas eu já tenho o componente pra fazer, o que falta eh esse negócio do Form mesmo..

Aproveitando, vocês preferem a tela desta maneira ou MDI? Seria uma boa fazer uma enquete sobre isso :D

Desde já agradeço a todos...

[]s


Titanius

Respostas

13/02/2006

Titanius

Sobe...

Ninguém tem idéia de como fazer? :cry:

[]s


Responder Citar

14/02/2006

Aroldo Zanela

Colega,

Eu ainda não entendi, pois se eu tivesse entendido, bastaria usar PageControl.


Responder Citar

14/02/2006

Weber

Parece ser algum tipo de page control! Sei lá.


Responder Citar

14/02/2006

Paulocesar1301

O ideal seria utilizar PageControl com frames, não ?


Responder Citar

14/02/2006

Truck1n

Page Control, pelo menos vc nao precisa ficar criando muitos formularios.

:lol:


Responder Citar

14/02/2006

Titanius

Colega, Eu ainda não entendi, pois se eu tivesse entendido, bastaria usar PageControl.[/quote:3de326d2df] Olá pessoal... Pois bem, vou explicar melhor :D Tenho uma barra acima, que ficaria os Captions dos forms que eu criaria.. pois em baixo desta barra, eu mostraria o Form em questão, o problema do PageControl, eh que nao dá pra colocar um form dentro da ´página´ ou dá? o meu problema está mesmo em inserir um Form na parte de baixo da Barra, pois o form a ser inserido poderá ser qualquer um da aplicação... [quote]O ideal seria utilizar PageControl com frames, não ?

Com o Frame eu posso mudar o Form dentro dele em RunTime?

Page Control, pelo menos vc nao precisa ficar criando muitos formularios.


A intenção é justamente essa, ao invés de criar um Form como MDIChild, eu criaria ele em forma de Tabs... :D


[]s


Responder Citar

14/02/2006

Weber

Uma vez vi em algum lugar uma forma para colocar um Form dentro de um panel, o procedimento dever ser o mesmo, ou na pior das hipóteses da pra colocar um panel dentro de pada tabsheet e colocar cada form dentro de seu panel.

Da uma olhada no site, acho que foi aqui mesmo no clubedelphi.net que vi esta dica!


Responder Citar

14/02/2006

Titanius

Uma vez vi em algum lugar uma forma para colocar um Form dentro de um panel, o procedimento dever ser o mesmo, ou na pior das hipóteses da pra colocar um panel dentro de pada tabsheet e colocar cada form dentro de seu panel. Da uma olhada no site, acho que foi aqui mesmo no clubedelphi.net que vi esta dica!


blz, irei procurar... obrigado...


Responder Citar

14/02/2006

Paulocesar1301

Este é apenas um teste rápido de como colocar um Form dentro de Outro componente:

Podes colocar no
procedure T<SeuFormBase>.<SeuPageControl>Change(Sender: TObject);

If <SeuFormBase>.<SeuPageControl>.ActivePageIndex = 0 Then
begin
If Assigned(Form2) Then
<FormACriar>.Show
Else begin
<FormACriar> := T<FormACriar>.Create(nil);
<FormACriar>.Parent := <SeuFormBase>.<SeuPageControl>.Pages[0];
<FormACriar>.Show;
End;
end;

Obs.:
Para teste coloquei o <FormACriar> com wsMaximized;
No OnClose do <FormACriar> coloquei Action:=caFree;
No OnDestroy do <FormACriar> coloquei <FormACriar> := nil;


Responder Citar

14/02/2006

Titanius

Este é apenas um teste rápido de como colocar um Form dentro de Outro componente: Podes colocar no procedure T<SeuFormBase>.<SeuPageControl>Change(Sender: TObject); If <SeuFormBase>.<SeuPageControl>.ActivePageIndex = 0 Then begin If Assigned(Form2) Then <FormACriar>.Show Else begin <FormACriar> := T<FormACriar>.Create(nil); <FormACriar>.Parent := <SeuFormBase>.<SeuPageControl>.Pages[0]; <FormACriar>.Show; End; end; Obs.: Para teste coloquei o <FormACriar> com wsMaximized; No OnClose do <FormACriar> coloquei Action:=caFree; No OnDestroy do <FormACriar> coloquei <FormACriar> := nil;


Olá amigo,

Testei porém, parece que o Parent não funcionou... ele exibiu a tela, porém não dentro do pagecontrol :(

meu codigo:
  If Form1.PgC1.ActivePageIndex = 0 Then
  begin
    If Assigned(Form2) Then
    Form2.Show
    Else
    begin
      Form2 := TForm2.Create(nil);
      Form2.Parent := Form1.PgC1.Pages[0&93;;
      Form2.Show;
    End;
  end;


Fiz algo de errado?

[]s


Responder Citar

15/02/2006

Michael

Olá!

Vc pode realmente simular o esquema de abas do Delphi 2005 usando o componente [b:9ed858b9e7]TPageControl[/b:9ed858b9e7], preferencialmente com a propriedade [b:9ed858b9e7]Style [/b:9ed858b9e7]definida para [b:9ed858b9e7]tsButtons [/b:9ed858b9e7]ou [b:9ed858b9e7]tsFlatButtons [/b:9ed858b9e7](pessoalmente prefiro este último).

Para criar o form dentro da TabSheet do PageControl, use um código como o a seguir:

begin
  with TForm2.Create(nil) do
  begin
    BorderStyle := bsNone;
    Align := alClient; // Sim, Align serve para alguma coisa em forms!
    Parent := TabSheet1;
    (Parent as TabSheet).Caption := Caption;
    Show;
  end;


Obviamente que as [b:9ed858b9e7]TabSheets [/b:9ed858b9e7]serão dinâmicas, então o código acima pode variar um pouco. Lembre-se tbm de criar um procedimento para liberar os forms da memória quando a aplicação terminar - pois estamos criando eles com [b:9ed858b9e7]nil[/b:9ed858b9e7]. Vc pode usar o mecanismo de Owner do Delphi, desta forma:

with TForm2.Create(TabSheet1) do
...


Assim vc só precisa liberar a TabSheet no [b:9ed858b9e7]OnDestroy [/b:9ed858b9e7]do formulário principal e o form associado a ela vai junto. De qualquer forma, se as abas forem fixas, então não será necessário destruí-las manualmente.

Vc pode melhorar ainda mais a interface associado uma imagem à cada aba do PageControl, que represente a funcionalidade do form. E, como o não haverá mais os botões de controle da janela (Minimiza, Maximizar e Fechar), será necessário implementar alguma maneira de o usuário poder pelo menos fechar o form.

Apenas para constar: a DevExpress possui um componente PageControl que é idêntico ao do Delphi 2005, inclusive com o botão de Fechar. Acredito que há outros, free ou open source, mas não me recordo de nenhum no momento.

[]´s


Responder Citar

15/02/2006

Martins

Michael, estou só trocando [color=red:3b3a0e5a77][b:3b3a0e5a77](Parent as TabSheet).Caption := Caption[/b:3b3a0e5a77][/color:3b3a0e5a77];
por [color=green:3b3a0e5a77][b:3b3a0e5a77](Parent as TTabSheet).Caption := Caption[/b:3b3a0e5a77][/color:3b3a0e5a77];
begin 
  with TForm2.Create(nil) do 
  begin 
    BorderStyle := bsNone; 
    Align := alClient; // Sim, Align serve para alguma coisa em forms! 
    Parent := TabSheet1; 
    (Parent as TTabSheet).Caption := Caption; 
    Show; 
  end;


Valew pela dica camarada!!!


Responder Citar

15/02/2006

Michael

Michael, estou só trocando [color=red:c6f9626d9e][b:c6f9626d9e](Parent as TabSheet).Caption := Caption[/b:c6f9626d9e][/color:c6f9626d9e]; por [color=green:c6f9626d9e][b:c6f9626d9e](Parent as TTabSheet).Caption := Caption[/b:c6f9626d9e][/color:c6f9626d9e];


É verdade. Nem havia percebido... ;-)

[]´s


Responder Citar

15/02/2006

Martins

[quote:dd7d39e263=´Martins´]Michael, estou só trocando [color=red:dd7d39e263][b:dd7d39e263](Parent as TabSheet).Caption := Caption[/b:dd7d39e263][/color:dd7d39e263]; por [color=green:dd7d39e263][b:dd7d39e263](Parent as TTabSheet).Caption := Caption[/b:dd7d39e263][/color:dd7d39e263];


É verdade. Nem havia percebido... ;-)

[]´s[/quote:dd7d39e263]

É a correria compadre, isso acontece, relaxa!!! :wink:


Responder Citar

15/02/2006

Paulocesar1301

:oops: recolho-me a minha insignificância.... sua dica foi INFINITAMENTE mais construtiva que a minha !! :oops:


Responder Citar