| Autor |
Beitrag |
Klaudius
Hält's aus hier
Beiträge: 8
Win XP
D7
|
Verfasst: So 03.07.05 15:33
Hallo,
ich möchte gerne die Größe der einzelnen TabSheets speichern, um diese in einer Ini als defaultwerte zu speichern.
Leider funktioniert das nur mit der Breite, nicht aber mit der Höhe.
Bei OnResize speichere ich die Werte
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.PageControl1Resize(Sender: TObject); begin case PageControl1.ActivePageIndex of 0: begin Page1W := Form1.Width; Page1H := Form1.Height; end; 1: begin Page2W := Form1.Width; Page2H := Form1.Height; end; 2: begin Page3W := Form1.Width; Page3H := Form1.Height; end; 3: begin Page4W := Form1.Width; Page4H := Form1.Height; end; end; end; |
Und bei Change will ich die Werte benutzen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.PageControl1Change(Sender: TObject); begin case PageControl1.ActivePageIndex of 0: begin Form1.Width := Page1W; Form1.Height := Page1H; end; 1: begin Form1.Width := Page2W; Form1.Height := Page2H; end; 2: begin Form1.Width := Page3W; Form1.Height := Page3H; end; 3: begin Form1.Width := Page4W; Form1.Height := Page4H; end; end; end; |
Warum funktioniert das nur mit der Breite ?
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
sahib
      
Beiträge: 117
Win 2000 SP4+
Delphi 5 Prof.
|
Verfasst: So 03.07.05 16:55
Hi.
Die Breite und Höhe der einzelnen TabSheets sind für Dich uninteressant. Warum? Die Abmessungen sind automatisch durch das Parent, TPageControl, vorgegeben. Du brauchst also nur dessen Abmessung abzuspeichern. Teste dies einfach, indem Du im OI bei einem TabSheet manuell die Maße anpasst. Das wird nicht funktionieren.
Christian
|
|
Klaudius 
Hält's aus hier
Beiträge: 8
Win XP
D7
|
Verfasst: So 03.07.05 17:33
Hi sahib,
Warum soll das nicht funktionieren ?
So funktioniert es ja auch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.PageControl1Change(Sender: TObject); begin case PageControl1.ActivePageIndex of 0: begin Form1.Width := 300; Form1.Height := 300; end; 1: begin Form1.Width := 400; Form1.Height := 400; end; 2: begin Form1.Width := 500; Form1.Height := 500; end; 3: begin Form1.Width := 600; Form1.Height := 600; end; end; end; |
Nur will ich keine festen Werte eintragen, sondern die nach einem OnResize aktuellen Werte.
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
StefanH
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: So 03.07.05 19:10
ich denke, es reicht, wenn du Align von deinem PageControl auf alClient setzt, das dürfte geanu das sein, was du willst
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
Klaudius 
Hält's aus hier
Beiträge: 8
Win XP
D7
|
Verfasst: So 03.07.05 21:09
| Zitat: | | ich denke, es reicht, wenn du Align von deinem PageControl auf alClient setzt, das dürfte geanu das sein, was du willst |
Das habe ich schon gemacht.
Im PageControl.OnResize Ereignis werden die Height und Width Werte der einzelnen Pages korrekt in den Variablen gespeichert. Das habe ich überprüft.
Aber beim PageControl.Change Ereignis werden nur die gespeicherten Width Werte benutzt, nicht aber die Height Werte.
Die Höhe bleibt immer gleich der zuletzt eingestellten.
Egal auf welcher Page. Das ist das, was ich nicht verstehe. Warum funktioniert es nur mit Konstanten und nicht mit Variablen ?
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mo 04.07.05 08:04
Die ganzen TabSheets auf dem PageControl haben doch alle die gleiche Breite/Höhe und werden automatisch an die Größe des PageControls angepasst. Verstehe nicht warum du die Breite/Höhe der TabSheets speichern willst.
Lg Martin
|
|
Klaudius 
Hält's aus hier
Beiträge: 8
Win XP
D7
|
Verfasst: Mo 04.07.05 16:13
Hallo,
ich habe den o.g. Code gerade mal im Debugger laufen lassen und habe die Ursache gefunden, leider aber immer noch keine Lösung für mein Problem.
Im OnResize bei entsprechender aktiver Page, werden Höhe und Breite erfasst.
Wenn dann die Page gewechselt wird, tritt das Change ein und der erste Wert (Breite) wird geändert. Sofort danach tritt dann wieder OnResize ein, da die Breite sich geändert hat. Wenn dann zu Change zurückgesprungen wird, ist der Wert der Höhe bereits von OnResize auf die z.Z aktuelle geändert worden.
Gibt es vielleicht noch eine andere Möglichkeit, Änderungen von Höhe/Breite einer Form zu erfassen ? 
|
|
sahib
      
Beiträge: 117
Win 2000 SP4+
Delphi 5 Prof.
|
Verfasst: Mo 04.07.05 18:33
Was möchtest Du denn jetzt genau? In Deinem einleitenden Code reagierst Du auf das Resize des PageControls und im letzten Post schreibst Du von der Form im allgemeinen.
Schreib doch einfach einmal, was Du erreichen möchtest, manchesmal ist die Lösung einfacher. Übrigens, ich habe es nicht im Debugger laufen lassen, sondern stattdessen im Resize und Change eine Nachricht ausgeben lassen. Und da gab es nicht diesen alternierenden Aufruf.
Christian
|
|
Klaudius 
Hält's aus hier
Beiträge: 8
Win XP
D7
|
Verfasst: Mo 04.07.05 18:58
Hi Christian,
| Zitat: | | Was möchtest Du denn jetzt genau? In Deinem einleitenden Code reagierst Du auf das Resize des PageControls und im letzten Post schreibst Du von der Form im allgemeinen. |
Ein Resize des PageControl ist doch letztendlich ein Resize des Form, da PageControl Client von Form ist.
Auf den Pages werden verschiedene Kurven, mit verschiedenen Auflösungen dargestellt.
Wenn ich das Prog beende und später neu starte, soll die zuletzt dargestellte Kurve (Page) erscheinen (das erreiche ich über den PageIndex) mit der zuvor eingestellten Höhe und Breite (das fehlt mir noch). Ebenfall soll, wenn umgeschaltet wird auf eine andere Page, deren zuvor eingestellte Höhe und Breite erhalten bleiben.
Ich hoffe, das ist jetzt verständlich ?
|
|
sahib
      
Beiträge: 117
Win 2000 SP4+
Delphi 5 Prof.
|
Verfasst: Mo 04.07.05 22:29
Hi Klaudius.
So halbwegs verständlich, ja  Wie sieht das denn aus, wenn beim TabSheet-Wechsel das Formular ihre Größe verändert. Ich denke nicht, dass es dem User gefällt? Bei meinem Test zu Deiner Problematik war ich jedenfalls nicht angetan
Das Fenster sollte, meiner Meinung nach, konstant in der Größe bleiben. Aber ein, zwei Ideen dazu.
1) Die Graphiken nicht in ein TabSheet/PageControl schreiben, sondern in Extra-Fenster. Diese kann man beliebig anordnen und da stört eine Größenänderung nicht.
2) Die Graphiken an die Anzeigegröße anpassen, entweder durch einfaches Strecken/Stauchen, oder aber durch logarithmische Darstellung. Kommt natürlich auch auf die Daten an.
Christian
|
|