![]() |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
@Hansa
ich mache es es zwar auch nicht so aber einfache Aufrufe wie Store/RestoreBoundsRect ließen sich so durch Unittausch/umdeklaration oder bedingte Kompilierung recht einfach auf ein anderes Storage verlegen. |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Zitat:
Es gibt aber nur ganz wenig was alle Formulare teilen können. Sollte es eine visuelle Gemeinsamkeit vor einigen Formularen geben (z.B. Panel mit Ok- und Abbrechen-Button) dann lässt sich das viel flexibler mit Frames handhaben. Der Baukasten der OOP beinhaltet mehr als nur Vererbung! Es gibt daneben auch Composition, Dependency Injection und Abstract Factorys. Wenn ich z.B. eine Factory benütze um bestimmte Dinge in allen Formularen einzustellen anstatt abzuleiten dann bin ich einfach freier bei zukünftigen Änderungen. Ein Klasse abzuleiten bedeutet immer auch eine gewisse Zementierung der Methoden. Die Basisklasse kann kaum noch geändert werden weil unter Umständen hunderte Formulare davon abhängen. Da aber Formulare immer auch Hotspots für Veränderungen sind ist es wichtig, dass man hier Vererbung vermeidet um die Möglichkeiten zur Veränderung offen zu halten. Die Klasse TForm ist schon von sich aus richtig "fett"; es gibt sehr viele Methoden und Properties. Solche Klassen sollte man nicht zusätzlich durch weitere Ableitungen aufblasen. Kleine Klassen die nach dem Baukastenprinzip zusammengesetzt werden lassen mehr Freiheit für Veränderungen. Zitat:
![]() |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Zitat:
Und das "nur ganz wenig", was Formulare gemeinsam brauchen, das stellt sich folgendermassen dar : gleiches Aussehen : betrifft Koordinaten, Fonts, diverse Controls (z.B. Schliessen-Button u.ä.)Auch speichern des aktuellen Standes. gleiche Bedienung : Tastatur : ein Tasten-Bedienung ! Wie gesagt : ISO-konform und nicht nach M$-"Standard". Also Esc zum schliessen und nicht Alt-F4. Ähnliches gilt für Tab/Shift-Tab, Suchtaste muss immer dieselbe sein etc. Betrifft OnKeyDown,OnKeyPress + Co. Maus : selbes Spielchen. Die Mausevents können zentral implementiert werden. Dann gehts noch um Speicherfreigaben und anderes. In meiner eigenen Ur-Form gibts auch noch ein OnClose mit
Delphi-Quellcode:
Besser, so was ist automatisch schon eingebaut.
Action := caFree;
Und sollte irgendwo was nicht passen, dann besteht die Erhöhung dieser "Flexibilität" nur darin, das
Delphi-Quellcode:
wegzulassen. Dann kann man ja alles wieder einfach neu bzw. anders definieren.
inherited;
Allerdings muss ich es mit Marco Cantu halten. In Köln auf den Delphi-Tagen habe ich länger mit dem diskutiert. Wir mussten leider feststellen, dass "even experienced Developers don't know, how to use repository, perhaps they simply ignore that" 8-) |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Formvererbung?
Komisch, das erinnert mich irgendwie an die OOP und das Vererben von billigen Klassen/Komponenten. Ja OK, das ist natürlich ganz schlim und sowas macht keiner. Prozeduren gehören in eine Unit und nicht in eine Klasse. Vererbter Code ist schlecht, denn ändert man mal was am Vorfahren, dann sind auch gleich alle Nachfahren futsch ... darum besser garnicht erst vererben und jedesmal alles neu schreiben. |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Das Ableiten von Formularen in der Objektablage mag ja für ein Login-Form oder ein About-Form noch in Ordnung gehen. Die Formulare in der Objektablage werden durch die Versionverwaltung nicht erfasst; das führt zu Problemen wenn man den Sourcecode weitergibt. Wer immer nur auf dem gleichen Rechner arbeitet der kennt das Problem nicht. Verwenden, also Kopieren von Formularen aus der Objektablage ist dagegen problemlos. Zitat:
|
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Zitat:
Wenn ich bestimmte Features einheitlich in allen meinen Formularen haben will, dann ist die Ableitung meiner Formulare von einem Vorfahr, der alle diese Features beinhaltet, die ADÄQUATE Vorgangsweise. natürlich gibt es auch andere Möglichkeiten, man kann Frames definieren, man kann Helper-Komponenten auf alle Formulare ziehen, man kann sich mit einer Factory behelfen etc. etc. Alle diese Möglichkeiten würde ich auch ins Auge fassen, wenn es in Delphi nicht zum Glück die einfachste und beste Lösung, nämlich die Vererbung, geben würde. Zitat:
|
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Zitat:
Die Vererbung zu benutzen um sich das Leben einfacher zu machen aber gleichzeitig hinten die Vasen wieder zu zertrümmern ist nicht konsequent. Schreibt man sich dafür eine entsprechende Logik (Unit) kann man diese hervorragend wiederverwenden, per Unit-Test prüfen und braucht sich keine Gedanken mehr darum machen. |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Dennoch kann man diese Funktionalität in das Formular einbauen.
Und sei es nur die Schnittstelle dafür. Also z.B. wie beim Popupmenü oder dem CustomHint, ein Property, wo man sonstwas anhängen könnte und dessen Aufruf an den entsprechenden Stellen integriert wurde. Oder man baut den Aufruf überall direkt ein, zu einer globalen Klasse/Funktion, welche dann das Speichern übernimmt. |
AW: Problem mit Komponentennamen bei abgeleiteten Formularen
Natürlich lässt sich jede Aufgabe nahezu beliebig weiter zerlegen. Dann habe ich eine Unit, die weiss, dass Daten in ein ini-File geschrieben werden sollen, die ruft dann eine unit auf, die ihr sagt, wie die Ini-Datei heissen soll, danach eine Unit, die weiss, welche Daten geschrieben werden sollen etc.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz