manefilho 0 Denunciar post Postado Outubro 9, 2011 Olá pessoal do iMasters, mais uma vez aqui preciso de ajuda. Queria saber se você poderiam me dizer como eu faço para mudar o On-Click de um Button a partir de outro Button, ou seja, mudar a função de um Button a partir de outro. Exemplo: Em um Form eu coloco dois Botões, em um dos botões eu quero colocar um comando que altere o On-Click do segundo Button. Além desse problema, será que alguém poderia me ajudar com o Ballon Hint? Não sei commo usar. Desde já agradeço. Meu email: manefilho1@hotmail.com Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Outubro 10, 2011 Para mudar o OnClick do button em tempo de execução, você precisa escrever outra procedure que tenha a mesma declaração de parâmetros que a procedure original, ou seja, no caso do onClick, sua nova procedure deve ter o apenas 1 parâmetro e ele tem que ser to tipo TObject. Para modificar em tempo de execução, você informa que o evento onClick deve chamar outra procedure. Vamos ao código: procedure TForm1.Button1Click(Sender : TObject); begin //Imagine que esta é a procedure que é executada por padrão ShowMessage('Eu tô aqui!'); end; procedure TForm1.MinhaOutraProcedure(Sender : TObject); begin //Esta será a procedure que passará a ser chamada no lugar da procedure acima ShowMessage('Eu já estou em outro lugar'); end; procedure TForm1.Button2.Click(Sender : TObject); begin //Esta é a procedure atribuída ao segundo botão Button1.OnClick := MinhaOutraProcedure; //Button1.OnClick := @MinhaOutraProcedure; //Use esta forma caso utilize o Lazarus-FreePascal end; Compartilhar este post Link para o post Compartilhar em outros sites
manefilho 0 Denunciar post Postado Outubro 10, 2011 Para mudar o OnClick do button em tempo de execução, você precisa escrever outra procedure que tenha a mesma declaração de parâmetros que a procedure original, ou seja, no caso do onClick, sua nova procedure deve ter o apenas 1 parâmetro e ele tem que ser to tipo TObject. Para modificar em tempo de execução, você informa que o evento onClick deve chamar outra procedure. Vamos ao código: procedure TForm1.Button1Click(Sender : TObject); begin //Imagine que esta é a procedure que é executada por padrão ShowMessage('Eu tô aqui!'); end; procedure TForm1.MinhaOutraProcedure(Sender : TObject); begin //Esta será a procedure que passará a ser chamada no lugar da procedure acima ShowMessage('Eu já estou em outro lugar'); end; procedure TForm1.Button2.Click(Sender : TObject); begin //Esta é a procedure atribuída ao segundo botão Button1.OnClick := MinhaOutraProcedure; //Button1.OnClick := @MinhaOutraProcedure; //Use esta forma caso utilize o Lazarus-FreePascal end; Mano eu sou meio lerdo, ainda tô aprendendo programação no começo eu usava o Delphi 7 depois migrei para o Lazarus e agora estou usando o Delphi 2009 e to gostando, acho que não vou mais mudar de versão. Mais por favor me descupe pois como eu disse sou ainda meio perdido, quando eu fui compilar deu erro, esse erro: [DCC Error] Unit1.pas(34): E2003 Undeclared identifier: 'MinhaOutraProcedure' [DCC Error] Unit1.pas(34): E2029 ';' expected but '(' found [DCC Error] Unit1.pas(43): E2003 Undeclared identifier: 'MinhaOutraProcedure' [DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas' Com certeza tá na cara que falta declarar, mais veja só a linha 34. Será que você poderia me dizer como resolver os doi problemas? Desde de já obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Outubro 11, 2011 Não consegui identificar o erro mas tenho uma idéia. Acredito que você não declarou o método MinhaOutraProcedure, se não for isto, provavelmente há alguma expressão escrita erroneamente. Meu código (no Lazarus) ficou assim unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { private declarations } public { public declarations } procedure MinhaOutraProcedure(Sender : TObject); end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Eu tô aqui!'); end; procedure TForm1.Button2Click(Sender: TObject); begin Button1.OnClick := @MinhaOutraProcedure; end; procedure TForm1.MinhaOutraProcedure(Sender: TObject); begin //Esta será a procedure que passará a ser chamada no lugar da procedure acima ShowMessage('Eu já estou em outro lugar'); end; end. e este é o mesmo exemplo no TurboDelphi (Delphi 2006) unit Unit1; interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { private declarations } public { public declarations } procedure MinhaOutraProcedure(Sender : TObject); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Eu tô aqui!'); end; procedure TForm1.Button2Click(Sender: TObject); begin Button1.OnClick := MinhaOutraProcedure; end; procedure TForm1.MinhaOutraProcedure(Sender: TObject); begin //Esta será a procedure que passará a ser chamada no lugar da procedure acima ShowMessage('Eu já estou em outro lugar'); end; end. Compartilhar este post Link para o post Compartilhar em outros sites
manefilho 0 Denunciar post Postado Outubro 11, 2011 Cara valeu pela ajuda, eu tinha esquecido de declarar. Mais eu tenho mais duvidas, eu queria que meu programa mudasse de linguagem a partir de documentos externos, ou seja, de arquivos INI, INF ou LNG. Aqui está um arquivo de linguagem que eu fiz: Linguagem em português: [General] Program=XEdit Author=Francisco de Assis [CUSTOM] Label1=Abrir Label2=Novo Label3=Salvar Label4=Salvar Como Linguagem em inglês: Program=XEdit Author=Francisco de Assis [CUSTOM] Label1=Open Label2=New Label3=Save Label4=Save as Dá pra ver o que eu quero na logica, quero que o que estiver depois do '=' (igual) vá para o Caption do Label, Button ou de Hint. Como eu poderia resolver esse problema. Obrigado pela paciência. Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Outubro 15, 2011 Isto é um arquivo INI. procure um tutorial sobre como usar arquivos INI no delphi. (não posso explicar melhor porque estou no celular) Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Nunes 0 Denunciar post Postado Outubro 15, 2011 O delphi tem um sitema proprio de idioma, esta no menu project-language eu acho, nunca usei, não sei se fucniona, mas fica a dica, derepente mais rapdio e simples do que usar estes .INI Voce disse que ta usando o Delphi 2009, ja testou o XE?. Na minha opnião(cada um tem a sua), tenho certeza de que o XE por enquanto é o melhor ja feito. Compartilhar este post Link para o post Compartilhar em outros sites