![]() |
Ist meine TPageControl-Philosophie richtig?
Liste der Anhänge anzeigen (Anzahl: 2)
Noch ein paar Monate, dann bin ich schon zwei Jahre Delphi-Land. Aber ich bin mir immer noch unsicher, ob ich VCL-Oberflächen eigentlich richtig baue.
Ich möchte euch deshalb einmal eine sehr kleine Oberfläche (drei hastig zusammengeklickte Seiten) zeigen und wissen, was Ihr dazu meint.
Ja, es ist eine .zip zum Runterladen. Aber ich verspreche, es geht schnell :duck: Anhang 42286 |
AW: Ist meine TPageControl-Philosophie richtig?
Ich nutze auch sehr gerne das PageControl, um "Seiten" zu verwalten.
Ja, ich nutze gewiss das PageControl statt das Notebook. An sich finde ich deine Idee mit deiner GUI aus Frames und Forms ganz nett, aber das muss wohl sehr zeitaufwändig in der Pflege sein. Ich nutze bei solchen Sachen immer ein PageControl mit mehreren "Seiten", blende die Tabs aus und ersetze die durch eine ListBox. Keine Frames und nur eine Form. Jetzt noch schön die Funktionalität von der Oberfläche trennen und alles ist super. |
AW: Ist meine TPageControl-Philosophie richtig?
Ein paar Sachen fallen schon auf
Delphi-Quellcode:
kann man auch ganz einfach so schreiben
procedure TMainForm.bottomFramenextPageButtonClick(Sender: TObject);
begin if (mainPageControl.ActivePage = firstSheet) then begin topFrame.ProgressString := '2/3'; mainPageControl.ActivePage := secondSheet end else if (mainPageControl.ActivePage = secondSheet) then begin topFrame.ProgressString := '3/3'; mainPageControl.ActivePage := thirdSheet; end; end; procedure TMainForm.bottomFramepreviousPageButtonClick(Sender: TObject); begin if (mainPageControl.ActivePage = thirdSheet) then begin topFrame.ProgressString := '2/3'; mainPageControl.ActivePage := secondSheet end else if (mainPageControl.ActivePage = secondSheet) then begin topFrame.ProgressString := '1/3'; mainPageControl.ActivePage := firstSheet; end; end; procedure TMainForm.FormCreate(Sender: TObject); begin mainPageControl.ActivePage := firstSheet; topFrame.ProgressString := '1/3'; firstPageFrame.initGUI(); end;
Delphi-Quellcode:
Und schon wird es wurscht, wieviele Seiten dein PageControl hat.
procedure TMainForm.UpdateProgress;
begin topFrame.ProgressString := Format( '%d/%d',[ mainPageControl.TabIndex, mainPageControl.PageCount ] ); end; procedure TMainForm.mainPageControlChange( Sender : TObject ); begin UpdateProgress; end; procedure TMainForm.bottomFramenextPageButtonClick(Sender: TObject); begin if mainPageControl.TabIndex < mainPageControl.PageCount - 1 then mainPageControl.TabIndex := mainPageControl.TabIndex + 1; end; procedure TMainForm.bottomFramepreviousPageButtonClick(Sender: TObject); begin if mainPageControl.TabIndex > 0 then mainPageControl.TabIndex := mainPageControl.TabIndex - 1; end; procedure TMainForm.FormCreate(Sender: TObject); begin mainPageControl.ActivePage := firstSheet; firstPageFrame.initGUI(); UodateProgress; end; Und damit wären wir auch schon beim wieviel bzw. was. Wenn du hier stärker trennen würdest (Anzeige und Logik), dann wäre das wesentlich flexibler und auch einfacher in der Handhabung. In ein PageControl kann man so ziemlich alles eindocken. Formulare, Panels, ... Wenn man jetzt im Hintergrund ein Liste mit Instanzen hat und jedem Klassentyp eine bestimmtes Control (Form, Panel, etc.) zuordnet, dann kann man zu jedem Klassentyp das passende Control erzeugen, die Instanz zuweisen und in das PageControl eindocken. Und schon ist es völlig Wurscht, was dort angezeigt wird. |
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
Zitat:
Mir ging es rein um die VCL-Komponenten, das war nur der notwendigste Code um sich überhaupt durchklicken zu können. Aber darauf wollte ich nicht hinaus. Die TComponent/TControl/TWinControl-Hierarchie glaube ich auch grob verstanden zu haben. Aber vielleicht ist ja beispielsweise das Layout mittels TGridPanel/FlowPanel Quatsch und es gibt besseres? Vor allem das TPageControl selber: Aufgrund der Tatsache dass der Inhalt (Grafiken, Radiogroups) so derbe flackern mache ich ja garantiert etwas falsch! |
AW: Ist meine TPageControl-Philosophie richtig?
Kannst Du mal ein Video zeigen, was da wie flackert?
Mit XE3 konnte ich das nicht starten. Mir schien die GUI sehr verschachtelt. Wenn Du die Sichten umschaltest, könntest Du vielleicht auch einfach den aktuellen Frame zerstören und dann Frame1, 2 oder 3 erzeugen und in das Formular einsetzen. EDIT: Oder lade mal die Exe hoch. |
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
|
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
|
AW: Ist meine TPageControl-Philosophie richtig?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Wenn ich auf die alte Windows 2000-Oberfläche zurückschalte dann natürlich nicht :stupid: |
AW: Ist meine TPageControl-Philosophie richtig?
Ach so, ich dachte beim Umblättern würde es flackern...
(Zum möglichen Grund kann ich nichts sagen.) EDIT: Laufen Deine Systeme in einer VM und/oder auf einer sehr lahmen Kiste? |
AW: Ist meine TPageControl-Philosophie richtig?
Hat denn niemand eine Ahnung? Ich schäme mich, so etwas peinliches bald ausliefern zu müssen. Was tut Ihr, damit eure TImages nicht flackern?
|
AW: Ist meine TPageControl-Philosophie richtig?
Lade doch mal eine Exe hoch.
Vielleicht liegt es ja am Betriebssystem oder Hardware? |
AW: Ist meine TPageControl-Philosophie richtig?
Liste der Anhänge anzeigen (Anzahl: 1)
Nee. Das ist auf verschiedenen Rechnern und seit ich bei Delphi dabei bin (XE4) so.
Trotzdem einmal hier: Ich habe hier einfach ein paar TImages auf ein Gridpanel auf ein PageControl gepappt. Ab einer bestimmten Fenstergröße müsste ich mit dem Programm eine medizinische Warnung für Epileptiker ausliefern! |
AW: Ist meine TPageControl-Philosophie richtig?
Hi Günther, hab eben dein Programm ausprobiert in einer VM (Win7-32), das zuckt kurz ein bißchen, wenn man die TabSheets umschaltet, aber das ist nicht wirklich ein Flimmern, die Grafiken müssen ja jedesmal neu gezeichnet werden. Mit anderen Worten: ich kann na nichts Beschämendes dran finden ... :?
|
AW: Ist meine TPageControl-Philosophie richtig?
Hallo - Danke fürs Ausprobieren :thumb:, aber ich sollte es immer dick dazuschreiben: Beim Verändern der Größe des Fensters. Da flackert es dass fast nichts mehr sichtbar ist!
|
AW: Ist meine TPageControl-Philosophie richtig?
Bei einer Größenänderung des Formulars flackert es etwas ab einer bestimmten Größe.
Ich denke, das ist halt so bei VCL. Damit kann man m.E. leben. |
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
|
AW: Ist meine TPageControl-Philosophie richtig?
Auf meinem privaten Rechner flackert es ziemlich extrem - zumindest wenn ich das Formular über alle 3 Monitore vergrößere ;-)
Anzufangen mit Flackern fängt es bei der Größe von knapp 1 Monitor. |
AW: Ist meine TPageControl-Philosophie richtig?
Richtig! Bei kleinen Fenstern ist fast nichts zu sehen, aber ab irgendeiner magischen Größe wird es wirklich extrem. Danke- Ich hatte schon Angst alle halten mich für verrückt. :roteyes:
Zitat:
|
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
|
AW: Ist meine TPageControl-Philosophie richtig?
Hab jetzt nicht alles gelesen. Hast du schon probiert das PageControl auf DoubleBuffered zu setzen?
|
AW: Ist meine TPageControl-Philosophie richtig?
Zitat:
DoubleBuffered ist kein Allheilmittel, es kann sogar zum Gift werden. Vorallem bei vielen schnellen Zeichenoperatationen (inkl. Ausgabe) und ganz schlimm wird es bei Transparenzen und abgerundeten Ecken (also auch transparenten Bereichen). Dieses Flackern entsteht, wenn Ausgaben gemacht werden und vorher alles gelöscht wird, z.B. durch übermalen des Hintergrundes usw. Besonders schlimm wird wes, wenn die Zeichenoperationen immer langsamer werden, also bei vielen Komponenten neben und vorallem übereinander. Meine Lösung dagegen: Man verwende garnicht erst solche Komponenten wie TImage und mache es selber (TPaintBox), aber selbst das hilft nicht immer, wenn die Parentkomponenten das Hauptprobem sind. |
AW: Ist meine TPageControl-Philosophie richtig?
|
AW: Ist meine TPageControl-Philosophie richtig?
Du hast es bereits mit DoubleBuffered versucht?
Ja, aber Welches? (bei welcher/welchen Komponenten) |
AW: Ist meine TPageControl-Philosophie richtig?
Ggf. ein Bitmap zwischenschalten. Dann sieht man die einzelnen Zeichenoperationen schon mal nicht mehr. Denke mal du machst da ein FillRect über das ganze ClipRect, sonst würd da nix flackern? Und wie gesagt, evtl. das PageControl doch auf DoubleBuffered setzen.
|
AW: Ist meine TPageControl-Philosophie richtig?
Doublebuffered in allen Permutationen. Form an, Pagecontrol aus. Form aus, Pagecontrol an. Usw.
Und nein, ich mache überhaupt nichts: Ich setze ein Image auf ein Pagecontrol auf ein Formular. Das reicht schon aus um Epileptiker ins Krankenhaus zu befördern :cheers: |
AW: Ist meine TPageControl-Philosophie richtig?
Eventuell kann man auch bei einigen der Komponenten gewisse Optionen ala ParentBackground/ParentColor deaktivieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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