Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LHR

[Resolvido] Componente sem nome

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.