Projeto paint – quarta parte
Vamos igualar a propriedade GroupIndex para os menus que desejamos integrantes de um mesmo grupo. Devemos respeitar algumas regras básicas: o valor (número) de um grupo (GroupIndex) é igual ou ascendente da esquerda para a direita (Ex: Arquivo = 0, Editar = 1, Janela = 2 etc); o grupo da janela pai que possuir o mesmo valor de GroupIndex da janela filha será substituído pelo grupo desta; após a junção, a localização dos menus será determinada pelo valor dos grupos - ascendente da esquerda para a direita.
Em posse dessas informações, vamos alterar os GroupIndex dos menus, conforme exposto a seguir:
|
FrmPncel |
|
Arquivo - GroupIndex = 0 |
|
Janela - GroupIndex = 2 |
|
EdtDsnh |
|
Arquivo - GroupIndex = 0 |
|
Editar - GroupIndex = 1 |
No menu Sair da janela pai digite a função Close() para encerrar o programa:
void __fastcall TFrmPncel::Sair1Click(TObject *Sender)
{
Close(); // Encerra o programa
}
|
Faça um teste e veja que nada acontece quando você tentar usar o menu Sair. Isso porque os menus das janelas não compartilham o evento. Vamos, então, anexar um manipulador de eventos ao OnClick do menu Arquivo - Sair do EdtDsnh.
void __fastcall TedtDsnh::Sair1Click(TObject *Sender)
{
FrmPncel->SairClick(Sender); /*Chama o método SairClick
de FrmPncel*/
}
|
|
Nota: O ramo TObject
Todos os objetos da VCL descendem de TObject , uma classe abstrata cujos métodos definem os comportamentos fundamentais como construção, destruição e tratamento de mensagens. A maior parte das poderosas capacidades dos objetos VCL é estabelecida pelos métodos que TObject introduz. TObject encapsula os comportamentos fundamentais comum a todos os objetos na VCL, apresentando métodos que provêem: a capacidade de responder quando objetos são criadas ou destruídos; informação de instância num objeto e informação em tempo de execução (RTTI ) acerca dessas propriedades públicas; suporte para tratamento de mensagens.
Esse ramo inclui diversos e diferentes tipos de classes que são muito úteis quando você está desenvolvendo aplicações.
Na linha de código:
void __fastcall TFrmPncel::Sair1Click(TObject *Sender)
Temos a declaração de um ponteiro do tipo TObject cujo nome é Sender (poderia ser outro nome qualquer que respeite as limitações impostas por C++). Daí temos o tipo de parâmetro passado pela função: FrmPncel->SairClick(Sender); ser o TObject. Se você observar bem, verá que esse também é o tipo recebido por: void __fastcall TFrmPncel::Sair1Click(TObject *Sender) Dessa forma, conseguimos chamar o método sair de TfrmPncel, desde TedtDsnh, o qual será o responsável pelo encerramento do programa através da chamada da função Close(). A função Close() inserida dentro de uma janela filha provoca o fechamento desta janela; se colocada na janela principal, o encerramento do programa.
|
Tente rodar a aplicação. O compilador emitirá uma mensagem de erro acusando que FrmPncel não está definido. Devemos, então, adicionar o arquivo de cabeçalho correspondente. No meu compilador, ele ficou definido como Meu_Paint.h. Faça o seguinte: De um clique em File e depois em Include Unid Hdr... Na caixa de diálogo que se abrir, escolha o arquivo correspondente e dê um OK. Rode a aplicação e veja que o programa já encerra via menu Sair.
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |