AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignis-Name zur Laufzeit zuweisen

Ein Thema von Hansa · begonnen am 2. Mär 2007 · letzter Beitrag vom 8. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Ereignis-Name zur Laufzeit zuweisen

  Alt 2. Mär 2007, 22:12
Hi,

die Frage hat hiermit was zu tun :

http://www.delphipraxis.net/internal...955d5395de32b4

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:
procedure Tfrm.Label2Click(Sender: TObject);
begin
showmessage ('Label2Click');
end;
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 2. Mär 2007, 22:26
Ruf die Methode nicht per Namen sondern über die entsprechende Property des Senders auf.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 5. Mär 2007, 02:10
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 5. Mär 2007, 07:37
Hallo Hansa,

immer noch mit den Panel-Labels beschäftigt?

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);
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 5. Mär 2007, 09:18
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);
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 5. Mär 2007, 22:31
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 5. Mär 2007, 22:36
(ActiveControl as TLabel).onClick( ActiveControl);
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 00:27
Wo muss denn das jetzt genau hin ? Ich kann es doch nur im OnKeyDown des Formulars gebrauchen. Delphi meckert schon hier drüber:

(ActiveControl as TLabel) [Fehler]Form1.pas(250): Inkompatible Typen: 'TLabel' und 'TWinControl' Bitte jetzt Butter bei die Fische, sonst verhungert das Eichhörnchen. Das kann nicht mehr viel sein.
Gruß
Hansa
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 06:50
Wie TStringlist schon schrieb, einfach:

Delphi-Quellcode:
   with (c as TLabel) do
   begin
     if assigned(onClick) then
       OnClick(Sender);
   end;
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#10

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 08:25
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:
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz