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 2 von 2     12   
Ghostwalker

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 09:34
@Lannes

Warum so umständlich ? Er hat ja den Label schon. Oder überseh ich da irgendwas ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
TStringlist

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 09:58
Genau, das mit dem "c" (in welches das Control im LabelEnter-Eventhandler eingetragen wird) ist doch fast noch einfacher. Verlässt man das Label mit der Maus wieder, dann braucht man "c" im LabelLeave-Eventhandler nur noch auf nil zu setzen und kann es so gleichzeitig auch noch als Flag nutzen, ob es sich überhaupt auch um eine solche Situation handelt:

if (Key = 13) and (c <> nil) then TLabel(c).OnClick(c); Ansonsten darf es ja auf der Form auch wirklich keine Vewechslungsmöglichkeiten geben, z.B. irgendein anderes Panel auf das man davor zufälligerweise geklickt hat o.ä....

Und ist der Focus tatsächlich noch Pflicht dann käme halt +/- dieses "and" noch dazu

and (TObject(ActiveControl) = TObject(c.parent))
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 10:47
Hallo,

Bei meinen Vorschlag ist es nicht erforderlich (siehe Beitrag #1) im PanelEnter/Mouseenter die entsprechenden Komponentennamen zu speichern und die Labels dann per FindComponent(AltKompName) jedesmal wieder neu zu suchen.
Warum erst das ActiveControl in PanelEnter merken, wenn man es direkt in FormKeyDown ermitteln kann?

Wobei es schon umständlich ist, das über den Namen zu realisieren, da würde ein Zeiger auf das jeweilige Label ausreichen.

Der gesamte benötigte Code, auf das wesentliche reduziert. Bei den Panels die berücksichtigt werden sollen wird die Tag-Eigenschaft auf 1 gesetzt:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = 13 then
  if assigned(ActiveControl) then
   with ActiveControl do
    if ClassType = TPanel then
     if Tag = 1 then
      TLabel(Controls[0]).OnClick(Controls[0]);
end;
Also kein LabelEnter-, LabelLeave-Eventhandler keine zusätzliche Variable, alles in einer Prozedur.
Finde nicht, das es umständlich ist.
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
 
#14

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 12:24
Wenn Du Hansa's Link in #1 mit einbeziehst, dann siehst Du, dass er diese beiden Eventhandler für ein farbliches Herausheben der Labels ja schon selbst eingeführt hat. Und dieses 'alles in einer Prozedur' gilt hier eh nicht, denn um einem Panel den Focus zu geben, reicht kein einfaches Anklicken. Sondern dann muss man schon auf das Label selbst geclickt und in dessen OnClick-Methode das Label.Parent.setFocus ausgeführt haben. Wenn er also den Focus nur zur späteren Panel-Identifizierung braucht, dann müsste dieser Aufwand natürlich auch noch auf deine Variante dazugerechnet werden.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 13:48
Hallo,

"eine Prozedur" bezieht sich auf dieses Thema "Ereignis-Name zur Laufzeit zuweisen".

hmm, der Satz ist etwas falsch ausgedrückt:
Also kein LabelEnter-, LabelLeave-Eventhandler keine zusätzliche Variable, alles in einer Prozedur.
Also kein zusätzlicher Code im LabelEnter-, LabelLeave-Eventhandler, und keine zusätzliche Variable, die gesamte Ermittlung des Ereignis-Namens in einer Prozedur.


Gedanklich war ich nicht nur bei diesem und dem verlinkten Thema, sondern auch dort im DF Link und Link
Darin geht es u.a. um das Ansteuern von Panels per Pfeiltasten, die dadurch den Focus bekommen.

Da können wir noch lange hin und her Diskutieren, mal schauen was Hansa dazu sagt.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Hansa

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 20:31
Ist wohl doch nicht so einfach wie gedacht, was ? Deshalb verschiebe ich das ja laufend und mache es nicht fertig.

Letzter Stan der Dinge :

Delphi-Quellcode:
procedure TfrmKey.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var c : TComponent; // <--- Überbleibsel
    aLabel : TControl;
begin
  if Key = 13 then begin
    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];
showmessage ('LÄLÄÖLÖÄ');
      TLabel(aLabel).OnClick(aLabel); //<----- Zugriffsverletzung
    end;
  end;
  EnterTab(Sender,Key,Shift,[],[],true);
end;
Das c ist übrigens nur eine Hilfsvariable, die hier nicht gebraucht wird. Beim OnClick kracht es. Sehe nicht warum, aber es kracht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 6. Mär 2007, 22:26
Hallo,

nee, ist einfach, Du musst nur sicherstellen, das Deine Labels auch einen OnClick-Eventhandler besitzen.
Ist das nicht möglich, dann halt noch eine Abfrage hinzufügen:
Delphi-Quellcode:
if assigned(TLabel(aLabel).OnClick) then
  TLabel(aLabel).OnClick(aLabel);
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Ghostwalker

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 7. Mär 2007, 07:35
@Lannes
Ah..ok...das kommt davon wenn der eigen "Scope" a bisserl eng ist.

Natürlich ist deine Variante im gesamten Kontext betrachtet, einfacher
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Hansa

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

Re: Ereignis-Name zur Laufzeit zuweisen

  Alt 8. Mär 2007, 02:12
Gut, gut. Aber da war noch einiges an Feinschliff nötig. Jede Zeile ist wichtig. Hänge mal für die Nachwelt ein kleines Projekt an, um zu zeigen, wie so was geht (Kommentare beachten). ABER : es ist noch nicht fertig. Folgendes ist noch offen :

vorab : das Demo-Projekt hat 2 Forms (per Objektablage vererbt). Da das kaum einer benutzt, nur als Hinweis, dass die 2. Form vom Source praktisch leer ist, weil sie alles erbt !

also die Fragen :

1. die Funktionalität soll nur auf der gerade aktivierten Form gültig sein. Wie sperre ich das ganze, sofern sich die Form ändert ? ActiveForm oder wie ? Der Button erzeugt und öffnet übrigens andere Form.

2. Daraus folgt das Nächste : wie kann ich am besten verhindern, dass eine Form 2mal geöffnet wird ?
Angehängte Dateien
Dateityp: zip keypro_212.zip (208,7 KB, 5x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:44 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