Delphi-PRAXiS

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/)
-   -   Übereinanderliegende Panels im Formulardesigner (https://www.delphipraxis.net/167106-uebereinanderliegende-panels-im-formulardesigner.html)

idefix2 13. Mär 2012 17:15

Übereinanderliegende Panels im Formulardesigner
 
Hallo,

ich möchte nicht wegen jeder möglichen Eingabe ein neues Fenster aufmachen. Wa sich nach meinem Dafürhalten sehr gut macht, sind mehrere übereinanderliegende Panels, von denen immer das gerade Relevante visible gesetzt wird. Funktioniert zur Laufzeit wunderbar, aber treibt mich im Formulardesigner zum Wahnsinn, weil die verschiedenen Controls dann übereinander liegen, alle mehr oder weniger sichtbar, und man sich überhaupt nicht auskennt.

Habt ihr Vorschläge, wie man das lösen könnte? Gibt es eine Möglichkeit, zur Design-Zeit Panels ein- und auszublenden? Ich habe schon daran gedacht, das Formular so gross zu machen, dass die Panels nebeneinander Platz haben, und erst zur Laufzeit die Formulargrösse und die Position der Panels so zu setzen, wie sie gehören, aber das ist auch eher mühsam, und vor allem bei jeder Änderung fehleranfällig.

Keldorn 13. Mär 2012 17:21

AW: Übereinanderliegende Panels im Formulardesigner
 
Hallo,

ich nehm da immer ein pagecontrol und blende mit
Delphi-Quellcode:
Procedure Proc_PagecontrolAlleReiterAusBlenden(Pagecontrol:Tpagecontrol);
Var I:integer;
begin
  for i:=0 to PageControl.PageCount-1 do
    PageControl.Pages[i].TabVisible:=false;
  PageControl.ActivePageIndex := 0;
end;
alle Tab-Reiter aus.

Gruß Frank

himitsu 13. Mär 2012 17:57

AW: Übereinanderliegende Panels im Formulardesigner
 
Damit es zur Designzeit genauso aussieht, wie zur Laufzeit, würde ich die Taps gleich im OI abstellen.
Umblättern kann man ja dennoch, über das Kontextmenü oder über den OI.

idefix2 13. Mär 2012 22:23

AW: Übereinanderliegende Panels im Formulardesigner
 
Danke, das ist eine sehr gute Lösung. Ich wusste nicht, das man bei einem Pagecontrol die Tabreiter ganz einfach ausblenden kann.

Popov 13. Mär 2012 22:40

AW: Übereinanderliegende Panels im Formulardesigner
 
Ist zwar veraltete Technik und, auch wenn ich selbst es schon lange nicht mehr genutzt habe, konnte mir bisher keiner einen guten Grund nennen wieso TNotbook nicht für so was aus der Versenkung geholt werden darf.

himitsu 13. Mär 2012 23:05

AW: Übereinanderliegende Panels im Formulardesigner
 
Ich geb's zu, ich hab früher auch TNotebook verwendet, aber davon ist abzuraten, da dessen Komponentenverwaltung eher grauenhaft ist.

http://www.delphipraxis.net/138334-t...gecontrol.html

PS: Wenn sowas wie "Abwärtskompatibilität" in der Beschreibung auftaucht, sollte man sich besser einen aktuelleren Weg raussuchen, denn es gibt bestimmt einen Grund, warum es das "eigentlich" nicht mehr gibt.

mz23 14. Mär 2012 06:56

AW: Übereinanderliegende Panels im Formulardesigner
 
Zitat:

Zitat von idefix2 (Beitrag 1156368)
Hallo,

ich möchte nicht wegen jeder möglichen Eingabe ein neues Fenster aufmachen. Wa sich nach meinem Dafürhalten sehr gut macht, sind mehrere übereinanderliegende Panels, von denen immer das gerade Relevante visible gesetzt wird. Funktioniert zur Laufzeit wunderbar, aber treibt mich im Formulardesigner zum Wahnsinn, weil die verschiedenen Controls dann übereinander liegen, alle mehr oder weniger sichtbar, und man sich überhaupt nicht auskennt.

Habt ihr Vorschläge, wie man das lösen könnte? Gibt es eine Möglichkeit, zur Design-Zeit Panels ein- und auszublenden? Ich habe schon daran gedacht, das Formular so gross zu machen, dass die Panels nebeneinander Platz haben, und erst zur Laufzeit die Formulargrösse und die Position der Panels so zu setzen, wie sie gehören, aber das ist auch eher mühsam, und vor allem bei jeder Änderung fehleranfällig.

Ich würde nur ein Panel verwenden. Dann einen

Delphi-Quellcode:

const maxPanels = 2; {your choice here}
type TmyPanels = record
                  ...
                  myCaptions : array[0..maxPanels-1] of string[128];
                  myActiveCaption : byte;
                  ...
                  end; {record}
var  myPanels : TmyPanels;
const myPanelsSize = SizeOf(myPanels);

procedure TForm1.FormCreate(...
begin
...
with myPanels do begin
     myCaptions[0]:='...';
     ...
     myCaptions[maxPanels-1]:='...';
     myActiveCaption:=0;
     ...
     Panel1.Caption:=myCaptions[myActiveCaption];
end; {with}
...
end;
Schöne Grüße aus Nürnberg,
Manfred

Furtbichler 14. Mär 2012 07:16

AW: Übereinanderliegende Panels im Formulardesigner
 
Die Pagecontrol-Variante hat diverse direkt nutzbare Vorteile, beispielsweise kann man damit einen Wizzard sehr einfach umsetzen.

Ich verwende die Pagecontrols gerne, um einen komplexen Setup-Dialog zu implementieren: Links die Baumansicht der Setupkategorien und rechts für jeden Baumknoten die entsprechende Seite. Entweder hinterlege ich im Tag des Baumknotens den Pageindex oder gleich einen Verweis auf die Seite. Im OnChange-Event der Treeview kann ich dann die entsprechende Seite mit einem Einzeiler darstellen.

Mittlerweile tendiere ich jedoch zur Verwendung von Frames. Hat irgendwie mehr mit OOP zu tun und SRP und so. Anstatt alle Controls auf verschiedene Seiten eines Pagecontrols in ein einziges Formular zu packen (und damit das Formular völlig zu überladen), erstelle ich mir lauter kleine Frames und instantiiere sie zur Laufzeit (oder pack sie trotzdem auf ein Pagecontrol).

Vermutlich ist ein Mittelding eine sehr gute Lösung: Ein Pagencontrol mit Seiten für jedes 'Panel' und pro 'Panel' ein eigenes Frame.

Dann hat man im eigentlichen Dialog ein kompaktes Framework für einen 'Wizzard' oder 'komplexen Setup-Dialog', den man sehr leicht erweitern und wiederverwenden kann. Die Dialoge scheren sich ja nicht bzw. kaum um den konkreten Inhalt der einzelnen Datenframes.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr.

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