Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

Muetze1 24. Okt 2007 19:39

Re: Objektablage
 
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.

torud 24. Okt 2007 19:45

Re: Objektablage
 
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 :freak:

Muetze1 24. Okt 2007 19:48

Re: Objektablage
 
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.

torud 24. Okt 2007 20:06

Re: Objektablage
 
Jo jo, Frames sind genau das Richtige. Jetzt muss ich nur noch herausfinden, wie ich einmal angelegte Ablagenobjekte nachträglich bearbeiten kann...

Hawkeye219 24. Okt 2007 20:10

Re: Objektablage
 
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

Hansa 24. Okt 2007 20:12

Re: Objektablage
 
zu 1. : wie, gespeichert und neu bearbeiten ? :shock: 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.

Muetze1 24. Okt 2007 20:23

Re: Objektablage
 
Zitat:

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:

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...

torud 24. Okt 2007 20:37

Re: Objektablage
 
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.

Hansa 25. Okt 2007 00:04

Re: Objektablage
 
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.

Muetze1 25. Okt 2007 00:13

Re: Objektablage
 
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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.
Seite 3 von 4     123 4      

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