Ir para o conteúdo
Hercles

Levar informações de um Form para outro Form

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

Editado por nunopicado
Adicionadas tags GeShi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.. :(:(:(

Editado por nunopicado
Adicionadas tags GeShi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

Editado por nunopicado
Adicionadas tags GeShi - Outra vez

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CarlosPiccoli

Eu tenho dois Formularios e presciso ao clicar no botão fechar levar dados de um campo para outro fiz o seguinte codigo:

procedure TForm3.btnFecharClick(Sender: TObject);
begin
 if Acrescimo.text= '' then
 ShowMessage('Insira o campo Acréscimo');
 Form1.Acrescimo.text:= Form3.Acrescimo.text;
 Form3.Hide;
end;

Porém quando executo da erro dizendo que não achou o Form1.

Obs: já fiz referencia na Uses sobre todas as unidades.

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Eu tenho dois Formularios e presciso ao clicar no botão fechar levar dados de um campo para outro fiz o seguinte codigo:

procedure TForm3.btnFecharClick(Sender: TObject);
begin
 if Acrescimo.text= '' then
 ShowMessage('Insira o campo Acréscimo');
 Form1.Acrescimo.text:= Form3.Acrescimo.text;
 Form3.Hide;
end;

Porém quando executo da erro dizendo que não achou o Form1.

Obs: já fiz referencia na Uses sobre todas as unidades.

Não adianta muito criar novos tópicos para a mesma pergunta, se não leres as respostas que te dão...

Eu já vi este topico, mas não me esclareceu muito.

Vê antes este: http://www.portugal-a-programar.pt/topic/61949-como-deixar-um-tedit-com-formato-ddmmaa-p-data-de-nascimento-em-lazarus-depois-calcular-a-idade-em-outro-formulario/

Expliquei lá a outro user a mesma questão!

Depois de leres, se houver duvidas concretas, avisa.

Visto não teres respondido à minha última sugestão, e agora estares a colocar um novo tópico para a mesma coisa, parte-se do principio que não leste o tópico que te sugeri. Por isso, aqui está ele, junto ao teu para não deixares de ver a resposta à tua dúvida!

Só para clarificar, o truque não é o botão Fechar enviar dados para o Form1. O truque é o botão do Form1 que te abre o Form3 ir lá buscar os dados antes de libertar a memória.

O botão fechar só precisa, na maior parte das vezes, fechar o form respectivo.


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.