2016-10-19 3 views
0

Ich möchte verhindern, dass ein Nachkomme von TPageControl eine Style-Eigenschaft hat, mit Ausnahme von tsTabs.TPageControl: Wie kann man verhindern, dass die Style-Eigenschaft

Auf den ersten Blick habe ich versucht, SetStyle zu überschreiben, aber es wird in der Basisklasse als privat erklärt. hat jemand Ideen?

+0

Verwenden Sie nur etwas Selbstbeherrschung. –

+0

Ich hätte erwartet, dass ein 'TCustomPageControl' verfügbar wäre. aber da ist nicht. Siehe verwandte Q, die helfen könnte: [Wie entfernen Sie eine Eigenschaft aus einer abgeleiteten Komponente] (http://stackoverflow.com/questions/15961579/how-do-you-remove-a-property-from-a-descendent- Komponente) – kobik

+0

@kobik: 'TPageControl' wird von' TCustomTabControl' abgeleitet. In jedem Fall verbergen die meisten der in diesem Link beschriebenen Techniken jedoch die Eigenschaft zur Entwurfszeit, aber die Eigenschaft ist zur Laufzeit weiterhin für Code verfügbar. –

Antwort

3

TPageControl unterstützt nicht nativ, wonach Sie fragen. Um das zu erreichen, was Sie fordern, würden Sie müssen entweder:

  1. haben Ihre Komponente wieder erklären die Style Eigenschaft mit neuen Getter/Setter-Methoden, und haben dann die Setter verlassen, ohne etwas zu tun. Die ererbte Eigenschaft Style ist jedoch zur Laufzeit technisch noch erreichbar, wenn der Benutzer der Komponente wirklich darauf zugreifen möchte.

  2. leiten Sie Ihre Komponente aus TCustomTabControl statt TPageControl und neu implementieren alles, was TPageControl tut, aber ohne das geschützte Style Eigentum zu fördern. Die ererbte Eigenschaft Style ist jedoch zur Laufzeit technisch noch erreichbar, wenn der Benutzer der Komponente wirklich darauf zugreifen möchte.

  3. Lassen Sie Ihre Komponente die virtuelle CreateParams()-Methode überschreiben und erzwingen Sie den TCS_TABS Fensterstil im Feld TCreateParams.Style. Die Eigenschaft Style hat immer noch den vom Benutzer zugewiesenen Wert (was sich auch auf das Verhalten der Eigenschaft TabPosition auswirkt), aber das zugrunde liegende Fenster verhält sich immer so, als ob der Stil tsTabs verwendet würde.

  4. Verwenden Sie eine Umgehungsbibliothek, um TCustomTabControl.SetStyle() direkt zur Laufzeit zu haken und es zurückzukehren, ohne etwas zu tun.

+0

@ kobik: Jede Prozedur/Funktion/Methode kann zur Laufzeit angehängt werden, der schwierige Teil besteht darin, die Speicheradresse davon zu bekommen, und es gibt Möglichkeiten, dies auch für private Methoden zu tun. –

Verwandte Themen