![]() |
Dynamisch erzeugtes Frame freigeben ...
Hallo,
folgendes Szenario habe ich zu lösen: in einem Form gibt es links einen Treeview mit vielen Einträgen. Wenn ein Eintrag davon gewählt wird, soll rechts daneben ein zugeordetes Frame angezeigt werden. In diesem Frame hat der Benutzer verschiedene Möglichkeiten wie z.B. Anmelden an Datenbank, Suche nach Kunden/Personen ... Und nun zum eigentlichen Problem: Wenn nun etwa das Frame für das Login im Main-form geladen ist, und der Benutzer gibt seine Anmeldedaten ein und klickt auf einen Butten "Anmelden" soll nach korrekter Eingabe der Anmeldedaten ein neues Frame (z.B. die Kundensuche) geladen und natürlich das Frame "Login" entfernt/gelöscht werden. Dabei tritt aber immer eine Zugriffsverletzung auf, weil ich im Event des Buttons "Anmelden" das selbe Frame natürlich nicht mit Free löschen kann.
Delphi-Quellcode:
Hat jemand dazu eine Idee, einen Vorschlag?
procedure Tfr_login.Button1Click(Sender: TObject);
begin //prüfe Logindaten .... if login = true then begin //Lade neues Frame (Kundensuche) Free; end; end; Liege ich mit einem Frame hier vielleicht falsch? Vielen Dank für Eure Unterstützung und Grüße aus Wien Rudi Hinweis dazu: da es eine komplexe Anwendung ist/wird und viele verschiedene Eingabemasken bzw. Anzeigen gibt habe ich absichtlich keine PageControl-Komponente verwendet. [edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen, Danke. :-) Mfg, Daniel[/edit] |
Re: Dynamisch erzeugtes Frame freigeben ...
1. Du legst Dir eine Variable
Delphi-Quellcode:
an zentraler Stelle an (im Hauptformular oder einer gemeinsamen Unit)
CurrentFrame : TTntFrame;
2 .Du legst im Hauptformular ein Panel als Container für die Frames an. 3. Die TreeView-Click-Funktion:
Delphi-Quellcode:
4. Jedes Frame verfügt über eine statische ShowMethode:
procedure TDPR00001Form1.MenuTreeClick(Sender: TObject);
begin if CurrentFrame <> nil then begin CurrentFrame.Free; CurrentFrame := nil; end; if MenuTree.Selected.Text = _('Logintabelle') then begin TDPR001Frame1.ShowFrame(Panel1); exit; end; if MenuTree.Selected.Text = _('Sprache') then begin TDPR001Frame14.ShowFrame(Panel1); exit; end; ... end;
Delphi-Quellcode:
5. Schliesen des Frames vom Frame aus:
public
class procedure ShowFrame(_Parent : TWinControl); end; ... class procedure TDPR001Frame4.ShowFrame(_Parent: TWinControl); begin DPR00001Form1.CurrentFrame := TDPR001Frame4.Create(_Parent); with TDPR001Frame4(DPR00001Form1.CurrentFrame) do begin Parent := _Parent; Align := alClient; end; end;
Delphi-Quellcode:
6. Das Gegenstück im Hauptformular
procedure TDPR001Frame4.ButtonFrameCloseClick(Sender: TObject);
begin PostMessage(Application.MainForm.Handle,WM_USER+3333,0,0); end;
Delphi-Quellcode:
procedure OnCloseFrame(var _Msg : TMessage); message WM_USER+3333;
... procedure TDPR00001Form1.OnCloseFrame(var _Msg: TMessage); begin if CurrentFrame <> nil then begin CurrentFrame.Free; CurrentFrame := nil; end; end; |
Re: Dynamisch erzeugtes Frame freigeben ...
Achso, nicht wundern. Ich nutze die Tnt-Controls
Musst alles wieder durch normale Controls ersetzen |
Re: Dynamisch erzeugtes Frame freigeben ...
Wow, das ging aber flott :)
Danke schön, werd mich dann gleich darüber stürzen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 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