Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Objektablage (https://www.delphipraxis.net/19014-objektablage.html)

Hansa 27. Mär 2004 16:34


Objektablage
 
Objektablge / Repository

Wie sich gezeigt hat, ist die "Objektablage" in Delphi ziemlich unbekannt. Zumindest wird sie kaum benutzt. Meiner Meinung nach völlig zu Unrecht. Denn sie erleichtert schon einiges.

Viele glauben, man könne damit lediglich eine Form definieren, um diese dann zu kopieren. Der OOP-Ansatz wird dabei allerdings häufig übersehen.

Hat eine Form den Fokus, so kann man mit einem Mausklick (rechts) ein Popupmenü öffnen. In diesem besteht folgende Möglichkeit : "der Objektablage hinzufügen...". Wird dies ausgewählt, so muß ein Name und ein Titel festgelegt werden. Ist dies geschehen, so findet man die Form mit sämtlichen Eigenschaften (inkl. Schriftart, Controls usw.) unter Neu-> (normalerweise) weitere.

Wird die Form ausgewählt, so ist (sehr wichtig !!) unten eine Auswahl zu sehen. "Kopieren", "Vererben", "Verwenden". Kopieren bedeutet einfach nur, dass eine Kopie der Form unter anderem Namen angelegt wird. Ist also die Form in der Objektablage gespeichert als "MyForm", so ist die Kopie genau diese Form mit dem Namen "MyForm1". Auf diese Form kann man nun alle möglichen Sachen drauf packen oder auch entfernen.

Soweit einmal ein erster Einstieg. Richtig interessant ist jedoch, falls man eine Form vererben will. Wählt man "Kopieren", so hat man zumindest schon einmal die Arbeit gespart, sämtliche vielfach benötigten Eingabefelder oder sonstige Eigenschaften zu definieren. Dies gilt für alle im OI einstellbaren.

Wird fortgesetzt...

Hansa 27. Mär 2004 18:12

Re: Objektablage
 
Das wirklich wichtige kommt jetzt :

Ich gehe mal von folgendem Fall aus. Es wird eine Form gebraucht, die folgende Eigenschaften hat : Standard-Schriftgröße 10. Sie soll ein Edit-Feld haben und ein Stringgrid. Ist sie deaktiviert, so soll sie anders aussehen, als aktiviert. Gut, das dürfte reichen. Bei mir kommen noch einige Sachen dazu. Wie geht man nun vor ? Klassisch ganz einfach : Neu -> Form und dann alles von Hand einstellen. Farbe, OnKeyDown, OnClose usw. Aber das ist im Prinzip doch immer dasselbe. Nun kann man diese Form ja wie gesagt einfach kopieren.

Der Nachteil ist aber dann, dass der Vorteil den man hat, die Steuerelemente nicht wieder neu auf der Form zu platzieren und im OI die Eigenschaften einzustellen nur einmalig ist. Wenn man die Forms 10mal kopiert, so muß man sie auch 10 mal abändern, wenn nötig.

Also mache ich doch besser folgendes :

1. neue Form erzeugen
2. OnActivate und OnDeactivate besetzen, z.B. Hellrot, falls aktiviert und grün, falls deaktiviert.
3. Stringgrid und Edit auf die Form. Da wo sie hin sollen.
4. alle weiteren gewünschten Eigenschaften. Schrift usw.

Nun verfrachte ich diese Form in die Objektablage. Alle Eigenschaften bleiben dabei erhalten. Brauche ich noch eine ähnliche Form, die sich zwar so wie die erste Verhalten soll, so erzeuge ich eine neue, aber nicht mit neu -> Form, sonder mit neu -> weitere ->... Da suche ich mir die vorher definierte aus. Und nun (nicht vergessen !) den Radiobutton "Vererben" anklicken. Auf diese neue Form lege ich nun Checkboxen, Datasets usw. Sie behält dann alle Eigenschaften der Vorfahrform, ich kann aber trotzdem (fast alles) tun und lassen was ich will.

Auch diese Form kann ich nun in die Objektablage schieben, so dass ich in Zukunft auch noch die neu eingeführten Checkboxen benutzen kann. Natürlich kann ich jetzt noch weiter machen und das OnActivate der allerersten Form ersetzen.

Das wichtigste ist jedoch folgendes : Angenommen, das OnActivate Ereignis soll ganz anders gemacht werden. Und das bei allen Forms. Ich müsste also Form für Form aufrufen und abändern. Mit meinem Beispiel gehe ich ganz einfach hin, ändere die Ausgangsform und durch OOP ist alles in den vererbten Forms abgeändert :!: Allerdings nur, sofern für die neue Form "Vererben" ausgewählt wurde. Paßt das nicht überall, so suche ich die am besten passende Form und kopiere diese lediglich.

In meinem konkreten Fall sieht die Hierarchie folgendermaßen aus:

Eine Form mit Panel und Editfeld ist der Ursprung. Diese wird vererbt an eine, die noch ein Stringgrid enthält. Manchmal brauche ich kein StringGrid, das Panel/Edit aber schon. Dann nehme ich die 1. Form. Lege ein paar Labels usw. drauf. In einem anderen Fall brauche ich außer dem Stringgrid nun noch ein Image. Und das in 3 Fällen. Deshalb lege ich ein Image noch auf die 2. Form und leite mir von dieser wiederum 3 Forms ab, bei denen ich nur noch die Picture-Eigenschaft anpasse. Usw. usw.

Ich schätze mal, daß bei Einhaltung dieses Konzeptes bestimmt 20 % der Programmierzeit eingespart werden können. Wieso die Objektablage kaum genutzt wird ist mir nach wie vor ein Rätsel. 8)

Wird fortgesetzt...

