![]() |
Ereignis-Name zur Laufzeit zuweisen
Hi,
die Frage hat hiermit was zu tun : ![]() Es geht um ein Panel und ein Label darauf. Nun kommt hinzu, dass bei Drücken von Enter etwas gemacht werden muss. Und zwar, sofern das Label oder das entsprechende Panel den Focus hat. Leider hat das Label kein KeyPress usw. und das Panel hat kein MouseEnter usw. Ich habe deshalb (vorläufig) den Weg gewählt, im PanelEnter/Mouseenter die entsprechhenden Komponentennamen zu speichern und das FormKeyDown auszuwerten :
Delphi-Quellcode:
procedure Tfrm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var c : TComponent; begin if key = 13 then begin c := FindComponent(AltKompName); ShowMessage ('****** '+c.Name); Label2Click (Sender); //c.Name+'OnKeyDown'; end; end;
Delphi-Quellcode:
Das Label2Click geht auch soweit (momentan eben nur showmessage), aber der ganaue Name ist zum Zeitpunkt des auslösens ja gar nicht bekannt. Das könnte auch Label12345Click heißen. ShowMessage ('****** '+c.Name); liefert den Namen des Controls. Wie baue ich daraus jetzt einen Prozedurnamen zusammen oder führe die Procedure aus ?
procedure Tfrm.Label2Click(Sender: TObject);
begin showmessage ('Label2Click'); end; |
Re: Ereignis-Name zur Laufzeit zuweisen
Ruf die Methode nicht per Namen sondern über die entsprechende Property des Senders auf.
|
Re: Ereignis-Name zur Laufzeit zuweisen
Der Sender ist aber das Formular (FormKeyDown). Woher soll dieses denn wissen, um was es genau geht ? Ohne Bsp. oder einen längeren Satz kann ich nichts mit der Antwort anfangen. :???:
|
Re: Ereignis-Name zur Laufzeit zuweisen
Hallo Hansa,
immer noch mit den Panel-Labels beschäftigt? :wink: ActiveControl könnte da helfen:
Delphi-Quellcode:
if Key = 13 then
if (assigned(ActiveControl)) and (ActiveControl.ClassType = TPanel) then showmessage('Label: '+ActiveControl.Controls[0].Name+#13#10+ ' auf Panel: '+ActiveControl.Name); |
Re: Ereignis-Name zur Laufzeit zuweisen
mkinzler meinte wahrscheinlich: Wenn Du mit c sowieso schon die Komponente hast, warum benutzt Du dann die On-Properties nicht gleich zum Methodenaufruf, ala:
Delphi-Quellcode:
with (c as TLabel) do
if assigned(OnClick) then OnClick(Sender); |
Re: Ereignis-Name zur Laufzeit zuweisen
Mit dem ActiveControl (Lannes) kriege ich tatsächlich das gewünschte Label. Das ist schonn mal gut. Wie bringe ich das nun noch dazu sein eigenes OnClick auszuführen ? Blöd, wenn man nicht am Stück an einer Sache dran bleiben kann. Mühsam ernährt sich das Eichhörnchen. :mrgreen:
|
Re: Ereignis-Name zur Laufzeit zuweisen
Delphi-Quellcode:
(ActiveControl as TLabel).onClick( ActiveControl);
|
Re: Ereignis-Name zur Laufzeit zuweisen
Wo muss denn das jetzt genau hin ? :shock: Ich kann es doch nur im OnKeyDown des Formulars gebrauchen. Delphi meckert schon hier drüber:
Delphi-Quellcode:
(ActiveControl as TLabel)
Delphi-Quellcode:
Bitte jetzt Butter bei die Fische, sonst verhungert das Eichhörnchen. :P Das kann nicht mehr viel sein.
[Fehler]Form1.pas(250): Inkompatible Typen: 'TLabel' und 'TWinControl'
|
Re: Ereignis-Name zur Laufzeit zuweisen
Wie TStringlist schon schrieb, einfach:
Delphi-Quellcode:
with (c as TLabel) do
begin if assigned(onClick) then OnClick(Sender); end; |
Re: Ereignis-Name zur Laufzeit zuweisen
Hallo,
Sender = Form, denn auslösendes Ereignis = FormKeyDown ActiveControl = Panel, denn Pfeiltasten oder Tab setzen das jeweilige Panel activ ActiveControl.Controls[0] = Label, denn das Label ist einziges Control, also Index = 0 @Hansa: damit Dein Eichhörnchen nicht verhungert :Sciurus: :-D
Delphi-Quellcode:
//...
var aLabel : TControl; //... if Key = 13 then if (assigned(ActiveControl)) and (ActiveControl.ClassType = TPanel) then begin showmessage('Label: '+ActiveControl.Controls[0].Name+#13#10+ 'auf Panel: '+ActiveControl.Name+#13#10+ 'Sender ist Form: '+TControl(Sender).Name); aLabel := ActiveControl.Controls[0];//<---------- TLabel(aLabel).OnClick(aLabel); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz