JonatasFn 0 Denunciar post Postado Agosto 3, 2009 Bom dia, preciso usar uma variável do form Login no form Principal, já andei pesquisando e vi que devo declarar a variável dentro de Public e definir a Unit Login dentro de Uses, já fiz isto mas não tá dando certo. O que devo fazer? O que estou fazendo de errado? Unit Login: private { Private declarations } public { Public declarations } usuario : String; end; var frmLogin: TfrmLogin; procedure TfrmLogin.btEntrarClick(Sender: TObject); begin if edSenha.Text = dbeSenha.text then begin usuario := 'teste'; frmPrincipal.Show; frmLogin.Hide; end else Application.messagebox ('A SENHA INFORMADA ESTÁ INCORRETA !', 'Atenção'); end; E a Unit Principal: uses CadFuncionarios, CadCidades, Login, CadEstado, CadEscolaridade; Label1.Caption := usuario; Dá este erro: Principal.pas(90): Undeclared identifier: 'usuario' Quando declarei dentro de var, ele não deu erro, mas a variavel tbm não recebeu nada. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 3, 2009 A sim, é assim amigo, esta variavel pertence a um objeto (o form) então para acessa-la, utilize assim: frmLogin.Usuario espero ter ajudado A sim, so lembrando, essa variavel não é "Global", ela e uma variavel (da pra se dizer "propriedade") do objeto formLogin. As variaveis globais são declaradas na sessão "var" das units do seu projeto Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 3, 2009 Raficcha, valew pea ajuda, mas não funcionou. Eu fiz assim: Label1.Caption := frmLogin.usuario; Não deu erro, mas tbm não apareceu nada no Label. Era pra aparecer "Teste", que eu inseri na variável no Form Login. Começo a achar q eu é q estou fazendo algo de errado. Só não sei o que? Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 3, 2009 Aonde você coloco u o "Label1.Caption := frmLogin.usuario"? certifiquese-se de que colocou ele depois do usuario := 'teste'; uma dica, coloque o "Label1.Caption := frmLogin.usuario" dentro de um TTimer e teste o programa Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Agosto 3, 2009 Será que você não está destruindo da memória o form de login antes de pegar o conteúdo da variável? Qual o erro? AccessViolation? Muito provável que seja isso; Se for, você pode setar o valor do caption do label do form principal a partir do form de login... Ai você é quem decide... Abraço Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 3, 2009 Aonde você coloco u o "Label1.Caption := frmLogin.usuario"? certifiquese-se de que colocou ele depois do usuario := 'teste'; uma dica, coloque o "Label1.Caption := frmLogin.usuario" dentro de um TTimer e teste o programa Como assim depois? o "usuario := 'teste'" está em uma Unit e "Label1.Caption := frmLogin.usuario" está em outra. Será que você não está destruindo da memória o form de login antes de pegar o conteúdo da variável? Qual o erro? AccessViolation? Muito provável que seja isso; Se for, você pode setar o valor do caption do label do form principal a partir do form de login... Ai você é quem decide... Abraço Não tá dando erro nenhum, só que não está exibindo nada, é como se a variável estivesse recebendo ''(nada). Eu to dando um HIDE no form, mas é depois de atribuir valor pra variável. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 3, 2009 Assim, antes de receber o valor que esta em frmLogin.usuario, você tem que atribuir um valor a ela. por isso eu falei para colocar um TTimer. Se você esta fazendo Label1.Caption := frmLogin.usuario no metodo "OnCreate" de algum form, verifique se este form não esta sendo criado antes do frmLogin ok O metodo onCreate do Formulari principal é executado antes do metodo OnCreate do formulario frmLogin por exemplo Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 3, 2009 Putz, denovo bloqueo a minha postagem, ai que raiva.... hehe ... mas tudo bem, iscrivenhetenho denovo Assim, você tem que, antes de receber o valor de "usuario" em "label1.caption", adicionar o valor "teste". Se você esta fazendo "Label1.caption := frmlogin.usuario" no metodo onCreate do Formulario principal, de nada vai adiantar, pois o metodo onCreate do Formulario principal, é executado antes do metodo onCreate do frmLogin por exemplo. Coloque este Label1.caption := frmlogin.usuario em um button para ver se da certo Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 3, 2009 Putz, denovo bloqueo a minha postagem, ai que raiva.... hehe ... mas tudo bem, iscrivenhetenho denovo Assim, você tem que, antes de receber o valor de "usuario" em "label1.caption", adicionar o valor "teste". Se você esta fazendo "Label1.caption := frmlogin.usuario" no metodo onCreate do Formulario principal, de nada vai adiantar, pois o metodo onCreate do Formulario principal, é executado antes do metodo onCreate do frmLogin por exemplo. Coloque este Label1.caption := frmlogin.usuario em um button para ver se da certo Entendi seu raciocínio, mas a atribuição da variavel usuario, está sendo feita no OnClick de um Button, no botão Entrar do form Login, e o meu form Login é o Main, entaum ele é criado primeiro não é? Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Agosto 3, 2009 tente declarar sua variável assim: private { Private declarations } public { Public declarations } end; var frmLogin: TfrmLogin; usuario: String; procedure TfrmLogin.btEntrarClick(Sender: TObject); begin if edSenha.Text = dbeSenha.text then begin usuario := 'teste'; frmPrincipal.Show; frmLogin.Hide; end else Application.messagebox ('A SENHA INFORMADA ESTÁ INCORRETA !', 'Atenção'); repare que declarei ela junto com o form... para utiliza-la, faça como estava fazendo no início, declarando esta unit na cláusula uses das demais ... qq coisa post novamente ... abraços !!! Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 4, 2009 tente declarar sua variável assim: private { Private declarations } public { Public declarations } end; var frmLogin: TfrmLogin; usuario: String; procedure TfrmLogin.btEntrarClick(Sender: TObject); begin if edSenha.Text = dbeSenha.text then begin usuario := 'teste'; frmPrincipal.Show; frmLogin.Hide; end else Application.messagebox ('A SENHA INFORMADA ESTÁ INCORRETA !', 'Atenção'); repare que declarei ela junto com o form... para utiliza-la, faça como estava fazendo no início, declarando esta unit na cláusula uses das demais ... qq coisa post novamente ... abraços !!! Valew pela força Daniel, mas nao funfou... Não é possível, eu devo estar fazendo algo de errado. Não deu erro da forma q você me passou, mas o Label não recebeu nada, ele nem apareceu. É como se a variável estive vazia. Deixa eu fazer uma pergunta q eu já deveria ter feito antes. O motivo de eu querer saber como se usa variáveis globais(ou seja lá como se chamam), é pelo seguinte, eu programa em PHP, e no PHP quando eu quero enviar uma variavel de uma página pra outra eu uso o método POST, GET ou até mesmo SESSION. E é isso que preciso fazer, quando o usuário faz login, eu envie para uma variável e posso pegar o valor desta variável em outro form. Eu tenho também um form com um DBGrid, que exibe todos os resultados da tabela funcionário, e preciso que quando eu clique sobre uma linha, ele abra uma outro form, já com as informações do respectivo funcionário, e acho q para isso vou precisar disto. É assim mesmo que se faz, ou estou misturando tudo? Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 4, 2009 Cara, acho que você esta misturando um pouco msm, não da para pegar variaveis do Delphi direto pelo php, você vai ter que ter algum meio de enviar esses valores para o PHP (Um arquivo, uma tabela no banco de dados, conexão por Sockets, WebService). Eu nunca fiz isso então nom posso dar uma respota muito concreta.. Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 4, 2009 Cara, acho que você esta misturando um pouco msm, não da para pegar variaveis do Delphi direto pelo php, você vai ter que ter algum meio de enviar esses valores para o PHP (Um arquivo, uma tabela no banco de dados, conexão por Sockets, WebService). Eu nunca fiz isso então nom posso dar uma respota muito concreta.. Não, não Raficcha... você entendeu errado... a história do PHP é só pra explicar o q eu quero. Quero dizer q eu quero enviar variáveis de um form para o outro + ou - como se faz no PHP. Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 4, 2009 Putz... já tô desanimando... Olha o que eu fiz: Unit Login (Main) var frmLogin: TfrmLogin; usuario : String; Unit Principal implementation uses CadFuncionarios, Login; ... procedure TfrmPrincipal.FormCreate(Sender: TObject); begin Edit1.Text := Login.usuario; end; Mas não aparece nada no TEdit do form principal, já testei a variável a exibindo-a no próprio form Login e exibe. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 4, 2009 Cara, nunca vai aparecer nada, a primeira coisa que o teu programa faz ai em em cima (no formCreate) é pegar o valor de usuario (que ainda não esta inicializado). olha so, colca ai um projeto novo no Delphi, e coloca dois formularios (Form1 e Form2) No form1 coloque tres botões Na primeira Unit1 (a do form1) coloque unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Variavel_usuario: string; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Showmessage(usuario); end; procedure TForm1.Button2Click(Sender: TObject); begin showmessage(form2.variavel_no_form); end; procedure TForm1.Button3Click(Sender: TObject); begin usuario := 'este é o valor da variavel global "Usuario" que esta em Unit2'; Form2.variavel_no_form := 'Este é o valor da variavel Form2.variavel_no_form'; { pode fazer Unit2.Usuario := 'Teste'; } end; end. e na unit2 (a do form2) coloque unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) private { Private declarations } public { Public declarations } variavel_no_form : string; end; var Form2: TForm2; Usuario: string; implementation {$R *.dfm} end. agora testa ai quando você atribui um valor a um TEdit por exemplo, ele não vai ficar atualizando o seu valor toda a vez que a variavel é alterada, então, sempre que desejar atualizar um valor em um TEdit.Text, ou seja, copiar o valor de uma variavel para outra compatível, temos que acionar um trecho de código. De nada adianta eu passar o valor de uma variavel X a outra Y e depois inicializar X ."primeiro tenho que inicializar , depois passo o valor. Primeiro altero, depois atualizo" Você apenas esta utilizando as coisas na ordem errada Quando não da certo, coloque cada coisa em um botão, e execute na ordem. Bom, se não for isso, você deve ter algum procedimento limpando a variavel. Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Agosto 6, 2009 Bom, gostaria de dizer que o delphi não tem o conceito de variáveis globais a nível de projeto e sim apenas a nível de Unit (escopo de declaração). para exemplo, faça assim: 1 - Crie um novo projeto 2 - Insira um form em branco 3 - insira um botao e um edit no primeiro form seguindo estas etapas - e apenas estas etapas - você terá 2 forms, o primeiro, com 2 componentes (1 edit e um button) e o segundo pelado. não altere nome de nenhum objeto do projeto bom, no form1, aperte F12 para ver o source e substitua todo o source da sua uni1 pelo código que segue abaixo unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Frase: String; //Variável Global A NÍVEL DE UNIT, ou seja, eu acesso ela de qualquer lugar desta Unit implementation {$R *.dfm} uses unit2; //necessário para que eu utilize os métodos do outro form, como o ShowModal; procedure TForm1.Button1Click(Sender: TObject); //Evento OnClick begin Frase := Edit1.Text; form2.ShowModal; end; end. e na unit2, aperte F12 para ver o source e coloque o código abaixo unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} uses unit1; //Preciso incluir a unit que tem a variável global (a nível de unit) para acessar a mesma procedure TForm2.FormShow(Sender: TObject); begin ShowMessage(Frase); end; end. Leia os comentários do source. Observe que eu trabalhei com apenas 2 métodos, acesse o object inspector e verifique se os eventos dos componentes estão apontando para os métodos certos (Button1.onclick e Form2.OnShow) ------- Se este exemplo funcionar mas o seu source não, lembre que voce deve analisar o fluxo do programa, execute seu programa utilizando a tecla F7 e acompanhe o valor da sua variável.... [/b] Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 10, 2009 Pessoal, como não descobri o que estva fazendo de errado, fui por outro caminho. Que, aliás, não sei se é a forma correta. Mas funcionou e supriu as minhas necessidades (pelo menos por enquanto). A solução que encontrei foi usar objetos com um Edit e pegar a variável que está dentro do Edit, já que declaro a unit q contém o Edit no Uses, e depois uso a variável. Ex.: Uses Login, ... ... variavel := frmLogin.Edit1.text; E funcionou, caso alguém saiba um motivo pra não usar esta forma, será muito útil para aprender. Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Agosto 11, 2009 até o momento, nenhuma objeção... ...Agora, para que não fique esta dúvida do porque que o seu não funcionou, você poderia postar um pouco do seu source... Compartilhar este post Link para o post Compartilhar em outros sites
rodrigo_rolim 0 Denunciar post Postado Agosto 11, 2009 Amigo JonatasFn. Eu também tinha esse problema aliás tds precisam ,às vezes não, de variáveis globais. E eu resolvo o problema da seguinte forma : adiciono ao projeto uma nova unit e a chamo de untGlobais e nela declaro todas variáveis globais e quando eu quiser acessar alguma dessas variáveis é só adiciona na cláusula "uses" a unit com as váriaveis globais. Pelo ao menos consegui driblar esse problema desse jeito. unit untglobais; interface var frmPrincipalFechado : Boolean; usuarioLogado : String; codrevendedorAtivo : Integer; terminarAplicacao : Boolean; implementation begin frmPrincipalFechado := True; usuarioLogado := 'wAfRThYwDg4186g4GsseR6'; codrevendedorAtivo := -1; terminarAplicacao := false; end. Quando você precisar de uma variável global adicione na uses a untGlobais (no meu caso) private { Private declarations } function checarLogin : Boolean; function validacampos(campo1,campo2 : String): Boolean; public { Public declarations } end; var frmLogin: TfrmLogin; tentativasLogin : Integer; implementation uses untfrmNewUser, untdmRevendas, untfrmroot, untglobais {unit das variáveis globais}; Compartilhar este post Link para o post Compartilhar em outros sites
JonatasFn 0 Denunciar post Postado Agosto 11, 2009 até o momento, nenhuma objeção... ...Agora, para que não fique esta dúvida do porque que o seu não funcionou, você poderia postar um pouco do seu source... Cara, o meu source tá logo acima... Ou você quer todo o código? Compartilhar este post Link para o post Compartilhar em outros sites