AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ist meine TPageControl-Philosophie richtig?

Offene Frage von "himitsu"
Ein Thema von Der schöne Günther · begonnen am 9. Dez 2014 · letzter Beitrag vom 29. Dez 2014
Antwort Antwort
Seite 1 von 3  1 23   
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 20:37
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.
  • Ist das Umschalten der Seiten über ein TPageControl Quatsch?
  • Warum flackern die Grafiken (trotz DoubleBuffered) so irrsinnig?
  • Ich erstelle Layouts immer über TGridPanels. Gibt es bessere Methoden?
  • Sonst irgendwelche Dummheiten?

Ja, es ist eine .zip zum Runterladen. Aber ich verspreche, es geht schnell
beispielbild.png
Angehängte Dateien
Dateityp: zip archive.zip (717,5 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#2

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 21:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 21:58
Ein paar Sachen fallen schon auf
Delphi-Quellcode:
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;
kann man auch ganz einfach so schreiben
Delphi-Quellcode:
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 schon wird es wurscht, wieviele Seiten dein PageControl hat.

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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 22:11
Keine Frames und nur eine Form.
Gerade das würde ich niemals aufgeben: Das Aufsplitten in Frames macht die Sachen übersichtlicher, lässt einen einfacher Oberflächen-Teilbereiche bearbeiten und vor allem lässt es sich schnell direkt wiederverwenden. Wie oft habe ich schon eine fertige Anzeige zur Verteilung von Schokoladensplittern in Keksen in anderen Anwendungen und Seiten wieder verwendet

[...]kann man auch ganz einfach so schreiben[...]Wenn du hier stärker trennen würdest (Anzeige und Logik), dann wäre das wesentlich flexibler und auch einfacher in der Handhabung.
Vielen Dank für deine wie immer ausführliche Antwort. Aber das war mir klar, so würde ich das "in Echt" auch nicht machen
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!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 23:21
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 9. Dez 2014 um 23:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 9. Dez 2014, 23:49
Warum flackern die Grafiken (trotz DoubleBuffered) so irrsinnig?
Bei mir flackern die Grafiken weder mit noch ohne DoubleBuffered.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 10. Dez 2014, 08:17
Warum flackern die Grafiken (trotz DoubleBuffered) so irrsinnig?
Bei mir flackern die Grafiken weder mit noch ohne DoubleBuffered.
Selbiges gillt für mich. Win 8.1 64 Bit.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 10. Dez 2014, 09:03
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.
Das hatte ich mir auch schon überlegt. Ich hatte bislang Sorge dass das zu lange dauert. Mit dem PageControl habe ich alle Seiten ja nur einmal erstellt und dann für immer griffbereit.

Bei mir flackern die Grafiken weder mit noch ohne DoubleBuffered.
Ich habe hier einmal eine .GIF-Animation hochgeladen: Beim Vergrößern/Verkleinern flackert es so wild dass die Grafik vielleicht nur noch in 2/3 der Zeit überhaupt angezeigt wird. Ich habe es auf einem halben Dutzend Systemen von Win7-Win10 ausprobiert, es ist überall so.


Wenn ich auf die alte Windows 2000-Oberfläche zurückschalte dann natürlich nicht
Angehängte Dateien
Dateityp: zip flicker.zip (1,20 MB, 33x aufgerufen)

Geändert von Der schöne Günther (10. Dez 2014 um 09:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 10. Dez 2014, 12:30
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?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (10. Dez 2014 um 12:45 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Ist meine TPageControl-Philosophie richtig?

  Alt 22. Dez 2014, 12:55
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:17 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