Entwickler-Ecke

Sonstiges (Delphi) - Minimieren und Maximieren


Handycommander - So 09.01.05 18:48
Titel: Minimieren und Maximieren
Hallo,

ich habe in meinem Form ein Memo. Nun möchte ich, wenn der Benutzer das Programm maximiert, dass sich das Memo-Feld an passt. Genauso, wenn der Benutzer das Programm minimiert. Wie kann ich das machen?

Danke und MfG

Tobias


Radioactive - So 09.01.05 18:53

du meinst verkleinert statt minimiert.
Setz die Eigenschaft Align von Memo1 auf alClient.


Radioactive - So 09.01.05 18:59

wenn du unten (oder oben) noch z.B. Buttons reinmachen willst, die dann nicht im Memo-Feld liegen, dann solltest du einen eigenen Quelltext in der Form.Resize-Methode schreiben. Hier z.B. für 2 Buttons unten:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(...);
begin
  Memo1.Left := 0;
  Memo1.Top := 0;
end;

procedure TForm1.FormResize(...);
begin
  Memo1.Width := ClientWidth;
  Memo1.Height := ClientHeight - 50;    // 50 Pixel Platz für die Buttons
  Button1.Top := ClientHeight - 10;     // Die Button sollen sich immer
  Button2.Height := ClientHeight - 10;  // 10px vom unteren Rand befinden
end;


Handycommander - So 09.01.05 19:00

Hallo,

und wenn ich jetzt 4 Memos habe, die auf dem Form wie folgt verteilt sind:

Links Oben eins, Rechts Oben eins
Links Unten eins, Rechts Unten eins

Wie kann ich das dann machen, dass sich die das ganze Form dann teilen? Also im gleichen Abstand auf dem Formular dann beim Vergrößern verteilen?

MfG

Tobias


Radioactive - So 09.01.05 19:07

Schau dir doch mal mein Beispiel an, dann müsstest du es schon schaffen!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure TForm1.FormCreate(...);
begin
  Memo1.Left := 0;
  Memo1.Top := 0;
  Memo1.Width := ClientWidth div 2;
  Memo1.Height := ClientHeight div 2;
  Memo2.Left := ClientWidth div 2;
  Memo2.Top := 0;
  Memo2.Width := ClientWidth div 2;
  Memo2.Height := ClientHeight div 2;
  Memo3.Left := 0;
  Memo3.Top := ClientHeight div 2;
  Memo3.Width := ClientWidth div 2;
  Memo3.Height := Height div 2;
  Memo4.Left := ClientWidth div 2;
  Memo4.Top := ClientHeight div 2;
  Memo4.Width := ClientWidth div 2;
  Memo4.Height := ClientHeight div 2;
end;

procedure TForm1.FormResize(...);
begin
  Memo1.Width := ClientWidth div 2;
  Memo1.Height := ClientHeight div 2;
  Memo2.Left := ClientWidth div 2;
  Memo2.Width := ClientWidth div 2;
  Memo2.Height := ClientHeight div 2;
  Memo3.Top := ClientHeight div 2;
  Memo3.Width := ClientWidth div 2;
  Memo3.Height := ClientHeight div 2;
  Memo4.Left := ClientWidth div 2;
  Memo4.Top := ClientHeight div 2;
  Memo4.Width := ClientWidth div 2;
  Memo4.Height := ClientHeight div 2;
end;


Radioactive - So 09.01.05 19:11

Sorry, habe es gerade verbessert: Nimm CientHeight statt Height (und ClienWidth statt Width), denn Height und Width gibt die Fenstergröße mit Rahmen an.


Handycommander - So 09.01.05 19:12

Danke!

Werd mich gleich mal an das Beispiel machen! :D

Ist gar nicht so schwer, wie ich es mir vorgestellt haben :roll:

MfG

Tobias


Handycommander - So 09.01.05 19:57

Irgendwie geht das bei mir nicht!
Wenn ich bei mir bei Create wie das Memo am anfang aussehen soll reinschreibe und dann bei Resize oder bei CanResize, dann ist des bei Create irgendwie ausser achtung, also es gilt immer nur das von Resize oder CanResize.

Was ist das für ein Problem?

Danke und MfG

Tobias


StefanH - So 09.01.05 20:29

setzte einfach die Anchors von deinen Memos auf [akBottom, akLeft, akRight, akTop].


Handycommander - So 09.01.05 20:42

Es klappt immer noch nicht! Ich habe das so gemacht. Sind zwar jetzt keine Memos aber trotzdem :roll:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormResize(Sender: TObject);
begin
  ShellTreeView1.Height := ClientHeight div 2 - 3;
  ShellTreeView1.Width := 201;
  ShellTreeView2.Height := ClientHeight div 2 - 3;
  ShellTreeView2.Width := 201;
  ShellListView1.Height := ClientHeight div 2 - 3;
  ShellListView1.Width := ClientWidth - 201 - 1;
  ShellListView2.Height := 100;
  ShellListView2.Width := ClientWidth - 201 - 1;
end;


Und die Anchors habe ich auch noch richtig gesetzt. Also, wenn ich das FormResize mache, dann macht der das, wie wenn da FormCreate stehen würde.

MfG

Tobias


Keldorn - So 09.01.05 21:26

ich würd das anders machen: später ist vielleicht auch mal eine eigene Größenanpassung notwendig:
also:


Programm starten, du kannst jetzt die Kontrolls durch die Splitter schön manuell in der Größe ändern und hast keine Probleme. Der User kann auch die Größe der Komponenten ändern, wenn er das wünscht, sollte besser sein als eine vorgeschriebene Größe.

Wenn du doch noch eine mittige anordnung haben willst:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormResize(Sender: TObject);
begin
  panellinks.width:=(ClientWidth div 2) -2
end;


Handycommander - Mo 10.01.05 14:53

Hallo Keldorn!

Bei mir klappt das irgendwie nicht so ganz! Ich kann den Splitter nur Vertikal machen, brauche den aber auch horizontal!

Das sollte ungefähr so aussehen:

ShellTreeView | ShellListView
--------------------------------
ShellTreeView | ShellListView

Jede Seite sollte veränderbar sein, wenn das möglich ist. :roll:
Also: Horizontal und Vertikal veränderbar.

Danke und MfG

Tobias


Keldorn - Mo 10.01.05 19:53

der splitter paßt sich an, wenn du das align setzt. bei top ist er vertikal, bei left ist er horizontal.