Form mdi
olá amigos, gostaria de saber qual os cuidados que devo tomar com as aplicações mdi e quais as vantagens que tenho. Poderia colocar os pros e os contras e quem puder tb me explicar como funciona uma aplicação mdi tb agradeceria.
Sownray
Curtidas 0
Respostas
Eniorm
28/05/2008
vejo como principal vantagem o uso de MDI o fato de ser possível abrir várias janelas ao mesmo tempo, principalmente se por exemplo o usuário estiver num cadastro e precisar com urgência consultar dados num outro form do programa... ou ele abandona o cadastro ou conclui para depois fazer a consulta.
no MDI isso não acontece! basta abrir o form, consultar o que precisa, e depois retornar ao cadastro.
cuidados que deve ter é no que diz respeito as transações, se vai ou não ser possível abrir o mesmo form mais de uma vez etc.
outro problema que eu enfrentei foi que, muitas vezes em forms de consulta, o registro buscado ficava armazenado numa variável, depois ao retornar ao form anterior eu usava o valor armazenado nessa variável para buscar dados e exibir no form.... e isso geramente era feito depois do ShowModal;
com ShowModal, a execução para e fica aguardando o Close do form aberto em questão, já com o Show não
ex:
* neste caso, a execução só continua depois do ShowModal quando ocorrer o Close no Form2
** neste caso, após o show, as duas linhas seguintes seriam executadas na sequência... o que é desagradável uma vez que eu posso não ter concluído a pesquisa ainda.
no MDI isso não acontece! basta abrir o form, consultar o que precisa, e depois retornar ao cadastro.
cuidados que deve ter é no que diz respeito as transações, se vai ou não ser possível abrir o mesmo form mais de uma vez etc.
outro problema que eu enfrentei foi que, muitas vezes em forms de consulta, o registro buscado ficava armazenado numa variável, depois ao retornar ao form anterior eu usava o valor armazenado nessa variável para buscar dados e exibir no form.... e isso geramente era feito depois do ShowModal;
com ShowModal, a execução para e fica aguardando o Close do form aberto em questão, já com o Show não
ex:
... Form2.ShowModal; // * Edit1.Text := Form2.qryPesquisa.FieldByName(´codigo´).AsString; Edit1.OnExit(Self); ...
* neste caso, a execução só continua depois do ShowModal quando ocorrer o Close no Form2
... Form2.Show; // ** Edit1.Text := Form2.qryPesquisa.FieldByName(´codigo´).AsString; Edit1.OnExit(Self); ...
** neste caso, após o show, as duas linhas seguintes seriam executadas na sequência... o que é desagradável uma vez que eu posso não ter concluído a pesquisa ainda.
GOSTEI 0
Brunodsr
28/05/2008
Para resolver o problema da linha de comando ser executada em seguida, da pra fazer uma gambiarra interessante. Vc fica mandando o form processar mensagens exustivamente até que ele se esvaia. Tipo assim:
Espero ter ajudado
//Procedure que vai dar efeito modal ao form MDI procedure f_ShowModal(hChildHandle: THandle); begin while IsWindow(hChildHandle) do begin sleep(1); Application.ProcessMessages; end; end; //Chamando var hnd:THandle; frm: TFrTeste; begin frm := TFrTeste.Create(self); hnd := frm.handle); f_ShowModal(hnd); showmessage(´teste´); //so sera executado quando o form for fechado. end;
Espero ter ajudado
GOSTEI 0
Pestana_
28/05/2008
[quote:df9d721289=´Enio Marconcini´]outro problema que eu enfrentei foi que, muitas vezes em forms de consulta, o registro buscado ficava armazenado numa variável, depois ao retornar ao form anterior eu usava o valor armazenado nessa variável para buscar dados e exibir no form.... e isso geramente era feito depois do ShowModal;
com ShowModal, a execução para e fica aguardando o Close do form aberto em questão, já com o Show não
ex:
* neste caso, a execução só continua depois do ShowModal quando ocorrer o Close no Form2
** neste caso, após o show, as duas linhas seguintes seriam executadas na sequência... o que é desagradável uma vez que eu posso não ter concluído a pesquisa ainda.[/quote:df9d721289]
neste caso você teria que devolver o valor desta variavel que foi produzida no form de consulta atravez de rotinas!
formPesq.Show;
no evento OnClick do botão de pesquisar por exemplo, chame a rotina do form que o chamou.
+/- assim.
Acho que a maior vantagem é isso que o [b:df9d721289]Enio[/b:df9d721289] disse!
flw.
com ShowModal, a execução para e fica aguardando o Close do form aberto em questão, já com o Show não
ex:
... Form2.ShowModal; // * Edit1.Text := Form2.qryPesquisa.FieldByName(´codigo´).AsString; Edit1.OnExit(Self); ...
* neste caso, a execução só continua depois do ShowModal quando ocorrer o Close no Form2
... Form2.Show; // ** Edit1.Text := Form2.qryPesquisa.FieldByName(´codigo´).AsString; Edit1.OnExit(Self); ...
** neste caso, após o show, as duas linhas seguintes seriam executadas na sequência... o que é desagradável uma vez que eu posso não ter concluído a pesquisa ainda.[/quote:df9d721289]
neste caso você teria que devolver o valor desta variavel que foi produzida no form de consulta atravez de rotinas!
formPesq.Show;
no evento OnClick do botão de pesquisar por exemplo, chame a rotina do form que o chamou.
procedure TformPesq.botaoPesqClick(sender : TObject); begin form1.rotina(edit2.Text); end; form1 que chamou o form de pesquisa. function Tform1.rotina(valor string); begin edit1.text := valor; end;
+/- assim.
Acho que a maior vantagem é isso que o [b:df9d721289]Enio[/b:df9d721289] disse!
vejo como principal vantagem o uso de MDI o fato de ser possível abrir várias janelas ao mesmo tempo, principalmente se por exemplo o usuário estiver num cadastro e precisar com urgência consultar dados num outro form do programa
flw.
GOSTEI 0