AGB  ·  Datenschutz  ·  Impressum  







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

TWinControl und OnEnter-Event

Ein Thema von Geronimo · begonnen am 27. Apr 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
Geronimo

Registriert seit: 19. Dez 2006
Ort: Hamburg
38 Beiträge
 
#1

TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 14:20
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
Die Welt ist rechteckig, linear und Gauss-verteilt!
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 14:28
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
  Mit Zitat antworten Zitat
Geronimo

Registriert seit: 19. Dez 2006
Ort: Hamburg
38 Beiträge
 
#3

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 14:47
...
schade!
Aber Danke für die Aufklärung!

Geronimo
Die Welt ist rechteckig, linear und Gauss-verteilt!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 15:02
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
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 15:03
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Geronimo

Registriert seit: 19. Dez 2006
Ort: Hamburg
38 Beiträge
 
#6

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 15:53
@ 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
Die Welt ist rechteckig, linear und Gauss-verteilt!
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 15:58
Hallo,
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Geronimo

Registriert seit: 19. Dez 2006
Ort: Hamburg
38 Beiträge
 
#8

Re: TWinControl und OnEnter-Event

  Alt 27. Apr 2007, 22:14
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. 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
Die Welt ist rechteckig, linear und Gauss-verteilt!
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:41 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