Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie private Setter-Methode überschreiben? (https://www.delphipraxis.net/78049-wie-private-setter-methode-ueberschreiben.html)

BlueStarHH 28. Sep 2006 11:22


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!

mkinzler 28. Sep 2006 11:27

Re: Wie private Setter-Methode überschreiben?
 
Hast du es schon mit reintroduce versucht ?

BlueStarHH 28. Sep 2006 12:11

Re: Wie private Setter-Methode überschreiben?
 
Zitat:

Zitat von mkinzler
Hast du es schon mit reintroduce versucht ?

reintroduce alleine bringt nichts, dann kommt die Meldung "Das private Symbol SetCursor wurde deklariert, aber nie verwendet." Bei override kommt: "Methode SetCursor nicht in Basisklasse gefunden". Logisch, weils ja privat ist.

Muetze1 28. Sep 2006 12:15

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

hsg 28. Sep 2006 12:19

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:

BlueStarHH 28. Sep 2006 12:23

Re: Wie private Setter-Methode überschreiben?
 
Zitat:

Zitat von Muetze1
du definierst die Property in deiner abgeleiteten Klasse einfach neu: gleicher Name, eigener Getter/Setter

Wie greife ich dann aber auf die Cursor eigenschaft der Oberklasse zu? Wenn ich in meiner Componente dann sowas wie Cursor := bla stehen habe, ruft das ja meinen eigenen neuen Setter in meiner Komponente auf und der Cursor wird nie geändert. Wie kann ich dann die Property der Basiskalsse zu fassen bekommen?

Elvis 28. Sep 2006 12:26

Re: Wie private Setter-Methode überschreiben?
 
Zitat:

Zitat von BlueStarHH
Wie greife ich dann aber auf die Cursor eigenschaft der Oberklasse zu?

inherited Cursor?
btw, das setzen eines Cursors in einem WinControl wird ganz sicherlich mit einer Nachricht verbunden sein.

negaH 28. Sep 2006 12:27

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

BlueStarHH 28. Sep 2006 12:48

Re: Wie private Setter-Methode überschreiben?
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von BlueStarHH
Wie greife ich dann aber auf die Cursor eigenschaft der Oberklasse zu?

inherited Cursor?
btw, das setzen eines Cursors in einem WinControl wird ganz sicherlich mit einer Nachricht verbunden sein.

Ich habe es nun mit "inherited Cursor" und "du definierst die Property in deiner abgeleiteten Klasse einfach neu: gleicher Name, eigener Getter/Setter" gemacht. Danke!

negaH 28. Sep 2006 13:19

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 23:48 Uhr.
Seite 1 von 2  1 2      

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