![]() |
Frams in Delphi
die Delphi-Hilfe und auch das mitgelieferte Beispiel sind leider nicht wirklich Aussagekräftig, deshalb suche ich nach einem Beispiel wo das Handling mit Frames gut ersichtlich ist.
Was ich machen möchte: Ich gestalte ein Frame mit allen objekten wie TEdit, TMemo, etc und möchte darauf auch gleich alle Funktionalitäten für das Datenhandling vom editieren bis zum Speichern und Löschen unterbringen. Nun möchte ich aus einer Haupliste heraus beliebig viele Fenster zum Bearbeiten der Daten erstellen. zum Beispiel: Kunde1-->Frame1, Kunde2-->Frame2 usw. Wobei ich jedes Frame als eigene Form am Bildschirm darstellen möchte, wo man die Form dann herumschieben kann, etc. geht das? |
Re: Frams in Delphi
Warum nimmst du dann nicht gleich ein Form, anstelle eines Frames? Frames sind sozusagen "Forms im Form", so dass du ähnliche Benutzeroberflächen, die alle gewisse gemeinsame Elemente haben, nicht jedesmal neu erstellen musst, sondern sozusagen in einem Frame zentral speichern kannst.
|
Re: Frams in Delphi
das ist ja genau der Punkt.
Auf einem Frame plaziere ich alle Steuerelemente, mache dann mehrer Form und weise diesen Forms das Frame zu. Wenn ich jetzt von meiner Mainform die einzelnen Forms aufrufe: form1.show, Form2.show haben diese Forms alle Steuerelemente drauf. Aber wie kann ich jetzt z.B. ein TEdit auf Form1 das vom Frame kommt ansprechen. Werte zuweisen? fredi |
Re: Frams in Delphi
Für den Frame existiert doch ein Objekt. Darüber kannst Du dann zugreifen, z.B.:
Delphi-Quellcode:
frameKunde.EditKdnr.Text := tblKundenKdnr.AsString;
|
Re: Frams in Delphi
das habe ich ja probiert, aber delphi kennt das frame nicht
uses Frame2Unit2, Form1Unit, Frame2Unit; {$R *.DFM} procedure TForm1.SpeedButton1Click(Sender: TObject); begin Frame2.Label1.Caption := 'jetzt bin ich auf Form1'; Form1.Show; end; |
Re: Frams in Delphi
Zitat:
Wenn du einfach die Formklasse TEingabeForm erstellst (ganz normal im Objektinspektor) kannst du von dieser Klasse zur Laufzeit beliebig viele Instanzen erzeugen:
Delphi-Quellcode:
Musst nur aufpassen, dass die Instanzen nach dem Schließen auch wieder freigegeben werden. Das lässt sich glaub ich mit dem Parameter CloseAction im OnClose-Event des Forms erreichen.
var AForm: TEingabeForm;
begin ... AForm := TEingabeForm.Create(nil); // Sachen initialisieren, wenn nötig AForm.Show; end; Das Frame ist ein Umweg hier, und "einem Form ein Frame zuweisen" funktioniert schon mal nicht, bzw. hat zumindest nicht den von dir gewünschten Effekt. |
Re: Frams in Delphi
ja das erstellen der neuen Instanzen und das Abspeichern der diversen Informationen der einzelnen Instanzen geht ja ganz gut, nur das freigeben der einzelnen Instanzen beim FormClose geht nicht. Ich bekomme immer eine Fehlermeldung.
ich habe folgende Versuche gemacht: 1. beim OnClose Ereignis
Delphi-Quellcode:
2. CloseQuery Ereignis:
procedure TEingabeForm.FormClose(Sender: TObject;
var Action: TCloseAction); begin Free; end;
Delphi-Quellcode:
Ich bekomme dabei eine Zugriffsverletzung.
procedure TEingabeForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean); begin if isChange then begin if Application.MessageBox('schließen ohne speichern ?', 'Frage', mb_YESNO)= IDYES then canClose := true else canClose := false; end else canClose := true; if canClose then free; end; Wenn ich das free weglasse, kann ich ohne Probleme die Form schließen, jedoch vermute ich, daß die Instanz im Hintergrund offen bleibt. Wie kann ich die einzelnen Form auflösen? fredi [edit=MrSpock]Delphi Codes eingefügt. Mfg, MrSpock[/edit] |
Re: Frams in Delphi
Bitte Delphi-Tags verwenden!
Im Formclose darfst Du kein Free aufrufen. Das Objekt wird normalerweise in Destroy zerstört. Wenn es dort aber schon weg ist, kommt es zu dem Fehler. |
Re: Frams in Delphi
Ok wenn ich also weder im OnClose noch im OnCloseQuery ein free verwenden kann, wo dann?
Kannst'ma ein Beispiel geben? danke Fredi |
Re: Frams in Delphi
Ein Objekt wird im Destruktor freigegeben (sollte normalerweise so programmiert sein). Dass der aufgerufen wird, teilst Du in FormClose durch Setzen der var CloseAction auf caFree mit. Du kannst ansonsten ein Objekt nicht aus sich selbst heraus "free-en".
|
Re: Frams in Delphi
ich bin jetzt von
AForm := TEingabeForm.Create(NIL); auf AForm := TEingabeForm.Create(self); gewechselt. und jetzt gibts auch bei procedure TEingabeForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree end; keine Fehlermeldung mehr. jetzt würde mich noch interessieren ob die Form aus dem Speicher draussen ist oder nicht. hat da jemand eine Prüfroutine? fredi |
Re: Frams in Delphi
Schau mal unter
![]() |
Re: Frams in Delphi
gibt es eine Möglichkeit alle vorhandenen Forms eines Projektes in einem memo aufzulisten?
|
Re: Frams in Delphi
Zitat:
1. Form : handelt nur Tastatur ab. Esc Form schließen, Return zum nächsten Feld, Zahlen rechtsbündig usw. Das Ding schiebe ich ins Repository. 2. Form : Die soll noch ein paar Edits besitzen und ich nehme sie aus dem Repository. Neu -> andere -> 1. Form aber inherited (unten die Radiogroup) !! Lege ich jetzt meine Edits auf diese Form, sonst nichts, dann haben die genau die Eigenschaften wie in der 1. Form eingeführt, z.B. mit Return ins nächste Feld. Tja und das mit dem caFree ? Das wurde gleich miteingebaut. Und zwar in die 1. Form. Bereits da steht im FormClose : Action := caFree; In der zweiten steht lediglich eventuell inherited, sofern ich da noch was anderes im FormClose tun muß. Ansonsten wird das FormClose der 1. Form ausgeführt und somit auf jeden Fall das caFree. Man darf nur das eventuell automatisch eingefügte Wort "inherited" nicht löschen. 8) |
Re: Frams in Delphi
hat jemand eine Idee wie ich auf dynamisch erstellte Formen von außen zugreifen kann,
ich möchte Formes mit einem Button am Bildschirm anordnen bzw. ablegen. Der Zugriff mit Screen.Forms[I] führt leider in eine Sackgasse, weil nach dem Ablegen die Formen nicht mehr in der Reihenfolge sind wie vorher. Es ist nicht möglich mit Screen.Forms[I] gezielt auf eine spezielle Form zuzugreiffen. Welche Möglichkeiten gibt es da? fredi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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