DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

Fórum DevMedia


Autor
Mensagem
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 08:57:13 PM
 
Preciso de ajuda amigos. Estou tentando passar valores de variaveis de um form para outro chamado em tempo de execução, mas não estou conseguindo. Cheguei a ver algumas situações no forum, mas mesmo assim nao funcionou. A idéia é a seguinte: imagine que estou no form de consulta de titulos e ao clicar em um determinado titulo, chamo outro form para realizar alteração, desta forma quero pegar os valores chaves armazena-los em variaveis e transporta-las para outro form, assim desta forma, ao ser iniciado o outro form na procedure create, pego as variaveis e faço um locate no banco para trazer o registro. Por favor me ajudem.
MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 30/7/2012 09:23:54 PM
 
Porque vc quer fazer um Locate para trazer o mesmo registro ???

Vc não utiliza DataModulo ???

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 09:27:49 PM
 
sim e não. veja, quando estou em consulta em determinado form como dito, criei outro form com a finalidade de incluir ou alterar. desta forma, passando as variaveis vou saber se estou incluindo ou alterando, que no caso de alteracao, trarei o registro na ativa para proceder com a mudanca no caso de ser desejada.
WILTON SéRGIO BACALá JúNIOR
 


País: Brasil
Estado: SP
Cidade: São José do Rio Preto
Mensagens: 269
 Postado em: 30/7/2012 09:29:37 PM
 
Cria uma variavel global, cria uma unit e dentro dessa unit todas variaveis que vai usar.
No evento onshow do forma inicie elas.

Espero ter ajudado
Deus o abençoe.

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 09:32:06 PM
 
Abaixo esta como estou tentando fazer


Form2

public
passacampo: Integer;

Form1

botaoclick
Tform2.create(Self)
form2.passacampo := 001;
form2.showmodal;
Freeandnill(form2);

Sem contar outras várias formas que tentei, mas toda vez que vou ver a variavel esta sem valor

MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 30/7/2012 09:49:03 PM
 
Olha so , não é a forma mais indicada , mas irá funcionar

form2:=Tform2.create(nil);
try
form2.passacampo := 001;
form2.showmodal;
finally
Freeandnill(form2);
end;

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/7/2012 09:49:51 PM
 
Colega em qual evento vc tenta capturar esse valor, se for no evento OnCreate do form2 não vai funcionar mesmo, pq vc primeiro cria o form e depois alimenta a variável, faz um teste no OnShow ou coloca um botão no form2 e chama o valor da variável.
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 10:17:05 PM
 
Meu é exatamente o que estou fazendo, também tentei no onShow. Eu acho que não estou sabendo como utilizar. Sabe eu sou novato no delphi, to apanhando um pouco. Mas nada do que eu tentei esta funcionando.
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/7/2012 10:24:13 PM
 
Tenta debugar linha por linha, assim vc acompanha o valor da variável ...
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 10:30:37 PM
 
Fiz isto, por isso descobri que o valor não esta passando.


unit CtpagarDigitacaoTitulos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, StdCtrls, Buttons, DBCtrls, Mask, ExtCtrls,
DBClient;
type
Tfrmctpagartitulos = class(TForm)
bbinclusao: TBitBtn;
bbalteracao: TBitBtn;
bbexclusao: TBitBtn;
bbimpressao: TBitBtn;
bbconfirmacao: TBitBtn;
bbcancela: TBitBtn;
bbsair: TBitBtn;
bbconsulta: TBitBtn;
gbfiltros: TGroupBox;
dsctpfornecedor: TDataSource;
dstitulo: TDataSource;
dsitem: TDataSource;
dsvencimento: TDataSource;
dsdesconto: TDataSource;
gbtitulos: TGroupBox;
dbtitulos: TDBGrid;
gbitens: TGroupBox;
dbitems: TDBGrid;
gbvencimentos: TGroupBox;
dbvencimentos: TDBGrid;
gbdescontos: TGroupBox;
dbdescontos: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure bbsairClick(Sender: TObject);
procedure dbtitulosCellClick(Column: TColumn);
procedure dbvencimentosCellClick(Column: TColumn);
procedure bbexclusaoClick(Sender: TObject);
procedure bbinclusaoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmctpagartitulos: Tfrmctpagartitulos;
var empaux : Integer;
var fornecaux : Integer;
var notaaux : Integer;
var serieaux : String;
var dataaux : TDate;
var tituloatual : String;
var transporte : String;
implementation
uses CtpagarDM, CtpagarDigitacaoTitulos2;
{$R *.dfm}
procedure Tfrmctpagartitulos.FormCreate(Sender: TObject);
begin
.
.
.
.
.
.
.
.
.
.
.
end;
Aqui neste ponto é a chamada do outro formulario. Eu preciso passar o valor de uma variavel para o outro form.

