AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Objektablage
Tutorial durchsuchen
Ansicht
Themen-Optionen

Objektablage

Ein Tutorial von Hansa · begonnen am 27. Mär 2004 · letzter Beitrag vom 4. Aug 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Hansa
Registriert seit: 9. Jun 2002
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...
Gruß
Hansa
 
Hansa

 
Delphi 8 Professional
 
#2
  Alt 27. Mär 2004, 18:12
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...
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#3
  Alt 27. Mär 2004, 21:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#4
  Alt 28. Mär 2004, 16:13
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

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber

 
Delphi XE Professional
 
#5
  Alt 28. Mär 2004, 16:22
Hi!

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

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#6
  Alt 17. Aug 2004, 00:08
Ähh, ich muß das mal wieder hervorkramen. Wer hat sich jetzt mit dem Thema eigentlich zwischenzeitlich mal beschäftigt ?
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor
 
#7
  Alt 17. Aug 2004, 02:28
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...
Michael N.
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#8
  Alt 17. Aug 2004, 02:42
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.
[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.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor
 
#9
  Alt 17. Aug 2004, 12:58
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
Michael N.
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#10
  Alt 17. Aug 2004, 15:37
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. 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 17:11 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