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 3 von 4     123 4      
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
 
Muetze1
 
#21
  Alt 24. Okt 2007, 20:39
Zu 2.: Nein: Projektoptionen haben eine ComboBox zur Auswahl der Hauptform. Grundsätzlich wird die erste mit Application.CreateForm() erstellte Form zum Hauptformular. Diese Aufrufe stehen im Normalfall in der .DPR Datei vor dem Application.Run. Diese Reihenfolge dort wird von den o.g. Projektoption geändert.
  Mit Zitat antworten Zitat
torud

 
Delphi XE5 Professional
 
#22
  Alt 24. Okt 2007, 20:45
Ok, das konnte ich durchaus nachvollziehen. Das passt soweit schonmal.

Ich wollte aber eigentlich meine eigene Databar in die Objektablage legen. Diese besteht nur aus einem Panel auf der eine Toolbar liegt mit einer Combo und zwei BitButtons. Allerdings wird mir immer das komplette Formular gespeichert, obwohl ich explizit beim Panel rechte Maustaste "Der Objektablage hinzufügen" übergeben habe...komisch
  Mit Zitat antworten Zitat
Muetze1
 
#23
  Alt 24. Okt 2007, 20:48
Die Objektablage übernimmt immer nur Ableitungen von TForm und TFrame. Einzelne kleine Komponenten wie Panels werden nicht berücksichtigt sondern immer nur der direkte Parent - also immer der Untergrund der das Fenster stellt. Zu dem was du erreichen willst, ist die OA nicht gedacht/geeignet.

Aber: Wieso nicht einfach eine TFrame erstellen mit genau diesen Elementen (wobei die TFrame Ableitung das TPanel ersetzt), programmieren etc und dann diese Frame der Objektablage hinzu fügen? Die Frames sind eh dazu gedacht und in Bezug auf deine Forderung wohl die beste Lösung.
  Mit Zitat antworten Zitat
torud

 
Delphi XE5 Professional
 
#24
  Alt 24. Okt 2007, 21:06
Jo jo, Frames sind genau das Richtige. Jetzt muss ich nur noch herausfinden, wie ich einmal angelegte Ablagenobjekte nachträglich bearbeiten kann...
  Mit Zitat antworten Zitat
Hawkeye219

 
Delphi 2010 Professional
 
#25
  Alt 24. Okt 2007, 21:10
Hallo Tom,

was du ursprünglich nutzen wolltest, ist die Komponentenvorlage. Markiere die zu speichernden Komponenten und wähle den Menüeintrag "Komponente -> Komponentenvorlage erzeugen...". Es erscheint ein Dialog, in dem du einen Namen und die Palettenseite für die Komponente bzw. Komponentengruppe wählen kannst. Nach dem Bestätigen werden die markierten Komponenten mitsamt dem zugehörigen Quelltext der Ereignisbehandlungsroutinen in die Komponentenbibliothek übernommen.

Eine Komponentenvorlage bietet sich in den Fällen an, wo ein Frame nicht nutzbar ist, weil z.B. die Komponenten keinen zusammenhängenden Bereich auf dem Formular bilden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#26
  Alt 24. Okt 2007, 21:12
zu 1. : wie, gespeichert und neu bearbeiten ? Das steckt doch alles in den Form Units. Du musst die Form eben öffnen und bearbeiten. Sofern sie vererbt wird auch dran denken, dass sich Änderungen auf alle Nachfahren auswirken. Plane das von Anfang an bloß gut !

zu 2. : das "Hauptformular" hat doch keine eigene Bedeutung. Es wird eben standardmäßig erst mal eins erzeugt. Stelle dir mal vor das wäre nicht da und ein Anfänger müsste erstmal mit Datei -> neu -> Forms eine erzeugen. Entwerfe ein Formular so weit, wie es am Anfang Sinn macht. Also nicht zuviel auf einmal. Vererbe die besser später immer feiner. Schiebe das "Hauptformular" dann in die Objektablage.

Nun entferne es aus dem Projekt (Projekt -> aus Projekt entfernen). Guck dir jetzt mal die DPR an. Die hat kein Formular mehr ! Das aus der Objektablage soll nun das "Hauptformular" werden ? Dann wie gehabt : Datei -> neu -> weitere. Gewünschtes Formular auswählen, in diesem Fall eben das, was vorher in die Objektablage geschoben wurde. Wieder DPR angucken und Programm mal laufen lassen.

P.S.: hier gehts nur um die Objektablage und nicht darum, ob sie für einen speziellen Zweck das richtige ist. Bitte beachten ! Meine Antwort bezieht sich deshalb nur auf die Objektablage und die Fragen hierzu. Was Muetzze meint ist wohl, dass man nicht ein loses Panel da reinschieben kann. Das hat auch keiner gesagt. In dem anderen Thread gng es darum, nicht immer denselben Code in mehrere Forms einbauen zu müssen. Genau dazu ist die Objektablage gedacht. Die Form kann sehr wohl auch nichtvisuelle Sachen enthalten, die vererbt werden können. Was habe ich da diverse eigene Funktionen, die vererbt werden ! Was noch hierbei wichtig ist : die müssen mind. in den protected ABschnitt der Form. Frei rumlaufende Funktionen etc. die kapselt man besser in separater Unit und schreibt sie in die uses-Klausel.
  Mit Zitat antworten Zitat
Muetze1
 
#27
  Alt 24. Okt 2007, 21:23
Zitat von Hansa:
Was Muetzze meint ist wohl, dass man nicht ein loses Panel da reinschieben kann. Das hat auch keiner gesagt.
Klar, wurde aber von torud gefragt (bzw. nach seinen Erklärungen hat er dies versucht) und nicht gesagt.

Zitat von Hansa:
Was noch hierbei wichtig ist : die müssen mind. in den protected ABschnitt der Form.
Was aber eher in ein OOP Tutorial gehört, da dies OOP Standard ist...

@torud: Die Komponentenablage hatte ich glatt vergessen (da bisher noch nie genutzt). Dies wäre dann sogar noch eine schnellere Alternative als eine Frame mit der OA zu nutzen. Also am besten Hawkeye219's Vorschlägen folgen...
  Mit Zitat antworten Zitat
torud

 
Delphi XE5 Professional
 
#28
  Alt 24. Okt 2007, 21:37
Gigantisch!!!

Alle Eure Beiträge haben mich doch recht weit gebracht und dank Hawkeye219's Tipp habe ich nun eine doch recht schnelle Lösung gefunden. Auf jeden Fall habe ich wieder einiges dazu gelernt.

Ich werde mir nun nur noch überlegen müssen, wie ich meine Probleme Codetechnisch noch lösen kann, damit das automatisierte und inhaltsunabhängige Speichern auch immer klappt.

Aber das ist ein anderes Thema, dass hier nicht her gehört.
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#29
  Alt 25. Okt 2007, 01:04
Alternativen für Objektablage (leider ohne OOP) :

Als erstes wäre da mal Cut + Paste zu nennen, d.h. man markiere sich seine Komponenten auf einer Form. Mehrere markieren geht mit <Shift> + linke Maustaste. Dann eben kopieren und auf neuer Form einfügen. Hierbei werden die eventuell vorhandenen Ereignisse der beteiligten Komponenten aber nicht mitkopiert. Das was im OI bereits eingestellt ist wird allerdings kopiert.

Ist umfangreicher Code für die Ereignisbehandlung vorhanden, so muss man den auch markieren, einfügen usw. Beim letzten Schritt bietet Delphi etwas Unterstützung. Sind die zu verwendenden Komponenten markiert, dann kann man oben auf Komponente -> "Komponentenvorlage erzeugen" gehen. Aber Achtung ! Mit eigenen Komponenten hat das überhaupt nichts zu tun !! Man wird danach in der Komponentenpalette einen Eintrag "Vorlagen" finden. Wenn man nun eine dieser Vorlagen auf eine Form legt, so spart man sich, jede Komponente einzeln auf eine Form zu ziehen. Das läuft ungefähr auf dasselbe hinaus, wie bei der Objektablage nur "kopieren" oder "verwenden" auszuwählen. Hauptunterschied ist allerdings, dass es sich um Komponenten-Gruppen handelt und diese auch bei bestehenden Forms auf einen Schlag (mitsamt Ereignissen) eingefügt werden können. Zur Erinnerung : Objektablage behandelt immer ganze Forms, deren Eigenschaften allerdings vererbt werden können.

Im Prinzip ist und bleibt die Komponenten-Vorlage auch nichts anderes als die Vervielfältigung des Codes. Um die EXE nicht zu sehr aufzublähen könnte man das bei vielen gleichartigen Projekten eventuell sinnvoll einsetzen. In einem einzigen Projekt sind alleine schon die zwangsläufig auftauchenden Redundanzen bedenklich / überflüssig.

Eine Form mit der Objektablage erzeugen (ohne inherited), oder eben eine Form erzeugen und da dann aus den Komponenten-Vorlagen was draufzulegen, ob das Sinn macht, das muss jeder selber wissen. Ich sage : gibt nicht allzuviel her.
  Mit Zitat antworten Zitat
Muetze1
 
#30
  Alt 25. Okt 2007, 01:13
Hast du irgendwann auch mal gute Laune bzw. musst du einem irgendwie immer den Tag versauen? So wie dein Beitrag rüberkommt, bekomme ich gerade wieder Sodbrennen. Mir egal, mir reichts. Ich habe meine geistige Ignore-Liste und damit lebe ich gesünder...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 00:43 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