AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frames

Ein Thema von Walter Landwehr · begonnen am 10. Feb 2018 · letzter Beitrag vom 11. Feb 2018
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Frames

  Alt 11. Feb 2018, 12:48
Hi Ghostwalker
Vom Basisframe, den du zur Designzeit bearbeitest, siehst du zur Laufzeit gerade mal eine Instanz, die vom Basisfram,e geerbt hat - ob sie auch dessen DB-Verbindung erbt, weiss ich nicht, aber ich könnte mir gut vorstellen: Nein.
Falsch, Frames werden, letztlich, genauso gehandhabt wie Forms. Sie lesen die Einstellungen und Komponenten aus einer DFM-Datei (sprich Resource). Der "Große" Unterschied ist, das sie nicht automatisch erzeugt werden und somit nicht automatisch durch Windows bzw. Delphi verwaltet werden.
Sorry, wenn ich dir teilweise wiederspreche:
Ja, Frames werden grundsätzlich sehr ähnlich genauso gehandhabt wie Forms. Aber Frames(Instanzen) können genauso wie Formulare automatisch erstellt oder nur bei Bedarf zur Laufzeit createt werden. Wobei dies immer auf die Frameinstanzen zutrifft, niemals aber auf den Basisframe.. Meine Erfahrungen beim durchsteppen ab der Projektunit:
(Basis-)Frames werden vor der Mainform erstellt. Zumindest, wenn die Mainform oder eine ihr untergeordnete Form ein Frameinstanz enthält, da diese beim konstruieren der Form (Form.OnCreate läuft, zumindest bei den letzten Delphi-Versionen nach dem Constructor der Form ab) die Grundlage zur Erstellung der Frameinstanz(en) darstellen.
Wie das abläuft, wenn zur Entwurfszeit keine Frameinstanzen auf der Form abgelegt sondern dynamisch zur Laufzeit erstellt werde, weiss ich nicht.

Falls du mit 'nicht automatisch erzeugt' darauf anspielst, dass du in der Toolpalette nicht einfach auf 'Frames' klicken und ihn, wie alle andern Komponenten, in eine Form(...) einfügen kannst: einverstanden. Der Frame muss erst über <Datei>Neu>weiter>Frames> erzeugt und definiert werden. Und gerade das ist der Basisframe, den du zur Laufzeit nie zu Gesicht bekommst - was du siehst, sind immer Frameinstanzen.

Es gibt auch noch die Möglichkeit, Frames in der Toolpalette unter einem eigenen Icon abzulegen. Dann dürfte das geschehn, was ich manuell mache: Ein früher mal erstellter Frame wird dem Projekt hinzugefügt, gleichzeitig aber wird eine Instanz dieses Frames auf dem von dir bestimmten Container erstellt.

Gruss
Delbor
Mit "nicht automatisch erzeugt" meinte ich, das, im Gegensatz zu Formularen, nicht automatisch beim Programmstart eine Instanz erzeugt wird. Ich habs grad mal selbst ausprobiert bei mir . Wenn du ein Formular erzeugst, wird automatisch eine entsprechende Instanzvariable in der Unit definiert, und diese wird beim Start des Programms automatisch instanziiert. Bei einem Frame bist du als Programmierer selbst dafür verantwortlich entsprechende Instanzen zu erzeugen und auch wieder frei zu geben.

Auch wenn du einen früher erstellten Frame über die Toolpalette dem Projekt hinzufügst, wird noch keine konkrete Instanz erzeugt. Vielmehr wird eine Kopie erzeugt, die als Parent deinen Container hat. Erst wenn du das Programm compilierst und startest, werden die entsprechenden Instanzen erzeugt.

Das man im Falle von DB-Komponenten die Daten der eingestellten Datenbank sieht (zu Designtime) liegt letztlich am Komponenteneditor und der IDE, hat aber nur wenig mit dem zu tun, was zur Laufzeit passiert.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frames

  Alt 11. Feb 2018, 15:38
Hi Ghostwalker

Ich sehe schon, wir sprechen vom gleichen und sind uns sehr einig. Das mit der Kopie zur Designzeit habe ich allerdings nicht gewusst. Entweder sagt die Onlinehilfe von Embarcadero nichts darüber aus und spricht immer nur von Frameinstanzen (Frame1, Frame2 etc.), oder ich habs schlicht überlesen.

Das hier finde ich aber trotzdem zumindest alls irritierend:
Zitat:
Bei einem Frame bist du als Programmierer selbst dafür verantwortlich entsprechende Instanzen zu erzeugen und auch wieder frei zu geben.
Alle Objekte, egal ob Tedit oder sonstwas, die selbst erstellt werden, müssen auch selbst freigegeben werden - es sei denn, du weisst einem dynamisch erstellten Objekt gleich die enthaltende Form (die ja nicht zwingend der Parent sein muss; letzters kann ein Panel oder ein anderer Container sein) als Owner zu. Der Owner gibt dann seine untergebenen Objekte frei.
Die Eigenverantwortung des Programmieres beginnt dann, wenn er ein Objekt erstellt und diesem keinen Owner zuweist. So ein Objekt muss zwingend expilizit freigegeben werden.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#3

AW: Frames

  Alt 11. Feb 2018, 16:17
http://www.delphipraxis.net/195186-d...ml#post1393576

Grundsätzlich solltest du auch den Punkt unter ODER bedenken
und die solche golbalen Variablen/Verknüpfungen vermeiden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz