einfache Frage, denke ich, aber irgendwo stecke ich leider fest: da ich mehrere Funktionen habe, die thematisch zusammen gehören, möchte ich sie gerne in eine eigene unit 'auslagern' (standard 'unit2'). Ich füge also im Hauptprgramm 'unit2' bei 'uses' hinzu und lege (Datei, Neue Unit) eine neue unit an, der ich eine Minimalprocedure verpasse...
Prinzipiell ist das richtig. Du hast nur vergessen, den Parameter als Rückgabewert zu deklarieren: procedure Aendern(var Zeile: string); oder function Aendern: string;
mulcheo hat geschrieben:
B-Frage:
wie kann ich von 'unit2' aus direkt die Caption der Form1 änder oder beispielsweise Text (Canvas.Textout) darauf ausgeben?
Würd ich gar nicht, ist kein gutes Programmdesign. Weise lieber in der zum Formular gehörenden Unit die entsprechenden Werte den Controls zu.
jetzt lese ich immer wieder (auch im Rahmen meiner Recherche vor und nach der Frage) von 'schechtem Programmdesign' und ich verstehe ja auch, dass Formulare, die sich wechselseitig aufrufen, vielleicht nicht die beste Idee sind, ABER: was ich will, ist doch eigentlich sehr naheliegend und eher ein Merkmal guten Designs, oder hab ich hier Denkfehler?
Ich habe in meinem Hauptprogramm mit der Zeit einfach sehr viele einzelne Funktionen und Proceduren - beispielsweise 6 Stück, die sich nur im die Textausgabe und Zeilenabstände kümmern, dann eine weitere handvoll für das Dateihandling, weitere für Usereingaben, da gibt es Keyeingaben, dann Maus, dann noch Popupmenüs usw... jetzt war meine Intuition einfach die, Gruppen zu bilden und die aus meinem Hauptprogramm auszulagern - eben in eigene 'units'. Das scheint mir auch sehr sinnreich, da beispielsweise die proceduren und functionen, welche die Textausgaben regeln, sich untereinander aufrufen, dabei aber beispielsweise nicht mit den Routinen für Dateilesen, -überschrieben, -anhängen interferieren. Wenn ich die nun in einer eigenen unit versammelt hätte, könnte ich sie in einem eigenen Fenster bzw. 'unit-Reiter' coden und verwalten und hätte letztlich viel an Übersichtlichkeit gewonnen. Ich will also gar keine neuen Formulare schöpfen, sondern - platt ausgedrückt - nur meinen Quellcode auf verschiedene units verteilen; was in meinem konkreten Fall wirklich sinnvoll ist, da sich hier gut abgrenzbare Gruppen bilden lassen.
Und dann kommt es eben zu dem Problem, dass die Routinen der unit 'AllesRundUmDieTextausgabe' ab und an mal auch ein Textout bringen müssen, also technisch gesprochen einen Canvas-Befehl auf der mainForm ausführen.
mulcheo hat geschrieben:Gibt es dafür keine etablierten 'Lösungen'?
Doch, die nutzt Du ja bei der Erstellung einer eigenen Anwendung, indem Du Dir Komponenten lädst. Sobald Du von einer Parent-Klasse wieder auf die abgeleitete Klasse zugreifst, verbaust du Dir jede Möglichkeit, von diesem Parent jemals wieder eine andere/neue Klasse abzuleiten.
ich hatte eher sowas im Kopf wie die guten alten Pascal(functional)-units, in denen man einfach etwas quellcode auslagern kann. Aber vielleicht funktioniert dieses Konzept auch im Objektorientierten Bereich nicht mehr - wäre schade, aber ich kenne mich da leider nicht genug aus.
Was wäre denn dann eure Empfehlung, um im Quellcode nicht die Übersicht zu verlieren?
p.s. ich will keine zweite Form erstellen (das scheint mir beim Überfliegen der Hauptsinn der Frames zu sein). Ich hoffe mal, da liegt jetzt kein Missverständnis vor. Es wäre ja auch schon ausreichend, wenn die teile der 'unit' zwar nicht innerhalb der unit selbst (also von anderen unit-functionen), dafür aber jeweils vom Hauptprogramm aus aufgerufen werden können.
oder anders formuliert: was wäre das lazarus-äquivalent zu folgendem Pascal-stück?
Ich würde das nicht machen.
Ein über mehrere Units zersplitterter Code ist nicht übersichtlicher.
Gehe einfach von der Logik aus, dass du alles was direkt mit dem Formular "verbunden ist" in der zugehörigen Unit erledigst (Event-Bearbeitung, Ausgabe etc.).
Auslagern kannst du alles Andere, also Helferfunktionen und Klassen.
Ausserdem: Was heisst schon übersichtlich? Im Quellcode bewegt man sich sowieso mit den Hilfsmitteln ("Suche Deklaration", Shift+Ctrl+Up/Dwn, Code Explorer etc.). Manche mögen auch "Code Folding".