Jump to content
Hercles

Levar informações de um Form para outro Form

Recommended Posts

Hercles

caros,

estou com esta questão - Como deixar um TEdit com formato dd/mm/aa (p/ data de nascimento) em Lazarus. Depois calcular a idade que vai pra um outro formulario...

Share this post


Link to post
Share on other sites
nunopicado

Para isto, em vez do TEdit usas um TMaskEdit.

Na propriedade EditMask podes definir o formato dos dados (por exemplo, 00/00/00).

Poderás depois validar (no OnExit) se o utilizador não inseriu uma data inválida, como 54/15/99.

Para saber a idade podes usar uma das várias funções de data, como a DaysBetween e a Now, que te dará quantos dias já passaram desde uma determinada data.

Tendo o numero de dias, podes facilmente converter em anos.

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Achei o TMaskedit fiz a mascara 00/00/00 !! ela apare na estrutura, depois de feita, mas quando eu copilo esta mascara não aparece no formulario e assim mesmo?

Share this post


Link to post
Share on other sites
nunopicado

É suposto aparecer. Inclusivamente, quando escreves, só tens de escrever os numeros, as barras já lá devem estar.

Testa a seguinte máscara:

00/00/00;1;_


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

tinha dado certo eu me confundi com outra coisa...

Agora o que não estou conseguindo é: Eu consigo chamar um formulário2 clicanco no botão do formulario1, mas não consigo chamar o formulario1 clicanco no botão do formulario2. o copilador não deixa eu colocar unit1 no uses do formulario2

Share this post


Link to post
Share on other sites
nunopicado

Agora o que não estou conseguindo é: Eu consigo chamar um formulário2 clicanco no botão do formulario1, mas não consigo chamar o formulario1 clicanco no botão do formulario2. o copilador não deixa eu colocar unit1 no uses do formulario2

Efectivamente não é possível fazer referências circulares.

Mas que mal pergunte (até para tentar ajudar), porquê é que precisas de tal?

Estás numa determinada form, chamemos-lhe form1. Chamas de lá a form2.

A form1 não deixou de existir. Continua lá, pelo que não é necessário abrir novamente.

Basta fechar a form2.

Qual é a situação específica que terias de fazer isso?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Porque tenho que preencher o formulario2 e ele vai trazer os dados para o formulario1 qdo eu clicar em enviar.... :)

Share this post


Link to post
Share on other sites
nunopicado

Porque tenho que preencher o formulario2 e ele vai trazer os dados para o formulario1 qdo eu clicar em enviar.... :)

Se é só uma questão de passagem de dados, então realmente não precisas de referencias cruzadas.

Vejamos o seguinte:

Deves ter algo deste género, algures na form1

// algures na form1
form2.ShowModal; // ou form2.Show, conforme o teu gosto

Hipotese A: Passar dados de Form1 para Form2

Imagina que precisas, ao abrir o form2, que um determinado TEdit fique preenchido, com dados que estão no form1.

Basta que antes de chamares a form2 lhe passes os dados:

// algures na form1
form2.edDataNascimento.Text:='15/12/88';
form2.ShowModal; 

Ao abrir a form2, os dados estarão lá, porque foram preenchidos antes do ShowModal/Show.

Hipotese B: Passar dados de Form2 para Form1

Quando terminas o que tens a fazer no form2, queres passar informação que lá tens para a form1.

// algures na form1
if form2.ShowModal=mrYes
  then begin
            // vai buscar os dados da form2 que são precisos na form1
            DataNascimento:=form2.edDataNascimento.Text;
       end; 

e no botão "Enviar" da form2, metes simplesmente:

// algures na form2
ModalResult:=mrYes;

Isto fará com que, ao clicar no Enviar da form2, a form2 é fechada com o valor mrYes.

Esse valor será depois testado na form1. Se ShowModal=mrYes, significa que o botão enviar foi clicado, e então os dados da form2 são recolhidos para a form1.

