GARANTIR DESCONTO

Fórum passar valores de variaveis de um form para outro no delphi 7 #420745

30/07/2012

0

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

Carlos Cabral

Responder

Posts

30/07/2012

Marco Salles

Porque vc quer fazer um Locate para trazer o mesmo registro ???

Vc não utiliza DataModulo ???
Responder

Gostei + 0

30/07/2012

Carlos Cabral

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

Gostei + 0

30/07/2012

Wilton Júnior

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

Gostei + 0

30/07/2012

Carlos Cabral

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
Responder

Gostei + 0

30/07/2012

Marco Salles

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;
Responder

Gostei + 0

30/07/2012

William

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

Gostei + 0

30/07/2012

Carlos Cabral

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

Gostei + 0

30/07/2012

William

Tenta debugar linha por linha, assim vc acompanha o valor da variável ...
Responder

Gostei + 0

30/07/2012

Carlos Cabral

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

Gostei + 0

30/07/2012

William

A primeiro form está assim?

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;
Responder

Gostei + 0

30/07/2012

Carlos Cabral

Sim. Esta desta forma. Agora no segundo form eu preciso ter esses valores em mãos.
Responder

Gostei + 0

30/07/2012

Carlos Cabral

Faltou apenas que antes do Numero_nota e Serie_nota esta o nome do formulario2 no caso frmCtpagarTitulos2.Numero_Nota e...
Responder

Gostei + 0

30/07/2012

William

Repare neste teste usando 2 forms, o form1 vai passar um valor para variável do form2:

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

Gostei + 0

30/07/2012

Carlos Cabral

Vou tentar e te falo já
Responder

Gostei + 0

30/07/2012

Carlos Cabral

Voce é o cara. Na realidade o botão não é o que quero, mas entendi o fundamento, pô meu, valeu.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar