• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Br41n

[C++] Ajuda: Click = Novo Form (Resolvido)

8 mensagens neste tópico

Em borland C++ como é que ao clicar num botão faço com que um form novo apareça?

Tenho criado o form1, já com o botão. E já abri um form2. Que código coloco para que o form2 apareça depois de premido o botão do form1?

Obrigado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok isso é simples faz o seguinte.

1) Cria um novo projecto, salva com o nome por defeito, Unit1.cpp, Form1

2) Adiciona um novo form, por defeito vai-se chamar Form2 e Unit2.cpp, salva com o nome por defeito.

3) No Form1 adicona, junto ao #include<unit1.cpp> o #include<unit2.cpp>, deve ficar com algo assim:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h" // esta é que é alinha que tens q adicionar, OK  ao Form1 (Unit1.cpp)
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

Pois bem tas no bom caminho.

4)Adiciona agora ao Form1 um butão (por defeito ele deve-se chamar Button1). Clicka duas vezes nele :-) E adiciona o seguinte codigo:

    Form2 = new TForm2(Application); // aqui crias um novo objecto do tipo Form, que é o teu form2 e da-lhe como parent(pai) o Form1
    Form2->ShowModal(); // aqui mande exibir a janela Form2
     delete Form2;  // Qaundo a janela for fechada, liberta-se a memoria do objecto

Ok, como podes ver até que é simples. Qualquer coisa avisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D :ipool:

Muito Obrigado!

Sim, de facto é simples.

Só uma duvida me resta. Quando dizes TForm2(Application), quais são as outras opções que posso colocar em TForm2(**)? Qual o resultado de cada uma?

Obrigado!  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existem 3 tipos de contrutores, associados ao TForm (TForm::TForm), geralmente tu nunca chamas o TForm directamente, usualmente chamas sempre um descendente, no caso anterior como deves ter reparado foram o Form1 e Form2 que são ambos descendentes do TForm.

Respondendo a tua questão são estes os contrutores disponiveis para os descententes d TForm:

__fastcall virtual TForm(Classes::TComponent* AOwner) : Forms::TCustomForm(AOwner) { }
__fastcall TForm(Classes::TComponent* AOwner, int Dummy) : Forms::TCustomForm(AOwner, Dummy) { }
__fastcall TForm(HWND ParentWindow) : Forms::TCustomForm(ParentWindow) { }

Para o 1 exemplo:

Forms::TCustomForm(AOwner) { }

TCustomForm é o teu Form2 de há pouco, aqui tu passa o AOwner ou seja a janela pai,que é o componente que é responsavel por libertar o Form dois, o resultado é basicamente se fechares o Form1 o Form2 vai atras.

Forms::TCustomForm(AOwner, Dummy) { }

Este nunca usei mas continuas a passar o Owner (pai, Form1) como parametro e passas como segundo parametro (um numero inteiro), ele serve para passares alguns componentes/recursos de um dado ficheiro ".DFM file" para o novo form, basicamente o segundo parametro, é apenas para distinguir o primeiro contrutor  Forms::TCustomForm(AOwner) do segundo Forms::TCustomForm(AOwner, Dummy) , e usa-se da seguin-te maneira:

WriteComponentResFile("Temp.dfm", Form1);

…
Form2 = new TForm(Application,1);

ReadComponentResFile("Temp.dfm", Form2);

O Ultimo só serve para passar como pai componetes que não sejam suportados directamente pela VCL do C++ (Borland), ou seja componetes que não descendam de TForm, como objectos ActiveX e fins, nunca usei.

Como podes ver aqui "sempre" ou quase sempre se usa o 1 contrutor de todos, os restantes são para casos muito particulares, a explicaçao foi um pouco em cima do joelho mas se necessitares d um exmplo de algum a funcionar avisa q devo ter um para aqui.

Fica bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para nao criar novo topic, decidi aproveitar este... nao está a funcionar em C++ (Windows Forms Application) ... codigo vai ser diferente, certo? alguem podia ajudar?  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para nao criar novo topic, decidi aproveitar este... nao está a funcionar em C++ (Windows Forms Application) ... codigo vai ser diferente, certo? alguem podia ajudar?  :dontgetit:

help??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que é que não está a funcionar? O melhor é criares um tópico novo e apresentares as tuas dúvidas, os erros, e o código para alguém te poder ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora