security Posted August 8, 2012 at 10:27 AM Report #471726 Posted August 8, 2012 at 10:27 AM Bom dia, Eu há alguns tempos que sei programar em pascal (o básico, que se aprende na escola) mas agora surgiu-me uma proposta de trabalho para delphi e gostaria de criar um pequeno programa com 2 ou 3 forms. O meu problema é como é que abro um form filho dentro do form pai, pois na internet ja vi vários exemplos mas por alguma razao nao consigo abrir o formulário. Será que alguem me pode ajudar, pf... A mim aconselharam-me a aprender a trabalhar com o embarcadero XE, pois é o software quea empresa usa no desenvolvimento de softwares. Atentamente, security. "Innovation distinguishes between a leader and a follower." Steve jobs.
nunopicado Posted August 8, 2012 at 11:22 AM Report #471733 Posted August 8, 2012 at 11:22 AM Bom dia e bem vindo ao Delphi. Antes de mais gostava de saber se, quando te referes a form filho, queres dizer o sistema MDI (forms que pertencem a uma form principal e que só existem dentro dessa) ou simplesmente forms secundárias, abertas a partir de uma principal, mas que ocupam o seu proprio espaço. Já agora, o sistema MDI caiu em desuso (se bem que se o sitio para onde fores programar as quiser usar, que remedio tens tu senão as usar também 😉 ) Convém saber isto, porque a maneira de trabalhar com forms é bastante diferente de um tipo para outro. Aproveita e mete o código que estás a usar para as abrir, para se ver onde está a falha! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
security Posted August 8, 2012 at 12:44 PM Author Report #471741 Posted August 8, 2012 at 12:44 PM Bom dia e obrigado pela dica. Sim estou a trabalhar com sistemas MDI Form. Não tenho muito código. Apenas criei um form MDI "pai" e um form "filho". No Form "pai" tenho um menu com uma opção "Pessoas" ->"Direção" e neste botao DIreção deveria abrir um form "filho". simplesmente. mas da sempre um ou mais erro/s. Gostava de saber como se faz essa simples função. Já agora, que tipo de sistemas se utiliza hoje em dia??? "Innovation distinguishes between a leader and a follower." Steve jobs.
thoga31 Posted August 8, 2012 at 12:58 PM Report #471743 Posted August 8, 2012 at 12:58 PM Já agora, que tipo de sistemas se utiliza hoje em dia??? Hoje em dia utiliza-se mais o sistema de múltiplas Forms com espaço independente. Por exemplo, para o teu caso, eu faria uma Form à parte. Considerando que a Form "Direcção" abre a partir da Principal, eu bloquearia esta enquanto a "Direcção" estivesse aberta, isto dependendo do propósito desta - supondo que é para preencher dados, bloquear é a melhor forma. Em VB.NET (porque eu não domino Delphi) isto far-se-ia do seguinte modo: Private Sub Button_Direccao(ByVal ... ) Handles Button_Direccao.Click 'gere o clique do botão "Direccao" Form_Direccao.Show() 'mostra a form "Direccao" Me.Enabled = False 'bloqueia a form principal (actual) End Sub O processo era revertido aquando o fecho da form "Direccao". Isto é o mais comum e, de certa forma, o mais intuitivo hoje em dia. Eu, pessoalmente, por exemplo, nunca apreciei muito o sistema MDI excepto em situações que assim o exigem, como certos IDEs. Knowledge is free!
apocsantos Posted August 8, 2012 at 02:43 PM Report #471745 Posted August 8, 2012 at 02:43 PM Boa tarde, A trabalhar com MDI's tens de criar um objecto "child-form" dentro do parent-form, mais correctamente na mesma unit. Vê o exemplo de código abaixo: procedure TfrMain.CreateChildForm (const childName : string); var Child: TfrChild; begin Child := TfrChild.Create(Application); Child.Caption := childName; end; Uma vez construído podes abri-lo no menu do parent-form, no evento click. Vê o exemplo: procedure TfrMain.NewChild1Click(Sender: TObject); begin CreateChildForm('Child '+IntToStr(MDIChildCount+1)); end; Já não uso isto à bastante tempo... Nem tive oportunidade de testar pois não tenho nem delphi nem lazarus aqui a jeito, mas a ideia é a mesma, agora só tens de adaptar o código para ti. Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
security Posted August 8, 2012 at 07:12 PM Author Report #471772 Posted August 8, 2012 at 07:12 PM (edited) Este procedure é colocado onde??? procedure TfrMain.CreateChildForm (const childName : string); var Child: TfrChild; begin Child := TfrChild.Create(Application); Child.Caption := childName; end; O codigo do formulario principal é unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TForm4 = class(TForm) MainMenu1: TMainMenu; irecao1: TMenuItem; procedure irecao1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation {$R *.dfm} procedure TForm4.irecao1Click(Sender: TObject); begin {Aqui fica o codigo: [b]CreateChildForm('Child '+IntToStr(MDIChildCount+1));[/b]} end; end. Edited August 8, 2012 at 07:13 PM by security "Innovation distinguishes between a leader and a follower." Steve jobs.
nunopicado Posted August 8, 2012 at 08:30 PM Report #471773 Posted August 8, 2012 at 08:30 PM Bem, uma maneira simples de usar as MDI's é assim: 1. Na tua form principal, alteras a propriedade FormStyle para fsMDIForm 2. Crias uma form secundária (será um modelo de form, pois vais poder abrir várias instancias dessa se quiseres), e modificas-lhe a propriedade FormStyle para fsMDIChild 3. Abres a source do teu ficheiro DPR. O Delphi mete lá uma instância de Application.CreateForm para cada form que crias no IDE. Eu pessoalmente não gosto disso, pelo que sugiro que removas todas as linhas destas, excepto a da form principal. 4. Adicionas a(s) unit(s) da(s) form(s) secundária(s) ao USES da form principal. 5. No evento OnClose da(s) form(s) secundária(s), mete o seguinte: procedure TfChild.FormClose(Sender: TObject; var Action: TCloseAction); // Linha criada pelo Delphi begin // Linha criada pelo Delphi Free; // Insere esta linha aqui <============== end; // Linha criada pelo Delphi 6. Quando quiseres criar uma nova form, inseres a seguinte linha: fchild:=TfChild.Create(self); // Metes isto num menu, num botão (onclick) ou onde quer que precises que uma form seja criada. Só com isto já consegues criar e fechar forms. Depois precisas do acessório. Por exemplo, para saberes quantas forms child uma form principal tem: ShowMessage(IntToStr(fMDIParent.MDIChildCount)); Para organizar todas as child forms lado a lado dentro da form principal: fMDIParent.Tile; Para organizar todas as child forms em cascata dentro da form principal: fMDIParent.Cascade; Para acederes às propriedades e eventos da child activa, qualquer que ela seja: fMDIParent.ActiveMDIChild Para percorreres todas as forms child for i:=0 to fMDIParent.MDIChildCount -1 do fMDIParent.MDIChildren[i] Etc. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
security Posted August 9, 2012 at 05:13 PM Author Report #471888 Posted August 9, 2012 at 05:13 PM acho que estou a perceber... assim é muito mais simples e rapido... e tambem mais parecido com vb.net... vou exprimentar... Obrigado "Innovation distinguishes between a leader and a follower." Steve jobs.
nunopicado Posted August 9, 2012 at 05:31 PM Report #471892 Posted August 9, 2012 at 05:31 PM Note-se que eu usei fMDIParent e fChild como os nomes das forms principal e secundária respectivamente. Se usares outros nomes, tens de alterar a chamada também. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now