Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

zeroskull

Varios forms iguais criados dinamicamente.

Recommended Posts

Boa noite pessoal,estou fazendo um projeto e preciso que um mesmo form seja criado varias vezes por exemplo:procedure TForm1.Button1Click(Sender: TObject);beginApplication.CreateForm(TForm2, Form2)Form2.Show;end;e depois no formcloseprocedure TForm2.FormClose (Sender: Tobject; var Action : TCloseAction);beginAction:= caFree;end;Até aqui tudo bem, ele cria o formulario dinamicamente, e se eu clicar varias vezes no Botão(Button1) ele vai abrir varias janelas. Mas o meu problema é que eu gostaria de ter um controle das janelas abertas, por exemplo, mudar o nome do caption da janela e ter a possibilidade de colocar os "titulos" num menu tambem criado dinamicamente. Na pratica colocar um nome em cada form e poder dar um show ou um hide na qual eu quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode criar um vetor de forms ou apenas ter um controle melhor somre o nome dos forms tendo, por exemplo, uma variável para registrar o número de forms que você tem

exemplo:

var   i:integer;begin   Application.CreateForm(TForm2, Form+inttostr(i));   inc(i);   ....end;

 

mas isso vai depender do que você realemnte pretende fazer com os forms. Se precisar destruí-los, use outra variável para controle...

 

Eu precisava de um pagecontrol que criasse richs dinâmicos, perguntei na Unidev e recebi o segunte código:

 

procedure Tform1.CriaNovaAba(Dono: TPageControl);var	newtab: TTabSheet;	rich: trichedit;begin	inc(abas);	newtab:= TTabSheet.Create(Dono);	rich:=trichedit.Create(Dono);	newtab.PageControl:=Dono;	newtab.tag:=abas;	with rich do		begin			Name:='TXT'+inttostr(abas);			Parent:=newtab;			Align:=alClient;			WantTabs:=true;			ScrollBars:=ssBoth;			text:='';			PopupMenu:=PopupMenu2;			Font.Name:='Courier New';			font.size:=10;			PlainText:=true;			Onkeypress:=RichEdit1Change;			onkeyup:=RichEdit1KeyUp;			WordWrap:=false;//			BorderStyle:=bsNone;		end;	Dono.ActivePage:=newtab;	newtab.ImageIndex:=0;	newtab.Caption:='Sem Titulo '+inttostr(abas);	dono.ActivePage.PopupMenu:=PopupMenu1;	ToolBar1.Buttons[17].Down:=rich.WordWrap;	if PageControl1.PageCount > 1 then		begin			Proximaaba1.Enabled:=true;			AbaAnterior1.Enabled:=true;		end	else		begin			Proximaaba1.Enabled:=false;			AbaAnterior1.Enabled:=false;		end;	TRichEdit(PageControl1.ActivePage.FindChildControl('TXT'+inttostr(PageControl1.ActivePage.tag))).SetFocus;end;

Fiz algumas alterações para a minha real necessidade e o resultado compilado está nesse Link

 

 

PS.: o Programa não está pronto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Concegui achar a solução, então vou postar aqui para quem tiver duvidas...

Criei dois forms( Form1, Form2)

No primeiro form coloquei um dois botões um para criar o form2, outro para listar os nomes deles e um listbox.

 

Declare NumForms como inteiro e privado.

no primeiro botao(o de criar o form) no evento onclick coloquei o seguinte codigo:

 

with TForm2.Create(Self) do

begin

Inc(NumForms); // Incrementa a variavel

Caption := 'Form '+ IntToStr(NumForms); //Define o nome do titulo do form

Show; //mostra o form

end;

 

no segundo botao(de listar os nomes dos forms):

 

var

i : Integer;

begin

for i := 0 to Screen.FormCount-1 do

Listbox1.Items.Add(Screen.Forms.Caption); // Lista o nome no listbox o nome do titulo dos forms

end;

 

 

no evento DblClick do listbox:

screen.Forms[listbox1.ItemIndex].Show; //Apresenta a janela com o indice do listbox

 

 

 

Então é isso ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.