Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

Stevie 7. Okt 2004 11:40

Re: Objektablage
 
Tjaja, die armen Leute, die immer ihre Formular von andren ableiten, indem sie dne Vorgänger abändern und dann in der Formular-als-Text-Ansicht das object durch inherited ersetzen... :mrgreen:
Aber mal ne Frage:
Ich hab ein Package, wo meine Standard-Formulare drin sind. Gibt es eine Prozedur, die mir bestimmte Formulare in die Objektablage ablegt? So, dass ich nach dem Installieren des Packages die Formulare auf einem eigenen Tabsheet sehen kann?

Hansa 7. Okt 2004 12:03

Re: Objektablage
 
Zitat:

Tjaja, die armen Leute, die immer ihre Formular von andren ableiten, indem sie dne Vorgänger abändern und dann in der Formular-als-Text-Ansicht das object durch inherited ersetzen...
Was willst du uns damit sagen ? :shock: Verstehe nur Bahnhof. :mrgreen:

Zur Frage : Formulare im Package ? :shock: ---> 2. Bahnhof :zwinker:

Forms in der Objektablage sind meistens bei Datei -> neu -> weitere. Um es noch einmal zu sagen : die Objektablage hat mit eigenen Komponenten theoretisch etwas zu tun und ist doch ein ganz anderer Ansatz. Im Gegensatz zu "normalen" Komponenten funktioniert die Ableitung bei Forms ganz anders. Deshalb kriegt man auch keine Forms in die Komponentenpalette rein gepackt. 8)

Stevie 7. Okt 2004 12:19

Re: Objektablage
 
Ok, ich hol mal etwas aus...
1.) Angenommen, du willst ein Formular von einem anderen ableiten, dann macht man das natürlich am besten so, wie du erklärt hast oder eben so wie ich erklärt hab. Du erstellst ein normales Formular und änderst die Zeile...
Delphi-Quellcode:
TForm1 = class(TForm)
in...
Delphi-Quellcode:
TForm1 = class(TMyForm)
wechselst dann in die Text-Ansicht des Formulars und änderst die Zeile...
Delphi-Quellcode:
object Form1: TForm1
in...
Delphi-Quellcode:
inherited Form1: TForm1
und wechselst wieder in die Formularansicht. Schwupp, ist das Formular von TMyForm abgeleitet und besitzt auch dessen Komponenten.
Wie gesagt, sehr umständlich, aber so wurde mir das am Anfang meiner Ausbildung erklärt... :gruebel: :wall:

2.) Ich hab ein Package gemacht, in dem sich Formulare befinden, die über zusätzliche im OI sichtbare Eigenschaften verfügen und außerdem Komponenten beinhalten. Dies ist nur durch zwei Schritte möglich: 1. Formular erstellen, mit published properties versehen und über RegisterCustomModule installieren, 2. weiteres Formular vom ersten Formular ableiten und Komponenten plazieren. Wenn ich aber dieses Package woanders installiere, möchte ich, dass ich die Formulare, die ich für das Ableiten vorgesehen habe, unter Datei -> neu -> weitere in einem von mir benannten TabSheet auswählen kann.

Hansa 7. Okt 2004 12:48

Re: Objektablage
 
hehe, du machst also die Arbeit, die die Objektablage macht von Hand und dann auch nur die Hälfte davon. :mrgreen: Benutze die Objektablage und genau was Du willst macht die, wenn du dem Formular sagst (Rechtsklick) : ab in Objektablage. Dann wird auch gefragt in welches Tabsheet sie da rein soll. Das Hand-inherited :lol: kriegst du auch gemacht wenn du sagst "vererben". Dann 2. (ähnliches) Formular fischst du dir dann mit datei -> neu -> weitere da raus und sagst wieder : vererben. Dieses 2. Formular kannst du dann bearbeiten. Ein paar mehr Controls usw. Änderungen an dem 1. wirken sich dann auch auf alle Abkömmlinge aus. Aber du weißt ja was OOP ist. 8)

Stevie 7. Okt 2004 12:51

Re: Objektablage
 
Jo, das weiß ich doch! :zwinker:
Ich würd mir nur gerne das Hinzufügen in die Objektablage innerhalb der Register-Prozedur machen. Weißt du, wie das geht??

Hansa 7. Okt 2004 12:55

Re: Objektablage
 
ne, kein Plan. Ich traue deinem Hand-inherited sowieso nicht so recht. :mrgreen:

Stevie 7. Okt 2004 13:08

Re: Objektablage
 
Zitat:

Zitat von Hansa
ne, kein Plan. Ich traue deinem Hand-inherited sowieso nicht so recht. :mrgreen:

Halloo??? Ich praktiziere kein Hand-Inherited (mehr)!!!
Man über Datei -> Neu -> Weitere... auf die registrieren Formulare innerhalb des aktiven Packages zugreifen, und diese ableiten!

Ultimator 8. Nov 2005 18:03

Re: Objektablage
 
Hm, kann man da auch irgendwie "Templates" für neue Projekte anlegen, wie z.B. n DLL-Gerüst, oder ein Unitgerüst mit "Standardcode", den man bei einem leeren Projekt immer wieder eintippen/C&P'en müsste?
Wäre eigentlich praktisch, wenns das gäbe...

//edit in der gleichen Minute hat Sharky die gleiche Frage hier gestellt :lol:

//edit2: Und nu isses geklärt :stupid: : Die Lösung

Hansa 8. Nov 2005 19:56

Re: Objektablage
 
kurze Aktualisierung aus aktuellem Anlass. 8) Ob sich das nun für ganze Projekte, DLLs usw. verwenden läßt ? Keine Ahnung. Um das herauszufinden hilft wohl nur Rechtsklick und nachsehen, wo und wann im Kontextmenü "der Objektablage hinzufügen" auftaucht. Oder einen ganz anderen Ansatz suchen. Alternativ heißt es tief graben, um was darüber zu finden, aber sehr tief.

jetzt noch neues konkretes (kurzes) Beispiel, wie ich es gemacht habe, Rest siehe Anfang :

Nach einem Jahr ist eine Auffrischung auch angebracht. Ganz normal anfangen neues Projekt -> Form ist da. In dieser Form habe ich die Tastatur zuererst mal "behandelt". Also OnKeyPress/OnKeyDown. Z.B. auch mit Esc Form schließen. Dann ab in die Objektablage damit, z.B. unter dem Namen KeyForm.

Weiter, die nächste Form soll ein Datum erhalten und die Nr. der Workstation oben rechts in Form-Ecke. Also neu -> andere. KeyForm gesucht und unbedingt die Radiogroup unten auf inherited setzen !! Ich pappe 2 Labels drauf, ändere im OI die Farben, daß es schöner aussieht, natürlich die Namen usw. Im Formshow werden dann gleich noch die Koordinaten der zwei Labels in Abhängigkeit der Formgröße gesetzt (zur Laufzeit), also so :
Delphi-Quellcode:
  lblDatum.Left := width - (16 * (lblDatum.Font.Size));
  lblStationNr.Left := lblDatum.Left;
Wieder ab ins Repository unter KeyFormLabel oder so. Ab jetzt gehts Schlag auf Schlag, nächste Form davon ableiten. Diese hat die gewünschten Tastaturreaktionen und das Datum und die StationNr stehen immer an der gleichen Stelle, egal wie groß die Form wird.

Gut machen wir mal komplette Lagerverwaltung mit einer Din A 4 Seite Source. :shock: Zwischenzeitlich sind noch mehr Forms als Vorfahr da. Es ist dafür gesorgt, daß es folgende gibt : zusätzlich zu der zuletzt erwähnten hat die Form eine CheckBox "alphabetisch sortieren" eine GroupBox mit "von Nr." und "bis Nr." eine für Ausgabe "Bildschirm", "Drucker". usw. Für die Lagerverwaltung wäre noch das zu gebrauchen : eine Checkbox "Bestände = 0 nicht anzeigen". Das und nur das wird von Hand auf die Form draufgelegt, alles andere ist schon da ! Auch die nichtvisuellen Sachen, wie die Tastaturevents.

