Como se comunicar entre formulários

Os formulários modais oferecem recursos específicos que não podemos ter ao exibir de forma não modal. Mais comumente, exibiremos um formulário modalmente para isolar seus processos de qualquer coisa que possa ocorrer no formulário principal. Após a conclusão desses processos, convém saber se o usuário pressionou o botão Salvar ou Cancelar para fechar o formulário modal. Você pode escrever um código interessante para fazer isso, mas não precisa ser difícil. Delphi fornece formulários modais com a propriedade ModalResult, que podemos ler para informar como o usuário saiu do formulário.

O código a seguir retorna um resultado, mas a rotina de chamada o ignora:

var
F: TForm2; início
F: = TForm2.Create (nada); F.ShowModal; F.Release; ...

O exemplo mostrado acima mostra apenas o formulário, permite que o usuário faça algo com ele e o libera. Para verificar como o formulário foi finalizado, precisamos aproveitar o fato de que o método ShowModal é uma função que retorna um dos vários valores ModalResult. Mude a linha

instagram viewer

F.ShowModal

para

E se F.ShowModal = mrOk então

Precisamos de algum código no formato modal para configurar o que queremos recuperar. Há mais de uma maneira de obter o ModalResult, porque o TForm não é o único componente que possui uma propriedade ModalResult - o TButton também possui uma.

Vamos examinar primeiro o ModalResult do TButton. Inicie um novo projeto e adicione um formulário adicional (menu principal do Delphi IDE: Arquivo -> Novo -> Formulário). Este novo formulário terá um nome 'Form2'. Em seguida, adicione um TButton (Nome: 'Button1') ao formulário principal (Form1), clique duas vezes no novo botão e insira o seguinte código:

procedimento TForm1.Button1Click (Remetente: TObject); var f: TForm2; início
f: = TForm2.Create (nada); experimentarE se f. ShowModal = mrOk então
Legenda: = 'Sim'
outro
Legenda: = 'Não'; finalmente
f. Liberação; fim; fim;

Agora selecione o formulário adicional. Dê a ele dois TButtons, rotulando um 'Salvar' (Nome: 'btnSave'; Legenda: 'Salvar') e o outro 'Cancelar' (Nome: 'btnCancel'; Legenda: 'Cancelar'). Selecione o botão Salvar e pressione F4 para exibir o Inspetor de objetos, role para cima / baixo até encontrar a propriedade ModalResult e defina-o como mrOk. Volte para o formulário e selecione o botão Cancelar, pressione F4, selecione a propriedade ModalResult e defina-a como mrCancel.

É simples assim. Agora pressione F9 para executar o projeto. (Dependendo das configurações do ambiente, o Delphi pode solicitar o salvamento dos arquivos.) Quando o formulário principal aparecer, pressione o Botão1 que você adicionou anteriormente, para mostrar o formulário filho. Quando o formulário filho aparecer, pressione o botão Salvar e o formulário será fechado, uma vez de volta ao formulário principal, observe que a legenda diz "Sim". Pressione o botão do formulário principal para exibir o formulário filho novamente, mas desta vez pressione o botão Cancelar (ou o item Fechar do menu Sistema ou o botão [x] na área de legenda). A legenda do formulário principal será "Não".

Como é que isso funciona? Para descobrir, dê uma olhada no evento Click for TButton (de StdCtrls.pas):

procedimento TButton. Clique; var Forma: TCustomForm; início
Formulário: = GetParentForm (Self); E se Formulário nulo então
Formato. ModalResult: = ModalResult; herdado Clique; fim;

O que acontece é que o Proprietário (neste caso, a forma secundária) do TButton recebe seu ModalResult definido de acordo com o valor do ModalResult do TButton. Se você não definir o TButton. ModalResult, o valor é mrNone (por padrão). Mesmo se o TButton for colocado em outro controle, o formulário pai ainda será usado para definir seu resultado. A última linha chama o evento Click herdado de sua classe ancestral.

Para entender o que acontece com o Forms ModalResult, vale a pena revisar o código no Forms.pas, que você poderá encontrar em.. \ DelphiN \ Source (onde N representa o número da versão).

Na função ShowModal do TForm, logo após o formulário ser mostrado, o loop Repeat-While é iniciado, o que mantém a verificação da variável ModalResult para se tornar um valor maior que zero. Quando isso ocorre, o código final fecha o formulário.

Você pode definir ModalResult em tempo de design, conforme descrito acima, mas também pode definir a propriedade ModalResult do formulário diretamente no código em tempo de execução.

instagram story viewer