![]() |
Wie private Setter-Methode überschreiben?
Hallo,
ich habe mir mit Txyz = class(TWinControl) eine neue Komponente erstellt. Diese hat auch einen Cursor, da das TWinControl auch einen Cursor hat. Nun muss ich in meiner Komponente darauf reagieren können, wenn mit xyz.Cursor := crHourGlass ein neuer Cursor zugeweisen wird. Wie kann ich dies bewerkstelligen? SetCursor (in der Oberklasse TComponent zu finden) ist ja privat und kann nicht überschrieben werden. Wer kann helfen? Danke! |
Re: Wie private Setter-Methode überschreiben?
Hast du es schon mit reintroduce versucht ?
|
Re: Wie private Setter-Methode überschreiben?
Zitat:
|
Re: Wie private Setter-Methode überschreiben?
Die Setter kannst du nicht überschreiben. Entweder bekommst du über die Quellen raus, ob er vllt. im Original Setter eine Nachricht absetzt auf die du reagieren kannst oder du definierst die Property in deiner abgeleiteten Klasse einfach neu: gleicher Name, eigener Getter/Setter
|
Re: Wie private Setter-Methode überschreiben?
Du kannst aber die Methode im Privat-Bereich neu schreiben, nur inherited funktioniert leider nicht.
die entsprechenden Propertys musst du dementsprechend selber wieder einführen Leider sind einige Interessante Methoden bei Komponenten im private-Bereich versteckt. Noch schlimmer ist es allerdings, dass in der VCL an vielen Stellen Klassen private-Methoden von anderen Klassen aus der Unit benutzen (z.B. TTable ist ganz besonders schlimm). Will man nun bestimmte Sachen dort überschreiben, hat man verloren :cry: |
Re: Wie private Setter-Methode überschreiben?
Zitat:
|
Re: Wie private Setter-Methode überschreiben?
Zitat:
btw, das setzen eines Cursors in einem WinControl wird ganz sicherlich mit einer Nachricht verbunden sein. |
Re: Wie private Setter-Methode überschreiben?
Man kann bei einer published Property den Setter überschreiben, aber das geht nur mit Tricks eg. dem Patchen der RTTI der neuen Klasse. Ist also machbar aber nicht ganz "legal".
Ansonsten bleibt dir nur die Message wm_SetCursor und wm_NCHitTest abzufangen und dort zb. mit API.SetCursor(Screen.Cursors[Control.Cursor].Handle) selber deinen Cursor zu setzen. Gruß Hagen |
Re: Wie private Setter-Methode überschreiben?
Zitat:
|
Re: Wie private Setter-Methode überschreiben?
Das funktioniert aber dann nur wenn im Source explizit der Cursor deiner Klasse angesprochen wird. So bald zb. die VCL den Cursor von deinen Vorfahren anspricht bekommst du nichts mehr davon mit. Probiere mal TWinControl(MeineKlassenInstance).Cursor := crXYZ aus.
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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