Exemplo:

numero_nota_fiscal := 00001;
serie_nota_fiscal : U;

procedure Tfrmctpagartitulos.bbinclusaoClick(Sender: TObject);
begin
with Tfrmctpagartitulos2.Create(Self) do
try
frmctpagartitulos2.ShowModal;
finally
FreeAndNil(frmctpagartitulos2);
end;
.
.
.
.
.
.
end;
end.

Aqui o Outro form.

unit CtpagarDigitacaoTitulos2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, StdCtrls, Buttons, Mask, Grids, DBGrids, ExtCtrls, DB,
DBClient;
type
Tfrmctpagartitulos2 = class(TForm)
pnprincipal: TPanel;
lbcodfornec: TLabel;
lbnumerotitulo: TLabel;
lbserietitulo: TLabel;
lbdataemissao: TLabel;
lbvalortitulo: TLabel;
lbdescontos: TLabel;
lbjuros: TLabel;
lbmulta: TLabel;
lbliquido: TLabel;
lbqtdeitens: TLabel;
lbqtdecobranca: TLabel;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure trazregistrotitulo;
procedure trazregistroitem;
procedure trazregistrovencimento;
procedure trazregistrodesconto;
public
{ Public declarations }
end;
var
frmctpagartitulos2: Tfrmctpagartitulos2;
opcaon : Integer;
opcaoprocura : Integer;
opcaovalidar : Boolean;
contador : Integer;
contador3 : Integer;
contadoritem : Integer;
contadorvencimento : Integer;
contadordesconto : Integer;
valorauxiliar : Currency;
codigoempresa : Integer;
implementation
uses CtpagarDM, DateUtils;
{$R *.dfm}
procedure Tfrmctpagartitulos2.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
perform(WM_NEXTDLGCTL, 0, 0);
end;
end;


Neste ponto eu imagino que seja onde vou pegar os valores das variaveis


procedure Tfrmctpagartitulos2.FormCreate(Sender: TObject);
begin
dmCtpagar.cdsCtpFornecedor.Open;
dmCtpagar.cdsCtpGrupo.Open;
dmCtpagar.cdsCtpTitulo.Open;
dmCtpagar.cdsCtpItem.Open;
dmCtpagar.cdsCtpVencimento.Open;
dmCtpagar.cdsCtpDesconto.Open;
cdsctpprincipaltitulo.Open;
cdsctpprincipalitem.Open;
cdsctpprincipalvencimento.Open;
cdsctpprincipaldesconto.Open;
codigoempresa := 001;
opcaon := 1;
end;
procedure Tfrmctpagartitulos2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dmCtpagar.cdsCtpFornecedor.Close;
dmCtpagar.cdsCtpGrupo.Close;
dmCtpagar.cdsCtpTitulo.Close;
dmCtpagar.cdsCtpItem.Close;
dmCtpagar.cdsCtpVencimento.Close;
dmCtpagar.cdsCtpDesconto.Close;
cdsctpprincipaltitulo.Close;
cdsctpprincipalitem.Close;
cdsctpprincipalvencimento.Close;
cdsctpprincipaldesconto.Close;
end;
procedure Tfrmctpagartitulos2.dbeprincipalcodigoExit(Sender: TObject);
begin
.
.
.
.
.
end;
.
.
.
.
end.

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/7/2012 10:42:53 PM
 
A primeiro form está assim?

#Código
procedure Tfrmctpagartitulos.bbinclusaoClick(Sender: TObject);
begin
  with Tfrmctpagartitulos2.Create(Self) do
  try
    numero_nota_fiscal := 00001;
    serie_nota_fiscal : U;
    frmctpagartitulos2.ShowModal;
  finally
    FreeAndNil(frmctpagartitulos2);
  end;

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 10:48:38 PM
 
