Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frams in Delphi (https://www.delphipraxis.net/56345-frams-delphi.html)

fredi 4. Nov 2005 11:07


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?

tigerman33 4. Nov 2005 11:15

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.

fredi 4. Nov 2005 12:10

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

Union 4. Nov 2005 12:14

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;

fredi 4. Nov 2005 12:29

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;

tigerman33 4. Nov 2005 13:38

Re: Frams in Delphi
 
Zitat:

Zitat von fredi
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.

Eben, das ist ja genau der Punkt. :wink:
Wenn du einfach die Formklasse TEingabeForm erstellst (ganz normal im Objektinspektor) kannst du von dieser Klasse zur Laufzeit beliebig viele Instanzen erzeugen:
Delphi-Quellcode:
var AForm: TEingabeForm;
begin
  ...
  AForm := TEingabeForm.Create(nil);
  // Sachen initialisieren, wenn nötig
  AForm.Show;
end;
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.
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.

fredi 7. Nov 2005 10:58

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:
   procedure TEingabeForm.FormClose(Sender: TObject;
     var Action: TCloseAction);
   begin
    Free;
   end;
2. CloseQuery Ereignis:
Delphi-Quellcode:
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;
Ich bekomme dabei eine Zugriffsverletzung.

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]

Union 7. Nov 2005 11:01

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.

fredi 7. Nov 2005 11:05

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

Union 7. Nov 2005 11:09

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.
Seite 1 von 2  1 2      

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