Unico procedimento para identificar varios componentes

Delphi

27/04/2009

Tenho um radio group e dentro dele tenho um panel, dois labels.
Gostaria que quando clicasse em qualquer um destes componentes ou dentro do proprio radiogroup , disparasse um unico procedimento que identificasse o radiogroup.


Pedroso

Pedroso

Curtidas 0

Respostas

Woinch

Woinch

27/04/2009

Crie um evento OnClick para esse RadioGroup (exemplo: RadioGroup1Click) e nos eventos OnClick dos outros componentes coloque apenas o nome desse evento.

Se não for isso que queria, tem como explicar um pouco melhor? Porque não entendi muito bem.

Espero ter ajudado.


GOSTEI 0
Pedroso

Pedroso

27/04/2009

o que procuro é mais ou menos isto

Private
LastControl: TControl;
procedure CntrlOfChangeControl(Sender: TObject);


procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := CntrlOfChangeControl;
end;

procedure TForm1.CntrlOfChangeControl(Sender: TObject);
var
JmpToControl: TControl;
JmpToComponent: TComponent;
begin
if ActiveControl <> Nil then
if ActiveControl is TJvPanel then begin
if Length((ActiveControl as TJvPanel).Name)=9 then
JmpToComponent.Name:= ´gbCabide´ +
RightStr((ActiveControl as TJvPanel).Name,2);
if Length((ActiveControl as TJvPanel).Name)=11 then
JmpToComponent.Name:= ´gbSofa´ +
RightStr((ActiveControl as TJvPanel).Name,2);

JmpToControl:=TRadioGroup(JmpToComponent);
if (JmpToControl as TRadioGroup).Color= clBlack then

LastControl:= TRadioGroup(JmpToComponent);
end;
end;

Desta forma consigo descobrir se o objeto foi selecionado pelo focus , o problema é que não consigo foco em panel. Alguem tem alguma ideia?


GOSTEI 0
Marco Salles

Marco Salles

27/04/2009

On Entre não recebe o Foco ????? como assim ???

Não é que o Panel Não receba o Foco .. é o Label que não recebe pois
ele descende da TGraphicControl e não da TWinControl

Então se seu Panel so tem Label vc deve programar o Evento OnClick

Mas o Label não detera o Foco ...



procedure TForm1.FormCreate(Sender: TObject);
begin
panel1.Parent:=RadioGroup1;
panel1.Left:=10;
panel1.Top:=10;
end;



procedure TForm1.Label1Click(Sender: TObject);
begin
Panel1Click(TControl(sender).Parent);
end;



procedure TForm1.Panel1Click(Sender: TObject);
begin
 Showmessage(´Nome do Container do ´+ Tpanel(sender).Name+´ = ´
 +TPanel(sender).Parent.Name);
end;



GOSTEI 0
Marco Salles

Marco Salles

27/04/2009

Para o Panel Receber efetivamente o Foco Altere a Propriedade
TabStop para True

e coloque no Evento OnEnter do Panel

Showmessage(´estou em´+ TWinControl(sender).Name);



é aqueloa Hora que o Foco Some , e vc tem que dar um Tab para ir
para o Proximo Controle ... Entende ????


GOSTEI 0
Pedroso

Pedroso

27/04/2009

Ok ... mas imagine que vc tenha não so 1 radiogroup mas sim 10 no mesmo form , a ideia não descobrir qual o nome do compoenente pelo focus mas sim pelo click. Mas da mesma forma que o exemplo que demonstrei anteirormente . Capturando do sistema o click e em qual objeto foi clicado em um unico procedimento..


GOSTEI 0
Marco Salles

Marco Salles

27/04/2009

Capturando do sistema o click e em qual objeto foi clicado em um unico procedimento..


E o que vc acha que estas instruções fazem ???

Basta ligar os mesmo Manipuladores dos diversos componentes ao
mesmo evento

procedure TForm1.FormCreate(Sender: TObject); begin panel1.Parent:=RadioGroup1; panel1.Left:=10; panel1.Top:=10; //Outros Paneis Outros RadioGroup end;


procedure TForm1.TodosLabelDoSuFormClick(Sender: TObject); 
begin 
TodosPanelDoSeuFomrClick(TControl(sender).Parent); 
end;



procedure TForm1.TodosPanelDoSeuFomrClick(Sender: TObject); 
begin 
 Showmessage(´Nome do Container do ´+ Tpanel(sender).Name+´ = ´ 
 +TPanel(sender).Parent.Name); 
end;


Assim Todos compartilham do mesmo evento


GOSTEI 0
Pedroso

Pedroso

27/04/2009

:D Sim ajuda, mas vou tentar evoluir o assunto e posto logo que conseguir o que realmente quero. Lamento não ser tão didático a ponto de esclarecer minhas intenções. Mas muito obrigado pelas respostas.


GOSTEI 0
Marco Salles

Marco Salles

27/04/2009

Beleza pedroso . Mas entenda duas coisa importantes

Se vc colocar em tempo de desgined em Um Formulário um Panel
e dentro desse panel um Componente ( Por exemplo um Edit )
Quem é o Proprietário desse Edit ?????

Resposta [b:aaafe7aabf]Errada[/b:aaafe7aabf] quem disse ou pensou que é o Panel

Outra , esta tem mais a ver com Vc

Coloque em Tempo de Projeto no Form um RadioGroup e dentro dele
coloque um Panel
Quem é o Progenitor desse panel ???

Resposta Errada quem disse ou pensou que é o RafioGroup

Por isso Eu no evento Oncreate Nudei o Progenitor do Panel

procedure TForm1.FormCreate(Sender: TObject); 
begin 
panel1.Parent:=RadioGroup1; 
panel1.Left:=10; 
panel1.Top:=10; 
//Outros Paneis Outros RadioGroup 
end;


entende ???


GOSTEI 0
POSTAR