AGB  ·  Datenschutz  ·  Impressum  







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

GUI-Design

Ein Thema von MarkusB · begonnen am 9. Dez 2004 · letzter Beitrag vom 11. Dez 2004
 
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#4

Re: GUI-Design

  Alt 11. Dez 2004, 22:14
Moin!

Vielen Dank für Eure prompten Antworten. Inzwischen habe ich Eure Hinweise in ein ganz einfaches Delphi-Testprogramm umgesetzt. Über das Menü „Übersicht“ bekommt man die Tabelle zu sehen und wenn man das Menü „Details“ anklickt, sieht man einzelne Felder eines Datensatzes. Ganz genau so wie ich das in meinem Posting beschrieben habe. Super!

Und so wurde es implementiert (1 Form und 2 Frames):
Im Ereignis „OnCreate“ der Main-Form werden 2 Frames erzeugt: „View“ und „Details“. Am Anfang sind beide unsichtbar. Danach, abhängig vom angeklickten Menü werden die Frames entsprechend sichtbar oder unsichtbar gemacht:.

Delphi-Quellcode:
procedure TForm1.ShowViewFrame(Sender: TObject);
begin
   if DetailsFrame.Visible
   then DetailsFrame.Hide;

   ViewFrame.Show;
end;

procedure TForm1.ShowDetailsFrame(Sender: TObject);
begin
   if ViewFrame.Visible
   then ViewFrame.Hide;

   DetailsFrame.Show;
end;
Dadurch bekommt man den Effekt des Frame-Austauschens. Wenn man sich im „View“-Frame befindet, dann kann man das Menü „Details“ oder auch den Button „Details“ benutzen um zu dem Frame „Details“ zu gelangen. Im letzen Fall simuliere ich das „Anklicken“ des Menü „Details“:

Delphi-Quellcode:
procedure TViewFrame.Button1Click(Sender: TObject);
begin
   Form1.MainMenu1.Items[0].Click;
end;
Und umgekehrt wenn man sich im „Details“-Frame befindet, dann kann man das Menü „View“ oder auch den Button „View“ benutzen um zu dem Frame „View“ zu gelangen. Im letzen Fall simuliere ich das „Anklicken“ der Menü „View“ (ähnlich wie oben).

So kann man zwischen den Frames wechseln. Prima! Nun könnte ich weitere Frames definieren und in Programm einbinden. Könnte ich machen, aber .... J. Das wurde dazu führen, dass im Falle eines größeren Programms ich unzählige Frames beim seinem Start erstellen müsste. Und das gefiel mir nicht so ganz ...

Implementierung mit einer Form:
Ich habe in der Form eine public Variable LocalFrame (TFrame) definiert. Jetzt werden die unterschiedlichen Frames zu der Laufzeit dynamisch, einzählend (ein Frame zur Zeit und nur dann wenn sie tatsächlich gebraucht werden) erstellt und der Variablen „LocalFrame“ zugewiesen. Das geschieht wenn man das entsprechende Menü anklickt:

Delphi-Quellcode:
procedure TForm1.ShowViewFrame(Sender: TObject);
begin
   if Assigned(LocalFrame)
   then LocalFrame.Destroy;

   LocalFrame := TViewFrame.Create(self);
   LocalFrame.Parent := Form1;
   LocalFrame.Show;
end;

procedure TForm1.ShowDetailsFrame(Sender: TObject);
begin
   if Assigned(LocalFrame)
   then LocalFrame.Destroy;

   LocalFrame := TDetailsFrame.Create(self);
   LocalFrame.Parent := Form1;
   LocalFrame.Show;
end;
Funktioniert perfekt bis man auf die Idee kommt die Buttons zum Wechseln der Frames zu benutzen (Funktion wie oben). Dann nämlich kriegt man die Exception um die Ohren gehauen und das zu Recht. Beim OnClick Ereignis des Buttons (der auf der Frame liegt) wird die Funktion ShowXXXFrame (die in der MainForm definiert ist) aufgerufen. Sie beinhaltet eine Reihe von Anweisungen und löst eine Reihe von Aktionen aus. Unter anderem wird der Frame vom Button zerstört (LocalFrame.Destroy). Nach Abarbeitung aller Anweisungen in ShowXXXFrame kehrt das Programm in die OnClick-Funktion des Buttons zurück und das geht nicht gut, weil sie mitsamt dem ganzen Frame verschwunden ist - deswegen die Exception.

Ufff – da hab ich viel erzählt. Nun meine Frage: wie kann ich ein Frame löschen und gleichzeitig einen neuen erstellen und am Schirm anzeigen. Beide Frames sollten der gerade freigewordenen Variablen zugewiesen werden. Die Schwierigkeit, die ich damit habe ist, dass die ganze Aktion aus dem zu zerstörendem Frame herausgestartet werden soll - zum Beispiel durch Anklicken eines Buttons der auf dem Frame liegt.

Viele Grüße
Markus
  Mit Zitat antworten Zitat
 


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 04:47 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