security Posted August 8, 2012 at 10:27 AM Report Share #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. Link to comment Share on other sites More sharing options...
nunopicado Posted August 8, 2012 at 11:22 AM Report Share #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. Link to comment Share on other sites More sharing options...
security Posted August 8, 2012 at 12:44 PM Author Report Share #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. Link to comment Share on other sites More sharing options...
thoga31 Posted August 8, 2012 at 12:58 PM Report Share #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! Link to comment Share on other sites More sharing options...
apocsantos Posted August 8, 2012 at 02:43 PM Report Share #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" Link to comment Share on other sites More sharing options...
security Posted August 8, 2012 at 07:12 PM Author Report Share #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. Link to comment Share on other sites More sharing options...
nunopicado Posted August 8, 2012 at 08:30 PM Report Share #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. Link to comment Share on other sites More sharing options...
security Posted August 9, 2012 at 05:13 PM Author Report Share #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. Link to comment Share on other sites More sharing options...
nunopicado Posted August 9, 2012 at 05:31 PM Report Share #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. Link to comment Share on other sites More sharing options...
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