Autor Beitrag
Klaudius
Hält's aus hier
Beiträge: 8

Win XP
D7
BeitragVerfasst: 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
ausblenden 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

ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
sahib
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
D7
BeitragVerfasst: So 03.07.05 17:33 
Hi sahib,
Warum soll das nicht funktionieren ?
So funktioniert es ja auch:
ausblenden 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; //Page1W;
        Form1.Height := 300; //Page1H;
      end;
    1: begin
        Form1.Width := 400; //Page2W;
        Form1.Height := 400; //Page2H;
      end;
    2: begin
        Form1.Width := 500; //Page3W;
        Form1.Height := 500; //Page3H;
      end;
    3: begin
        Form1.Width := 600; //Page4W;
        Form1.Height := 600; //Page4H;
      end;
  end;
end;


Nur will ich keine festen Werte eintragen, sondern die nach einem OnResize aktuellen Werte.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: 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