AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Wie Unterklasse erstellen, wenn Oberklasse nicht in anderen Units nutzbar?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von DCoderHH · begonnen am 14. Sep 2017 · letzter Beitrag vom 14. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#1

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

  Alt 14. Sep 2017, 08:46
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)
...
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 14. Sep 2017, 08:49
.. und wenn Du die Klasse "TCustomComboBoxStrings" verwendest?
TMyComboBoxStrings = class(TCustomComboBoxStrings) Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#3

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

  Alt 14. Sep 2017, 08:53
.. und wenn Du die Klasse "TCustomComboBoxStrings" verwendest?
TMyComboBoxStrings = class(TCustomComboBoxStrings)
Danke, das hilft nicht. Ich brauche schon wirklich die TComboBoxStrings, die hat eine andere Funktionalität als die TCustomComboBoxStrings.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.008 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 14. Sep 2017, 09:03
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#5

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

  Alt 14. Sep 2017, 09:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.008 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 14. Sep 2017, 10:10
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 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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#7

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

  Alt 14. Sep 2017, 11:18
Mit WM_SETREDRAW klappt es danke!
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#8

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

  Alt 14. Sep 2017, 11:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.008 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 14. Sep 2017, 12:13
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#10

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

  Alt 14. Sep 2017, 12:19
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.
  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 13:17 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