Delphi: Como exibir o form com .Show e depois torna-lo Modal (simular o .ShowModal)
Pessoal, é o seguinte. Estou tentando fazer algo um pouco fora do comum no Delphi.
Através do Form1 preciso abrir o Form2, enviar alguns comandos pra ele, e depois esperar uma resposta (um ModalResult).
Obs: Não posso enviar variável pois são muitos procedimentos.E não posso usar o Form1 dentro do Form2 pois o Form2 é universal e é usado em vários projetos.
Alguém tem uma luz de como eu poderia fazer isso?
Exemplo de como eu gostaria que fosse:
Form2.Create(Form1);
Form2.Show;
Form2.btnIncluir.Click;
Form2.qrProduto.FieldByName('CODBARRA').AsString := Form1.qrItem.FieldByName('vEAN').AsString;
Form2.qrProduto.FieldByName('NOME').AsString := Form1.qrItem.FieldByName('xNome').AsString;
Form2.EditExemplo.SetFocus;
//Feito isso eu precisaria esperar um mrOk ou mrCancel do Form2
Ex:
if Form2.ShowModal=mrOk then
begin
end;
Só que se eu der o ShowModal ele já está visivel e dá erro.
Algo teria uma luz para essa dúvida meio louca? rs
Através do Form1 preciso abrir o Form2, enviar alguns comandos pra ele, e depois esperar uma resposta (um ModalResult).
Obs: Não posso enviar variável pois são muitos procedimentos.E não posso usar o Form1 dentro do Form2 pois o Form2 é universal e é usado em vários projetos.
Alguém tem uma luz de como eu poderia fazer isso?
Exemplo de como eu gostaria que fosse:
Form2.Create(Form1);
Form2.Show;
Form2.btnIncluir.Click;
Form2.qrProduto.FieldByName('CODBARRA').AsString := Form1.qrItem.FieldByName('vEAN').AsString;
Form2.qrProduto.FieldByName('NOME').AsString := Form1.qrItem.FieldByName('xNome').AsString;
Form2.EditExemplo.SetFocus;
//Feito isso eu precisaria esperar um mrOk ou mrCancel do Form2
Ex:
if Form2.ShowModal=mrOk then
begin
end;
Só que se eu der o ShowModal ele já está visivel e dá erro.
Algo teria uma luz para essa dúvida meio louca? rs
Maicon Saraiva
Curtidas 1
Respostas
Eliezer Souza
01/03/2016
Boa tarde Maicon, documenta o erro que está acontecendo fazendo o favor, creio que o que está tentando fazer deveria estar em uma camada de negócio, mas documente o erro que vou analisar o que pode ser feito.
GOSTEI 0
Raimundo Pereira
01/03/2016
Maicom, fiquei meio perdido do que realmente você precisa.
Form1.qrItem.FieldByName('xNome').AsString;
Porque não usa o datamodule.
precisa mesmo que o Form2 esteja em modal ?
Mais se realmente quiser seguir a linha antes do onshow você deve fechalo ou no proprio form2
Form2.close;
form2.ShowModal;
Os dados no form2 serão preservados
Espero que ajude.
Form1.qrItem.FieldByName('xNome').AsString;
Porque não usa o datamodule.
precisa mesmo que o Form2 esteja em modal ?
Mais se realmente quiser seguir a linha antes do onshow você deve fechalo ou no proprio form2
Form2.close;
form2.ShowModal;
Os dados no form2 serão preservados
Espero que ajude.
GOSTEI 0
Emerson Nascimento
01/03/2016
GOSTEI 0
Maicon Saraiva
01/03/2016
Pessoal, valeu pela ajuda, acho que consegui resolver aqui.
Tipo eu não uso data modulo. meu "qrproduto" fica dentro do Form2. e preciso em dado momento manipular ele, mas preciso que o usuário confirme ou cancela essa manipulação, por isso preciso do ShowModal e verificou se retornou mrOk.
Bom fiz da seguinte forma:
- No evento "OnShow" do Form 2 tinha uns códigos que só poderiam ser executados uma vez, então coloquei uma variável "ShowAgain" e esse códigos executam de acordo com o valor dela.
Então fica assim:
- Crio o Form2.
- Dou o .Show;
- Faço as operações no Form2, como btnInserirClick(), qrproduto.FieldByName().AsString := '', etc.
- Depois disso eu dou um .Hide no form 2;
- Defino o valor da variavel "ShowAgain" para True;
- dou um .ShowModal;
Resolveu, o único porém, é que ele exibe a tela, oculta e exibe de novo (desta vez em Modal).
Não sei se conseguiram entender minha necessidade, mas assim por enquanto resolveu. rs
Muito obrigado pela ajuda.
Tipo eu não uso data modulo. meu "qrproduto" fica dentro do Form2. e preciso em dado momento manipular ele, mas preciso que o usuário confirme ou cancela essa manipulação, por isso preciso do ShowModal e verificou se retornou mrOk.
Bom fiz da seguinte forma:
- No evento "OnShow" do Form 2 tinha uns códigos que só poderiam ser executados uma vez, então coloquei uma variável "ShowAgain" e esse códigos executam de acordo com o valor dela.
Então fica assim:
- Crio o Form2.
- Dou o .Show;
- Faço as operações no Form2, como btnInserirClick(), qrproduto.FieldByName().AsString := '', etc.
- Depois disso eu dou um .Hide no form 2;
- Defino o valor da variavel "ShowAgain" para True;
- dou um .ShowModal;
Resolveu, o único porém, é que ele exibe a tela, oculta e exibe de novo (desta vez em Modal).
Não sei se conseguiram entender minha necessidade, mas assim por enquanto resolveu. rs
Muito obrigado pela ajuda.
GOSTEI 0
Emerson Nascimento
01/03/2016
A solução que eu te apresentei faz exatamente o que você precisa, sem qualquer "porém".
Faça o teste.
"Use DisableTaskWindow e EnableTaskWindow.
Veja o exemplo neste link"
Faça o teste.
"Use DisableTaskWindow e EnableTaskWindow.
Veja o exemplo neste link"
GOSTEI 0