Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar? (https://www.delphipraxis.net/193837-wie-unterklasse-erstellen-wenn-oberklasse-nicht-anderen-units-nutzbar.html)

DCoderHH 14. Sep 2017 08:46

Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Hallo,

in der Unit Vcl.StdCtrls gibt es die Klasse TComboBoxStrings. Ich muss eine Unterklasse dieser Klasse in meiner eigenen Unit erstellen. Jedoch ist TComboBoxStrings nur im implementation-Abschnitt deklariert. Dadurch ist diese Klasse nicht in anderen Units nutzbar. Wie bekomme ich es trotzdem hin?

So soll es in meiner Unit aussehen:
Code:
TMyComboBoxStrings = class(TComboBoxStrings)
So sieht es in der Vcl.StdCtrls aus:
Code:
implementation
...
  TComboBoxStrings = class(TCustomComboBoxStrings)
...

Klaus01 14. Sep 2017 08:49

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
.. und wenn Du die Klasse "TCustomComboBoxStrings" verwendest?
Delphi-Quellcode:
TMyComboBoxStrings = class(TCustomComboBoxStrings)
Grüße
Klaus

DCoderHH 14. Sep 2017 08:53

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Zitat:

Zitat von Klaus01 (Beitrag 1381107)
.. und wenn Du die Klasse "TCustomComboBoxStrings" verwendest?
Delphi-Quellcode:
TMyComboBoxStrings = class(TCustomComboBoxStrings)

Danke, das hilft nicht. Ich brauche schon wirklich die TComboBoxStrings, die hat eine andere Funktionalität als die TCustomComboBoxStrings.

Uwe Raabe 14. Sep 2017 09:03

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Wenn du die erweiterte Funktionalität von TComboBoxStrings nicht nachbilden willst, musst du dir wohl eine andere Herangehensweise überlegen. An die private Klasse kommst du jedenfalls für eine Ableitung nicht heran. Geh doch einfach einen Schritt zurück und beschreibe, was du mit dieser Ableitung erreichen willst.

DCoderHH 14. Sep 2017 09:09

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1381110)
Wenn du die erweiterte Funktionalität von TComboBoxStrings nicht nachbilden willst, musst du dir wohl eine andere Herangehensweise überlegen. An die private Klasse kommst du jedenfalls für eine Ableitung nicht heran. Geh doch einfach einen Schritt zurück und beschreibe, was du mit dieser Ableitung erreichen willst.

Ich möchte in meiner eigenen ComboBox-Klasse auf SetUpdateState(Updating: Boolean); der Items reagieren. So wie ich das sehe, geht das nur, wenn ich eine String-Klasse erstelle und diese in meiner ComboBox-Klasse nutze.

Uwe Raabe 14. Sep 2017 10:10

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Zitat:

Zitat von DCoderHH (Beitrag 1381113)
Ich möchte in meiner eigenen ComboBox-Klasse auf SetUpdateState(Updating: Boolean); der Items reagieren. So wie ich das sehe, geht das nur, wenn ich eine String-Klasse erstelle und diese in meiner ComboBox-Klasse nutze.

Das ist nicht ganz richtig: Da die aktuelle Implementation eine
Delphi-Quellcode:
WM_SETREDRAW
Message an die Combobox sendet, könntest du auch eine Ableitung von TCombobox erstellen, in der du diese Message abfängst. Damit kannst du aber nicht das bisherige Verhalten beeinflussen, wie es mit einer abgeleiteten Methode möglich wäre.

Wenn du das nicht willst, kommt logischerweise als Nächstes die Frage: Warum möchtest du auf SetUpdateState reagieren?

DCoderHH 14. Sep 2017 11:18

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Mit WM_SETREDRAW klappt es danke!

DCoderHH 14. Sep 2017 11:32

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Nachteil von der Nutzung von WM_SETREDRAW ist aber folgender:
Wenn nicht Combobox.Items.EndUpdate diese Message versendet, sondern eine andere Quelle, wird mein Code auch ausgeführt. Das ist dann zu häufig.

Uwe Raabe 14. Sep 2017 12:13

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Zitat:

Zitat von DCoderHH (Beitrag 1381134)
Wenn nicht Combobox.Items.EndUpdate diese Message versendet, sondern eine andere Quelle, wird mein Code auch ausgeführt. Das ist dann zu häufig.

Womit wir dann wieder bei obiger Frage sind. Wenn der eingeschlagene Weg eine Sackgasse ist, muss man manchmal eben bis zur letzten Abzweigung zurückgehen.

DCoderHH 14. Sep 2017 12:19

AW: Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1381140)
Zitat:

Zitat von DCoderHH (Beitrag 1381134)
Wenn nicht Combobox.Items.EndUpdate diese Message versendet, sondern eine andere Quelle, wird mein Code auch ausgeführt. Das ist dann zu häufig.

Womit wir dann wieder bei obiger Frage sind. Wenn der eingeschlagene Weg eine Sackgasse ist, muss man manchmal eben bis zur letzten Abzweigung zurückgehen.

Nach einem Combobox.Items.EndUpdate soll die DropDown-Liste so breit werden, wie das breiteste Item, wenn dieses Item breiter als die ComboBox ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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