AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie private Setter-Methode überschreiben?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie private Setter-Methode überschreiben?

Ein Thema von BlueStarHH · begonnen am 28. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH
Online

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 12:22
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!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 12:27
Hast du es schon mit reintroduce versucht ?
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH
Online

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:11
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:15
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
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:19
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
  Mit Zitat antworten Zitat
BlueStarHH
Online

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:23
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?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:26
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:27
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
  Mit Zitat antworten Zitat
BlueStarHH
Online

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 13:48
Zitat von Elvis:
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!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 14:19
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:05 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