Sim. Esta desta forma. Agora no segundo form eu preciso ter esses valores em mãos.
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 10:51:02 PM
 
Faltou apenas que antes do Numero_nota e Serie_nota esta o nome do formulario2 no caso frmCtpagarTitulos2.Numero_Nota e...

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/7/2012 10:54:01 PM
 
Repare neste teste usando 2 forms, o form1 vai passar um valor para variável do form2:

#Código
// Unit do form1
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FMTBcd;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
     try
       Form2 := TForm2.Create(self);
       //Passo o valo 001 para variável que está no form2
       campo := 001;
       Form2.ShowModal;
     finally
        FreeAndNil(form2);
     end;
end;

end.

//Unit do form2
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public

  end;

var
  Form2: TForm2;
  campo: Integer; // Declaração da variável

implementation

{$R *.dfm}

procedure TForm2.btn1Click(Sender: TObject);
begin
    ShowMessage(IntToStr(campo));
end;

procedure TForm2.FormShow(Sender: TObject);
begin
    ShowMessage(IntToStr(campo));
end;

end.


Note que testo 2 vezes, uma no evento OnShow do form2 e outra no evento OnClick do botão. Funcionou normalmente....

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 11:04:20 PM
 
Vou tentar e te falo já
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 11:13:59 PM
 
Voce é o cara. Na realidade o botão não é o que quero, mas entendi o fundamento, pô meu, valeu.
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/7/2012 11:16:50 PM
 
Disponha precisando estamos por aí ...
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 11:37:01 PM
 
Cara só mais uma perguntinha, pois tudo que fiz deu certo. Após o FormCreate o form já esta criado, porém quando o focus cair sobre o primeiro campo na lista, eu preciso operar as opcoes antes, pois dai vou saber o que fazer, neste caso o OnShow é executado primeiro que o focus ?
carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 30/7/2012 11:43:45 PM
 
Talvez eu não tenha me explicado direito. Vou tentar ser bem explicito. Fiz um form onde os grids dos titulos trazem todas as informações necessarias. Blz. O usuário poderá consultar todas as informacoes que neles estao contidas. Neste form posso excluir, incluir ou alterar um titulo. Na exclusao é facil e posso nele mesmo verificar se o usuario tem essa possibilidade. Caso o usuario queira incluir, ou alterar ele ira clicar nos botoes, o que chamara o outro form, que tem de servir para a mesma funcao. Ora se crio o form atraves do Create, em seguida a este a execucao já será executada, após isto o focus será para o primeiro campo da tela. Entao antes desse focus eu preciso executar algumas situacoes. A pergunta é: O que esta entre o Create e o Focus do campo ? Seria o OnShow, por acaso ?
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 31/7/2012 06:50:02 AM
 
Sim, use o OnShow ..
Cauê Nishijima
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 29
 Postado em: 31/7/2012 07:31:47 PM
 
Eu sei que o problema já foi resolvido, mas se eu puder dar minha opinião.
A forma com que foi resolvido, realmente funciona perfeitamente, mas o ideal, que já esta comprovando, é a utilização da Orientação a Objeto, você criaria um objeto do tipo Titulo, e passaria o objeto totalmente populado pelo Create para o outro form, você trabalha jogando objetos de um lado para outro, facilita muito.
Se for do seu interesse posso criar um exemplo simples e te enviar.

Abraço
Cauê Nishijima

MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 31/7/2012 07:46:11 PM
 

Citação:
Eu sei que o problema já foi resolvido, mas se eu puder dar minha opinião.
A forma com que foi resolvido, realmente funciona perfeitamente, mas o ideal, que já esta comprovando, é a utilização da Orientação a Objeto, você criaria um objeto do tipo Titulo, e passaria o objeto totalmente populado pelo Create para o outro form, você trabalha jogando objetos de um lado para outro, facilita muito.
Se for do seu interesse posso criar um exemplo simples e te enviar.

Abraço
Cauê Nishijima


concordo com vc amigo , ja disse issto desde do inicio (Funcionar porém ...)

