Form mdi

28/05/2008

1

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.


Responder

Posts

28/05/2008

Eniorm

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:

...
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.


Responder

28/05/2008

Brunodsr

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:

//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


Responder

28/05/2008

Pestana_

[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:

...
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.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira