Array
(
)

Como fazer minha tela desta maneira?

Titanius
   - 13 fev 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
   - 13 fev 2006

Sobe...

Ninguém tem idéia de como fazer?

[]s


Aroldo Zanela
   - 14 fev 2006

Colega,

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


Weber
   - 14 fev 2006

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


Paulocesar1301
   - 14 fev 2006

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


Truck1n
   - 14 fev 2006

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

:lol:


Titanius
   - 14 fev 2006


Citação:
Colega,

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


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...


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

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


Citação:

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


Weber
   - 14 fev 2006

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!


Titanius
   - 14 fev 2006


Citação:
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...


Paulocesar1301
   - 14 fev 2006

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;


Titanius
   - 14 fev 2006


Citação:
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:
#Código


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];
Form2.Show;
End;
end;


Fiz algo de errado?

[]s


Michael
   - 15 fev 2006

Olá!

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

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

#Código

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 TabSheets 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 nil. Vc pode usar o mecanismo de Owner do Delphi, desta forma:

#Código
with TForm2.Create(TabSheet1) do
...


Assim vc só precisa liberar a TabSheet no OnDestroy 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


Martins
   - 15 fev 2006

Michael, estou só trocando (Parent as TabSheet).Caption := Caption;
por (Parent as TTabSheet).Caption := Caption;
#Código


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!!!


Michael
   - 15 fev 2006


Citação:
Michael, estou só trocando (Parent as TabSheet).Caption := Caption;
por (Parent as TTabSheet).Caption := Caption;


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

[]´s


Martins
   - 15 fev 2006


Citação:

Citação:
Michael, estou só trocando (Parent as TabSheet).Caption := Caption;
por (Parent as TTabSheet).Caption := Caption;


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

[]´s


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


Paulocesar1301
   - 15 fev 2006

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


Titanius
   - 15 fev 2006

Galera, muito obrigado, irei testar aqui e posto qualquer coisa...

Quando ao componente eu vi lá que a DevExpress tem, porém só tenho para delphi 7... e estou pensando em passar este aplicativo pra 2006.. e a grana do pessoal pra comprar tá curta.. :D

De qualquer forma tem um da Berg que tem isso também...

Aproveitando, como eu coloco um bitmap na frente do button do pagecontrol?


OBrigado,

[]s


Michael
   - 15 fev 2006


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


Não diga isso! A ajuda de todos é sempre bem vinda. Não existe neste fórum isso de uma dica ser melhor do que a outra. Todas são construtivas e contribuem para a difusão de conhecimento.


Citação:
Aproveitando, como eu coloco um bitmap na frente do button do pagecontrol?


Insira as imagens em um TImageList e depois aponte a propriedade Images do TPageControl para ele. Ajuste os índices em cada TabSheet através da propriedade ImageIndex.

[]´s


Titanius
   - 15 fev 2006


Citação:

Insira as imagens em um TImageList e depois aponte a propriedade Images do TPageControl para ele. Ajuste os índices em cada TabSheet através da propriedade ImageIndex.

[]´s


Vixi.. nem tinha visto esta propriedade... foi mal... :oops: :oops:


Obrigado,

[]s


Titanius
   - 17 fev 2006

Olá Michael,

só agora que tive oportunidade de testar a função..

estou tendo problemas para criar um tabsheet em runtime! Você sabe como posso fazer?


[]s


Titanius
   - 17 fev 2006

Valeu consegui... Meu problema agora é o seguinte, preciso criar um form em RunTime, porém em uma função...

segue minha função:

#Código


function CriaTab(_Tab: TPageControl; _Caption: string; _FormLink: TForm; const _ImgIdx: integer = 3; const _Focar: Boolean = True): Boolean;
var
Idx, i: integer;
Nome: string;
begin
try
IncluindoTab := True;

{-------------------------------------------------------------------------------
- Crio uma página no PageList Principal.
-------------------------------------------------------------------------------}
with FrmPrincipal do
begin

with TTabSheet.Create(nil) do
begin
PageControl := PgCtrlPrincipal;
end;

with _FormLink.Create(nil) do
begin
BorderStyle := bsNone;
Align := alClient; // Sim, Align serve para alguma coisa em forms!
Parent := PgCtrlPrincipal.Pages[PgCtrlPrincipal.PageCount - 1];
(Parent as TTabSheet).Caption := _Caption;
(Parent as TTabSheet).ImageIndex := 4;
Show;
end;
PgCtrlPrincipal.Update;
end;
Application.ProcessMessages;
IncluindoTab := False;
Result := True;
except
Result := False;
end;
end;


Pois bem.. normalmente pra criar um form eu uso:

#Código

Form1 := TForm1.Create(nil);


Como eu uso dessa maneira na funcao acima? Pois tentei e nao funcionou.. :(

Outra coisa, na linha
with TTabSheet.Create(nil) do

quando coloco
with TTabSheet.Create(Self) do

dá este erro:

Undeclared Identifier: ´Self´




Obrigado,

[]s