Unico procedimento para identificar varios componentes
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.
Gostaria que quando clicasse em qualquer um destes componentes ou dentro do proprio radiogroup , disparasse um unico procedimento que identificasse o radiogroup.
Pedroso
Curtidas 0
Respostas
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.
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
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?
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
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 ...
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
27/04/2009
Para o Panel Receber efetivamente o Foco Altere a Propriedade
TabStop para True
e coloque no Evento OnEnter do Panel
é aqueloa Hora que o Foco Some , e vc tem que dar um Tab para ir
para o Proximo Controle ... Entende ????
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
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
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
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
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
entende ???
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