Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TWinControl und OnEnter-Event (https://www.delphipraxis.net/91017-twincontrol-und-onenter-event.html)

Geronimo 27. Apr 2007 13:20


TWinControl und OnEnter-Event
 
Hallo alle zusammen,

ich hätte da gern mal ein Problem und zwar:

Ich möchte einer Reihe von Komponenten unterschiedlicher Typen
(TEdit, TButton, ...) per Code ein OnEnter Event zuweisen.
Laut Hilfe so das alles TWinControls. TWinControl hat laut Hilfe
auch ein OnEnter-Event.

Folgender Code
Delphi-Quellcode:
for i := 0 to self.ControlCount-1 do
   if (self.Controls[i] is TWinControl) then
     (Controls[i] as TWinControl).OnEnter := AdaptMenuOnEnter;
funktioniert nicht:

Fehler: Undeclared identifier

Wer kann mir helfen. Wenn das nicht so geht müsste ich alle
durchprüfen, ob TEdit oder TButton etc.

Geronimo

daddy 27. Apr 2007 13:28

Re: TWinControl und OnEnter-Event
 
Das Ereignis "OnEnter" ist in TWinControl nicht published, sondern protected. Das heißt, das erst in den abgeleiteten Komponenten festgelegt wird, ob es sichtbar sein soll.

Gruß, Daddy

Geronimo 27. Apr 2007 13:47

Re: TWinControl und OnEnter-Event
 
...
schade!
Aber Danke für die Aufklärung!

Geronimo

Hawkeye219 27. Apr 2007 14:02

Re: TWinControl und OnEnter-Event
 
Hallo Geronimo,

versuche es so:

Delphi-Quellcode:
type
  TWinControlAccess = class (TWinControl);

for i := 0 to self.ControlCount-1 do
  if (self.Controls[i] is TWinControl) then
    TWinControlAccess(Controls[i]).OnEnter := AdaptMenuOnEnter;
Durch die Vereinbarung des Typs TWinControlAccess verschaffst du dir in der Unit Zugang zu den protected Methoden und Eigenschaften.

Gruß Hawkeye

xaromz 27. Apr 2007 14:03

Re: TWinControl und OnEnter-Event
 
Hallo,

da das Ereignis schon da ist, und nur als protected markiert ist, kannst Du einen "dreckigen" Trick verwenden und einfach hart auf eine Klasse casten, in der es published ist, z. B. ein TButton:
Delphi-Quellcode:
for i := 0 to ControlCount - 1 do
  if (Controls[i] is TWinControl) then
     TButton(Controls[i]).OnEnter := AdaptMenuOnEnter;
Das funktioniert deshalb, weil das Ereignis ja nur die Sichtbarkeit ändert (also die Attribute), aber nicht die Position im Speicher. Sauber ist natürlich was anderes...

Gruß
xaromz

Geronimo 27. Apr 2007 14:53

Re: TWinControl und OnEnter-Event
 
@ Hawkeye219: TWinControlAccess funzt super. Danke. Ich sehe ihr seid
mit allen Delphi-Wassern gewaschen!

@ xaromz: Die "dreckige" Variante führt zu vielen Abfragen von Typen,
da ich viele davon verwende.

Dank an alle!

Geronimo

xaromz 27. Apr 2007 14:58

Re: TWinControl und OnEnter-Event
 
Hallo,
Zitat:

Zitat von Geronimo
@ xaromz: Die "dreckige" Variante führt zu vielen Abfragen von Typen,
da ich viele davon verwende.

Hast Du Dir meine Variante angesehen? Da gibt es keine Abfrage, der Code ist wie angegeben sofort für alle Nachkommen von TWinControl nutzbar.

Gruß
xaromz

Geronimo 27. Apr 2007 21:14

Re: TWinControl und OnEnter-Event
 
Zitat:

Hallo,
Geronimo hat folgendes geschrieben:
@ xaromz: Die "dreckige" Variante führt zu vielen Abfragen von Typen,
da ich viele davon verwende.

Hast Du Dir meine Variante angesehen? Da gibt es keine Abfrage, der Code ist wie angegeben sofort für alle Nachkommen von TWinControl nutzbar.
...wohl nicht richtig. Und nicht getestet. :wall: Ich nehme alles zurück und behaupte das Gegenteil.
Habe jetzt deine Variante mal getestet. Sie funktioniert auch und tut das, was ich wollte,
allen TWinControls das Event aufdrücken (wenn auch unelegant).

Gruß Geronimo


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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