Não te esqueças que quando a form2 é fechada, ainda que já não esteja visivel, ainda está em memória, pelo que os dados estão lá todos.

Alguma dúvida a fazer isto avisa.

NOTA: O truque do ModalResult funciona apenas se usares o ShowModal para chamares a form2, que no caso até me parece fazer mais sentido (caso não saibas a diferença, chamando a form2 com o ShowModal e não com o Show impede que o utilizador mexa na form1 enquanto a form2 existir.

Se de todo preferires usar o Show para chamar a form2, terias de criar uma variável para testar se o botão Enviar tinha sido ou não pressionado. Simples também, mas menos prático.

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

o projeto é este:

Formulario Principal => Deve ter campos para que os seguintes dados sejam fornecidos:

* Nome do Cliente

* Data de Nascimento no formato dd/mm/aaaa

* Nome do medicamento

* Preco Bruto

Alem dos campos acima os seguintes campos devem ser trazidos dos outros formularios:

* Imposto: 15% do valor liguido

* desconto: valor calculado no formulario de venda a vista.

* Acrescimo: valor calculado no formulario de venda no cartão.

* Preco a pagar = Preco liquido + Imposto.

Este formulario tem 3 botões: um para limpar os dados dos campos, outro para fazer pagamento a vista e outro para fazer pagamento no cartão.

Formulario Pagamento a Vista

Este formulario deve ser aberto no click do botao Pagamento a Vista do formulario principal. Ele devera ter os seguintes campos:

* Nome do Cliente, trazido do formulario principal;

* Idade: calculada a partir da data de Nascimento fornecida no formulario principal;

* Preco Bruto, trazido do formulario principal;

* Desconto, fornecido pelo usuario em forma de n%, por exemplo 10%;

* Preco Liquido = Preco Bruto - Desconto.

Este formulario tem 2 botoes: um para limpar os dados dos campos, outro para fechar o formulario e levar os dados para o formulario principal.

Formulario Pagamento no Cartao

Este formulario deve ser aberto no click do botao Pagamento no Cartao do formulario principal. Ele devera ter os seguintes campos:

* Nome do Cliente, trazido do formulario principal;

* Idade: escrita por extenso e calculada a partir da data de Nascimento fornecida no

* formulario principal, por exemplo vinte seis anos;

* Preco Bruto, trazido do formulario principal;

* Acrescimo, fornecido pelo usuario em forma de n%, por exemplo 10%;;

* Preco Liquido = Preco Bruto + Acrescimo.

Este formulario tem 2 botoes: um para limpar os dados dos campos, outro para fechar o formulario e levar os dados para o formulario principal.

Share this post


Link to post
Share on other sites
nunopicado

Pela descrição, continua a parecer-me melhor usar o ShowModal.

Não sei se é isso que estavas a usar, mas...

O resto é como te disse. O botão "Enviar" só precisa de uma linha. O resto é feito na form1, logo a seguir à chamada da form2/form3, ou seja, imediatamente a seguir ao ShowModal, de preferencia dentro do tal IF, para validares se é para gravar os dados ou não.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

tentei fazer este codigo mas da erro...

procedure Tfrmpagvista.btnconcluiClick(Sender: TObject);
begin
 if frmpagvista.ShowModal=mrYes
  then begin
            // vai buscar os dados da pagvista que são precisos na frmpricipal
    frmprincipal.pbruto.text:= frmpadvista.txtpbruto.text;
           end;

Edited by nunopicado
Adicionadas tags GeShi

Share this post


Link to post
Share on other sites
nunopicado

Lê bem o que eu pus (especialmente os comentários).

Esse código terás de meter no form principal, quando chamas o form frmpagvista.

Dentro desse procedure Tfrmpagvista.btnconcluiClick, metes apenas:

ModalResult:=mrYes;

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Poxa amigo tentei agora como vc falou mas não deu certo. O 'formulario principal' eu consigo enviar o 'nome do cliente' para o 'formulario pagamento a vista' mas não consigo enviar do 'formulario pagamento a vista' o valor 'total bruto' pro formulario principal.

obs: no formulario principal eu criei um botão que tem este codigo

begin
 frmpagvista.txtnome.text:=frmprincipal.txtnome.text;
 dias:= date-strtodate(masnasc.text);
 anos:= dias div 365;
 frmpagvista.txtidade.text:= inttostr(anos);
 frmpagvista.txtpbruto.text:=frmprincipal.txtpbruto.text;
 frmpagvista.showmodal;
end; 

obs : coloquei unit2 que é a do formulario pagamento a vista.

uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
 MaskEdit, Menus, Unit2, unit3, um;

isto ai da certo para o formulario principal , mas fazer do form "pagamento a vista" para o form "principal " não funciona.. :(:(:(

Edited by nunopicado
Adicionadas tags GeShi

Share this post


Link to post
Share on other sites
nunopicado

O problema é que ainda estás a pensar "ao contrário"... :)

Aliás, não leste bem as instruções:

Hipotese B: Passar dados de Form2 para Form1

Quando terminas o que tens a fazer no form2, queres passar informação que lá tens para a form1.

// algures na form1
if form2.ShowModal=mrYes
  then begin
            // vai buscar os dados da form2 que são precisos na form1
            DataNascimento:=form2.edDataNascimento.Text;
       end;

e no botão "Enviar" da form2, metes simplesmente:

// algures na form2
ModalResult:=mrYes;

Tu estás a pensar que é o frmpagvista (form1) que tem de enviar os dados para o frmprincipal (form2).

Não é assim: O form2 não tem acesso ao form1.

Por isso, todas as interacções são feitas no form1.

O botão Enviar do form2 apenas dará a indicação que o form2 pode fechar, com um determinado resultado (no caso, mrYes).

Uma vez fechado o form2, o programa retorna o seu curso no form1, e é aí que vais buscar os dados.

Assim, NO FORM1, depois de chamares o form2, é que vais buscar os dados:

if frmpagvista.ShowModal=mrYes
  then begin
             // vai buscar os dados da pagvista que são precisos na frmpricipal
             frmprincipal.pbruto.text:= frmpadvista.txtpbruto.text;
        end; 

Este código que tinhas posto no botão enviar TEM DE FICAR NO FORM1, quando chamas o form2, em vez de usares apenas o ShowModal.

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

mas eu coloco este codigo em que parte do formulario principal? fiz aqui copilou mas não trouxe o pbruto do frmpagvista.....

if frmpagvista.ShowModal=mrYes
  then begin
             // vai buscar os dados da pagvista que são precisos na frmpricipal
             frmprincipal.txtpbruto.text:= frmpagvista.txtpbruto.text;
        end;

Edited by nunopicado
Adicionadas tags GeShi - Outra vez

Share this post


Link to post
Share on other sites
nunopicado

Helcles, amigo... presta atenção!

esse código deves meter no botão que usas para chamar o frmpagvista.

e no botão Enviar do frmpagvista não te esqueças de meter apenas o ModalResult=mrYes.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Hercles

Eita deu certo!!!!!!!!!!!!!!!! Desculpa pela minha falta de entendimento, falamos portugues mas a maneira que vc colocar as palavras eu as vezes não entendo, mas ja estou pegando a forma e entendendo o portugues de portugual.

ah !!! deu certo porém só quando eu clico duas vezes no botão ai ele vai, é assim mesmo?

Share this post


Link to post
Share on other sites
nunopicado

Eita deu certo!!!!!!!!!!!!!!!! Desculpa pela minha falta de entendimento, falamos portugues mas a maneira que vc colocar as palavras eu as vezes não entendo, mas ja estou pegando a forma e entendendo o portugues de portugual.

ah !!! deu certo porém só quando eu clico duas vezes no botão ai ele vai, é assim mesmo?

:) Não. Tem de dar com um click só.

Puseste em que evento do botão? onclick ou ondblclick?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

E ele não mostra logo a frmpagvista assim que clicas nele?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.