LHR 0 Denunciar post Postado Fevereiro 14, 2008 Olá pessoal, Mais uma vez, nessa hora de precisão, venho pedir socorro pra vcs do forum! Estou tentando executar uma função no OnExit do Edit, que pega o seu valor e guarda-o em uma variavel por exemplo. Porem o parametro Sender esta retornando como "()" pra mim, e nao com o nome do componente. Exemplo do meu codigo: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, LMDCustomControl, LMDCustomPanel, LMDCustomBevelPanel, LMDBaseEdit, LMDCustomEdit, LMDEdit; type TLMDEdit = class(LMDEdit.TLMDEdit); TFrmEtiqueta = class(TForm) LMDEdit1: TLMDEdit; procedure LMDEdit1Exit(Sender: TObject); procedure Teste(Sender: TObject; tipo: string); private { Private declarations } public { Public declarations } end; var FrmEtiqueta: TFrmEtiqueta; implementation uses Unit2; {$R *.dfm} procedure TFrmEtiqueta.Teste(Sender: TObject; tipo: string); begin If Sender.ClassType = TLMDEdit then begin if tipo = 'S' then TLMDEdit(Sender).Color:=clRed; end else begin TLMDEdit(Sender).Color:=clWindow; end; end; procedure TFrmEtiqueta.LMDEdit1Exit(Sender: TObject); begin Teste(Sender as TLMDEdit,'S'); end; end. Ele passa pela parte "If Sender.ClassType = TLMDEdit then" normalmente, mas na hora do: "TLMDEdit(Sender).Color:=clRed;" ele nao altera cor nenhuma no Edit (e pior que nao da erro algum). Ae eu verifico o valor do Sender, e ele mostra "()". Onde estou errando nesse codigo? Bom, agradeço desde já a todos pela atenção. Abraço e até mais! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Fevereiro 14, 2008 Tente mudar um pouco o fonte e fazer assim: procedure TFrmEtiqueta.Teste(Sender: TObject; tipo: string); begin If Sender.ClassType = TLMDEdit then begin if tipo = 'S' then TLMDEdit(Sender).Color:=clRed; end else begin TLMDEdit(Sender).Color:=clWindow; end; end; procedure TFrmEtiqueta.LMDEdit1Exit(Sender: TObject); begin Teste(Sender,'S'); end; Compartilhar este post Link para o post Compartilhar em outros sites
LHR 0 Denunciar post Postado Fevereiro 14, 2008 Entao Marcio, Nao entendi muito bem o que você mudou ae, pq parece estar igual. Mas fuçando aqui, eu descobri uma coisa. Ao invés de usar os componentes do LMD, coloquei o Edit do proprio Delphi. Ficando assim: ....... type TEdit = class(StdCtrls.TEdit); ....... procedure TFrmEtiqueta.Teste(Sender: TObject; tipo: string); begin If Sender.ClassType = TEdit then begin if tipo = 'S' then TEdit(Sender).Color:=clRed; end else begin TEdit(Sender).Color:=clWindow; end; end; procedure TFrmEtiqueta.Edit1Exit(Sender: TObject); begin Teste(Sender,'S'); end; E funcionou normalmente. Tambem, colocando o mouse em cima do "Sender" pra ver o valor, ele me mostra a mesma coisa de antes: "()" Entao o problema, acredito eu, deve estar no: "TLMDEdit = class(LMDEdit.TLMDEdit);" Se souber melhor como funciona as class, etc, desse pacote LMD, da um toque ae! Vlwzão pela ajuda. Abração!! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Fevereiro 14, 2008 Havia somente alterado a última linha: Teste(Sender as TLMDEdit,'S'); para: Teste(Sender,'S'); Compartilhar este post Link para o post Compartilhar em outros sites
LHR 0 Denunciar post Postado Fevereiro 14, 2008 Bom, mexendo mais aqui, consegui essa parte que queria. O problema era na propriedade COLOR do LMD, que por uma opção ele nao aceitava trocar a cor. Troquei ela entao por Font.Color por exemplo e funcionou perfeitamente. Agora o problema é o seguinte: -Eu tenho 80 Edit's em um Form. -E 80 QRLabel num QuickReport. Eu preciso de uma idéia de como fazer com que o valor dos Edit's, sejam colocados nos QRLabel. Eu tenho apenas o "Index" do QRLabel e não o nome. Entao eu tentei usar o comando: "QuickReport2.Controls[index]" Mas nao tem como eu alterar o CAPTION dele através disso =/ Entende? Nao existe a função: "QuickReport2.Controls[index].Caption := 'teste';" Entao nao sei como fazer isso =( Alguem teria alguma idéia? Eu precisava duma função que conseguisse alterar o CAPTION do componente possuindo apenas o seu INDEX e nao nome. Tem até jeito de descobrir o nome dele usano a função: "nome:=QuickReport2.Controls[index].Name;" Mas nao sei onde aplica-la depois disso. Bom, obrigado mais uma vez a todos. Até mais!! Compartilhar este post Link para o post Compartilhar em outros sites
LHR 0 Denunciar post Postado Fevereiro 14, 2008 Consegui! Quebrando a cabeça e pesquisando pelo forum, consegui montar a função. Ela ficou assim: ............. type TFTQRBarcode = class(FTQRBarcode.TFTQRBarcode); TLMDEdit = class(LMDEdit.TLMDEdit); TFrmEtiqueta = class(TForm) LMDEdit1: TLMDEdit; procedure LMDEdit1Exit(Sender: TObject); ............. procedure TFrmEtiqueta.QREtiqueta(Sender: TObject); var cindex:integer; begin If Sender.ClassType = TLMDEdit then begin TLMDEdit(Sender).Font.Color:=clRed; cindex:=TLMDEdit(Sender).ComponentIndex; TFTQRBarcode(QuickReport2.SummaryBand1.Controls[cindex]).Caption:=TLMDEdit(Sender).Text; end; end; procedure TFrmEtiqueta.LMDEdit1Exit(Sender: TObject); begin If TLMDEdit(Sender).Text <> '' then QREtiqueta(Sender); end; Funcionou perfeito ^^ Bom, vlwzão ae marcio pela atenção e ajuda! Abraço a todos. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Fevereiro 14, 2008 beleza... Compartilhar este post Link para o post Compartilhar em outros sites