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/)
-   -   Erweiterung für zwei Klassen gleichzeitig schreiben (https://www.delphipraxis.net/168260-erweiterung-fuer-zwei-klassen-gleichzeitig-schreiben.html)

blablab 11. Mai 2012 14:36

Erweiterung für zwei Klassen gleichzeitig schreiben
 
Hallo!

Ich habe eine kleine Erweiterung für die ListBox geschrieben mit der man die Items per Drag&Drop vertauschen kann.
Delphi-Quellcode:
TSwapListBox = class(TCustomListBox)
Dasselbe möchte ich jetzt auch für die CheckListBox haben. Ich kann den zusätzliche Code von meiner SwapListBox 1:1 in SwapCheckListBox kopieren und es funktioniert. Allerdings ist das kein besonders guter Programmierstil, sobald ich eine kleine Änderung in SwapListBox mache muss ich die SwapCheckListBox anpassen.

Wie könnte man das besser machen?

Grüße
blablab

chaosben 11. Mai 2012 14:43

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Das kommt drauf an, was du von der Listbox brauchst.
Wenn du nur public-Eigenschaften und Funktionen nimmst, könntest du einen class helper für beide Basisklassen schreiben.

blablab 11. Mai 2012 14:50

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
ich bin mir nicht sicher... wie sieht so ein class helper aus?

p80286 11. Mai 2012 14:51

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Nach meinem Verständnis müsstest Du die SwapCheckList... von der SwapList.. ableiten.
Also den Source der CheckList... nehmen und die abgeletete Klasse ersetzen.

Gruß
K-H

stahli 11. Mai 2012 15:01

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Class Helper gibt es m.E. ab D 2009.
Ein ClassHelper ist quasi eine Funktion implementiert quasi Funktionen, die auf eine Klasse "aufgepfropft" wird werden. Mit Classhelpern kannst Du Klassen gewissermaßen um Funktionen erweitern. In den Funktionen kannst Du auf öffentliche Eigenschaften der Klasse zugreifen.

Ich denke nicht, dass das in Deinem Fall der richtige Weg ist.


Du könntest ggf. Deinen Quelltext in externen Files ablegen und mit Include in beiden Units einbinden:
{$INCLUDE 'MyFunction.inc'}

Noch sauberer wäre es wohl, eine spezielle Funktion mit allen benötigten Parametern in einer externen Unit abzulegen und diese Funktion aus beiden Klassen heraus aufzurufen. Das ließe sich dann auf jeden Fall auch vernünftig debugen.

himitsu 11. Mai 2012 15:09

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Sicher, daß die nicht schon ab 2006 gingen? (Record Helper brauchten etwas länger, glaub ich)

DeddyH 11. Mai 2012 15:12

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Laut delphi.about.com sogar schon ab Delphi 2005, aber undokumentiert.

blablab 11. Mai 2012 15:31

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Es kommt zwar immer näher, aber reicht noch nicht. Ich hab Delphi7 :-D

Habs jetzt nach p80286s Vorschlag gemacht.

Danke für die Antworten!

himitsu 11. Mai 2012 23:03

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Es ist näher, als du denkst ... D2006 hat sozusagen einen leicht aufgemotzten D7-Compiler [v7.2] .

http://www.delphipraxis.net/144997-s...hi-2006-a.html

Robotiker 12. Mai 2012 08:35

AW: Erweiterung für zwei Klassen gleichzeitig schreiben
 
Zitat:

Zitat von stahli (Beitrag 1166136)
Ein ClassHelper ist quasi eine Funktion, die an eine Klasse "aufgepfropft" wird. Mit Classhelpern kannst Du Klassen gewissermaßen um Funktionen erweitern. [...]

Ich denke nicht, dass das in Deinem Fall der richtige Weg ist.

Man müsste eher bestimmte Funktionalität in verschiedenen Klassen an Hilfsklassen delegieren. Diese Hilfsklassen nennt man Policy-Klassen. In Pascal habe ich sowas noch nicht gesehen, auch Google findet nur Beispiele in anderen Sprachen.

http://en.wikipedia.org/wiki/Policy-based_design

Da steht auch
Zitat:

It has been described as a compile-time variant of the strategy pattern,
also wäre theoretisch eine Laufzeitimplementierung in Delphi 7 möglich, die irgendwie das Strategiemuster anwendet. Also z.B. in dem die beiden Listbox-Typen jeweils eine Hilfsklasse als Member haben, an die die Aufrufe der entsprechende Listbox-Methoden weitergereicht werden. Aber wahrscheinlich macht das mehr Arbeit, als den Code zu kopieren.


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