Gut, irgendwann vorher hat einer der Vorfahren noch ein Stringgrid zur Anzeige verpaßt gekriegt. Mitsamt eigenem OnDrawCell usw. Dieses hat aber nun keine Ahnung von den Daten, die angezeigt werden sollen, aber bereits dort wurde eine Procedure (als virtual) im protected Abschnitt eingeführt, die bleibt aber da noch leer !! Nennen wir sie "ErmittleDaten" Das ist alles was in der Lagerverwaltung gemacht werden muß : ein SQL-Statement anhand der gemachten Einstellungen (Checkbox angeklickt oder nicht ? usw.) zusammenzubauen. Per override erstzt man dann die vorher leere Prozedur. Eventuell muß noch die Spaltenanzahl des Grids angepaßt werden oder sonstiger Kleinkram.

Ok, das wars. Jetzt brauchen wir noch eine Artikelliste. Wir nehmen denselben Vorfahr wie den von der Lagerverwaltung. Bestand = 0 interessiert da nicht, aber wir wollen entweder Verkaufs oder Einkaufspreis. Also muß andere Groupbox her. Zusätzlich soll das Datum oben in der Ecke aber unbedingt grün werden, weil das schöner ist. :stupid: Tja, die Datumfarbe ändern wir schnell im OI. Die Prozedur ErmittleDaten wird an andere Tabelle angepaßt und fertig.

Edit : fast vergessen 8)

Man muß immer daran denken, die Forms mit "dem Projekt hinzufügen" wirklich dem Projekt mitzuteilen, daß die Form gebraucht wird ! Einfaches Erweitern der Uses Liste genügt normalerweise nicht. Dann tauchen Fehlermeldungen auf wie : "Vorfahr von FormXY nicht gefunden". Da Delphi das allerdings dann auch in die DPR reinschreibt, und eventuell die Reihenfolge der sichtbaren Forms dadurch geändert wird ist es IMHO ratsam, grundsätzlich alle Forms außer der Hauptform und den Datenmodulen erst zur Laufzeit zu erzeugen.

Trotzdem müssen sie erst dem Projekt hinzugefügt werden, um sie dann wieder mit Projekt -> Options auf nicht automatisch erzeugen zu setzen. Delphi macht da noch was mehr, als nur die Uses Liste zu ändern. In diesem Zusammenhang noch das :

Zitat:

Zitat von Borland
...D2005 stores the repository information in an XML file

....\Borland\BDS\3.0\Objrepos\BorlandStudioReposit ory.xml

Older versions use the delphi32.dro file in the Delphi BIN directory for
this purpose. It is a text file...

Ich hatte bei Borland nachgefragt, was denn bei D2005 mit dem Repository sei. Wegen fast keinerlei Äußerungen über die Geschichte (zumindest in keinem deutschen Forum war was zu finden, außer dem von mir selber :lol: ), hatte ich das dumpfe Gefühl, daß wenn es schon keiner benutzt die das einstampfen. :mrgreen: Da sie sich aber offensichtlich die Mühe gemacht haben, das Ganze sogar in eine XML Struktur zu stecken, gehe ich eher vom Gegenteil aus.

torud 24. Okt 2007 19:28

Re: Objektablage
 
Also da ich nun auch mit von der Partie bin, möchte ich kurz meine beiden Probleme schildern.

1. Ich finde leider nicht heraus, wie ich Gespeichertes wieder bearbeiten kann...=> sicher überlesen...

2. Ich habe mir ein ganzes Formular in die OA gelegt und würde dies nun gern als Hauptformular benutzen. Wenn ich aber eine neue Anwendung erzeuge und dann dieses Formular hinzufügen will, kann es ja nicht das Hauptform werden, da ja mit dem neuen Projekt schon eins erzeugt wurde. Ich muss also in den Projektcode gehen und Unit1 manuell entfernen, wenn ich will, dass es klappt...Muss das so sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Seite 2 von 4     12 34      

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