Hansa 27. Mär 2004 21:01

Re: Objektablage
 
Viel mehr gibt es nicht zu sagen. Vielleicht ist es auch zu einfach, so daß keiner das Ganze benutzt. Wer es nicht benutzt ist selber Schuld, meiner Meinung nach. Allerdings steht auch kaum was darüber geschrieben. Eines fehlt allerdings noch : wie kriegt man die Dinger wieder aus der Objektanlage raus ? Für Testzwecke dürften sich im Repository/Objektablage schon einige unnütze Forms ansammeln. 8) Und das ist auch etwas versteckt untergebracht.

Sollen die wieder weg, dann : Tools -> Objektablage -> Form auswählen -> Objekt entfernen.

Ah, noch ein Hinweis : bei vererbten Forms steht immer inherited im Source. Wenn das fehlt, so hat man die Form nicht vererbt und wird später wahrscheinlich unliebsame Effekte bemerken.

[vorerst beendet]

P.S.: Kommentare sind jetzt erwünscht. Insbesondere würden mich die Gründe interessieren, warum anscheinend keiner diese Sache verwendet.

mirage228 28. Mär 2004 16:13

Re: Objektablage
 
Zitat:

Zitat von Hansa
P.S.: Kommentare sind jetzt erwünscht. Insbesondere würden mich die Gründe interessieren, warum anscheinend keiner diese Sache verwendet.

Weil ich vorher nicht so richtig über das Thema bescheidwusste. Ich hätte auch nicht gedacht, dass es etwas so nützliches dahinter steckt.
Ich denke die Dinge könnten gut in mehreren meiner Projekte Verwendung finden. ^^

Ein wirklich super Tutorial :thuimb:

mfG
mirage228

fkerber 28. Mär 2004 16:22

Re: Objektablage
 
Hi!

Ich wusste gar nicht, dass es so etwas gibt.
Danke für den Tipp, ist bestimmt nützlich.

Ciao fkerber

Hansa 17. Aug 2004 00:08

Re: Objektablage
 
Ähh, ich muß das mal wieder hervorkramen. Wer hat sich jetzt mit dem Thema eigentlich zwischenzeitlich mal beschäftigt ? :zwinker:

nailor 17. Aug 2004 02:28

Re: Objektablage
 
ich nicht. mehr kann ich zu dem thema von daher im moment nicht sagen...

außer, dass ich noch nie wirklich dringnde notwendigkeit dafür gesehen hätte. strg-c/v geht doch auch...

Hansa 17. Aug 2004 02:42

Re: Objektablage
 
Zitat:

Zitat von nailor
ich nicht...außer, dass ich noch nie wirklich dringnde notwendigkeit dafür gesehen hätte. strg-c/v geht doch auch...

[HT]
Cut+Paste Möchtegern-Programmierer sind auch nicht gefragt. Falls du auch zu denen gehörst : keiner zwingt dich jedem mitzuteilen, daß du nicht weißt um was es geht. :mrgreen:
[Ende HT]

Es geht auch um OOP und da liegen die Stärken von dem Ding. Außerdem geht es darum eine einheitliche Oberfläche zu erschaffen. Sofern nur eine einzige Form für ein Mini-Programm verlangt wird, ja dann kann man sich die einzelnen Steuerelemente mit C+P zusammenstückeln und jedesmal am OI rumfummeln. Ab 2 Forms ist es aber gut zu gebrauchen. Bei mehr als 5 ist es allerdings schon schlecht, wenn man nicht weiß um was es geht.

nailor 17. Aug 2004 12:58

Re: Objektablage
 
eine frage hab ich jetzt mal noch. wenn man nachträglich was an der ursprungsform ändert, erben/übernehmen dann alle anderen forms diese änderung? weil wenn nicht, sehe ich keinen unterscheid zwischen:

Strg-A Strg-C "neues Formular" Strg-V

Hansa 17. Aug 2004 15:37

Re: Objektablage
 
Ich glaube das wichtigste steht weiter oben schon. Aber um es noch einmal klar zu machen (anhand eines Beispieles) :

Angenommen ich habe ein Stringgrid mit 5 Spalten und in Spalte 3 soll etwas eingegeben werden. Nun lege ich das in die Objektablage. Ich leite hiervon eine Form, sagen wir Form1 ab (vererben auswählen). Dann noch eine (Form2) und setze in dieser ColCount auf 7 und da muß auch noch ein Panel drauf und ein paar Edits. Somit habe ich zwei Stringgrids mit einmal 5 und einmal 7 Spalten. Das Verhalten ist genau das von der Form im Repository. Bis auf die hinzugekommenen Edits und die Spaltenanzahl.

Nun habe ich mich vertan. :shock: Die Spalte 3 soll keine Eingaben erfassen, sondern die Spalte 4 !

Nun ändere ich die Ursprungsform in der Objektablage dementsprechend ab und Simsalabim, für die 2 Forms gilt das ab dann auch. Mit C+P müßte ich das alles für jede Form im OI neu einstellen.

Desweiteren wird mit C+P nur das, was in der DFM steht mitkopiert. Wurde zusätzlicher Code dazu geschrieben so muß man den im Source auch noch per C+P kopieren und anpassen. Das öffnet Fehlern Tür und Tor.

Anderes Beispiel : Farbe eines speziellen Labels, welches auf 10 Forms liegt, gefällt mir nicht mehr. Kein Problem : ich öffne die 10 Forms nacheinander, klicke das Label an, gehe im OI auf die Color, suche die, die besser aussieht und ändere sie ab. Und das 10mal ! Klar, das ginge schon. 8) Aber ich ändere doch besser das Label der Ursprungsform einmal ab und basta.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

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