Cauê Nishijima
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 29
 Postado em: 31/7/2012 08:06:40 PM
 
Olá MARCO ANTONIO SALLES tudo bem? Não sei você, mas eu tenho dificuldade de encontrar programadores Delphi que tenham conhecimento em O.O. acredito que seja pela grande facilidade que o Delphi fornece, mas Delphi é uma linguagem completamente O.O. assim como Java e C#.
E acredito que com os investimentos que a Embarcadeiro vem fazendo nessa grande ferramente, agora com o firemonkey, DataSnap aperfeiçoado, RTTI, Unicode, métodos anônimos, etc...Só falta agora os programdores começarem a utilizar O.O. e Padrões de Projetos, mas a Embarcadeiro vem investindo nisso com as certificações e os novos cursos oficiais.

Qual sua opinião sobre O.O. no mundo dos programadores Delphi? Você também tem essa dificuldade de encontrar desenvolvedores O.O.?

Att.
Cauê Nishijima

MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 31/7/2012 08:13:34 PM
 
Abri um outro tópico para discutir este assunto , para não poluir este tópico cujo o assunto é diferente desde
obrigado
[]sds

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 4/8/2012 04:36:14 PM
 

Citação:

Citação:
Eu sei que o problema já foi resolvido, mas se eu puder dar minha opinião.
A forma com que foi resolvido, realmente funciona perfeitamente, mas o ideal, que já esta comprovando, é a utilização da Orientação a Objeto, você criaria um objeto do tipo Titulo, e passaria o objeto totalmente populado pelo Create para o outro form, você trabalha jogando objetos de um lado para outro, facilita muito.
Se for do seu interesse posso criar um exemplo simples e te enviar.

Abraço
Cauê Nishijima


concordo com vc amigo , ja disse issto desde do inicio (Funcionar porém ...)


Ola Caue

Gostaria de saber sim como posso faze-lo ?

carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 4/8/2012 04:37:38 PM
 
Gostaria de saber como ? Inclusive seria muito mais facil pois poderia estar andando com esta informacao para qualquer lugar
dentro dos forms que por ventura venham a ser chamado

MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 4/8/2012 10:14:59 PM
 

Citação:
Gostaria de saber como ? Inclusive seria muito mais facil pois poderia estar andando com esta informacao para qualquer lugar
dentro dos forms que por ventura venham a ser chamado


é assim

1) Vc define o Objeto . No meu caso vou trabalhar com Record

Type
TParametros = Record
numero_nota_fiscal :String;
serie_nota_fiscal : char;
End;

2)depois vc define um constructor Personalizado , pode ser tb um ShowModal , Vou definir o constructor
na secçã Public do form a ser chamado
........
public
{ Public declarations }
constructor create(Aowner:TComponent;Parametros:TParametros);overload;
end;

3) Vc defibe o campo na secção Private deste form do tipo do Objeto a ser Passado

private
FParametros:TParametros;

4) Vc implementa o método do constructor

constructor TForm3.create(Aowner: TComponent;Parametros:TParametros);
begin
inherited create(Aowner);
FParametros:=Parametros;
end;

5) Vc utiliza o objeto como quiser

procedure TForm3.Button1Click(Sender: TObject);
begin
Showmessage(FParametros.numero_nota_fiscal);
end;

6) No form que vc esta vc chama do modo

var
campo:TParametros;
begin
campo.numero_nota_fiscal:=0001;
campo.serie_nota_fiscal:=U;
Form3:=TForm3.create(nil,campo); // No meu casoo form a ser chamado é o Form3
try
form3.ShowModal;
finally
FreeAndNil(form3);
end;
end;

Deste modo vc trafega informações de um form para outro utilizando POO

entendeu ????


carlos cabral
 


País: Brasil
Estado: SP
Cidade: guarulhos
Mensagens: 58
 Postado em: 5/8/2012 06:49:50 PM
 
Aparentemente Sim. Estou terminando o módulo. Vou implementar essa função e ver como fica. Valeu
MARCO ANTONIO SALLES
 
 

 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1701
 Postado em: 5/8/2012 07:25:05 PM
 

Citação:
Aparentemente Sim. Estou terminando o módulo. Vou implementar essa função e ver como fica. Valeu


Ok...

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03