Problem beim Setzen der Anchors
15. Sep 2012, 00:25
Form1 enthält
1) am oberen Rand 3 TEdit, v.l.n.r. ebTextA, ebTextB, ebResult
2) darunter 3 TMemo, v.l.n.r. meTextA, meTextB, meResult
Bei manuellen Änderungen der Breite der Form (also durch Ziehen des linken oder rechten Rahmes der Form) soll die Anpassung der Breiten der Edits/Memos so erfolgen:
Die rechts liegenden Controls sollen immer ihre Breite beibehalten, deshalb sind die Anchors = akTop, akRight und beim Memo zusätzlich akBottom gesetzt.
Wenn der rechte Rand der Form gezogen wird sollen die Breiten der mittleren Controls geändert werden. Wenn die Form verschmälert wird und das mittlere Control eine bestimmte Minimumbreite erreicht hat, soll anstatt das linke Control verschmälert werden.
Umgekehrt, wenn der linke Rand der Form gezogen wird, sollen die Breiten der linken Controls geändert werden. Wenn die Form verschmälert wird und das linke Control eine bestimmte Minimumbreite erreicht hat, soll anstatt das mittlere Control verschmälert werden.
Mein Ansatz ist, im FormCanResize die Anchors der linken und rechten Controls so zu setzen, dass beim anschließenden Resize die Breiten der Edits/Memos entsprechend meinen Anforderungen verändert werden.
Das funktioniert auch, soweit die Memos betroffen sind.
Bei den Edits funktioniert das nicht immer.
Zum Beispiel wenn die Minimumbreite erreicht ist, nimmt das betreffende Edit nach Setzen der Anchors die Breite an, die es beim FormCreate hatte und zwar noch innerhalb des FormCanResize, also wenn die Breite der Form noch nicht verändert wurde.
Als Workaround habe ich bei den Anchors der Edits zusätzlich akBottom gesetzt, was dann auch den gewünschten Erfolg hat, aber dazu führt, dass Breite und Höhe nicht gleichzeitig verändert werden dürfen. Gut, auch das habe ich in den Griff gekriegt, aber wirklich zufrieden bin ich so nicht.
Wie macht man das richtig?
Das bloße Setzen der Anchors darf doch eigentlich nicht dazu führen, dass die Ausmaße des Controls geändert werden, wenn das Resizing der Form noch gar nicht stattgefunden hat. Oder übersehe ich da etwas?
Übrigens:
Die linken und mittleren Edits müssen nicht zwangsläufig die gleiche Breite haben.
Durch Linksklick zwischen linkes und mittleres Edit und anschließendes Ziehen der Maus (mit gedrückter linker Maustaste) können die Breiten des Edits verändert werden.
Analog geht das auch bei den Memos.
Wird dabei zusätzlich die Strg-Taste gedrückt, werden die Breiten der Edits und der Memos geändert.
Mit Rechtsklick zwischen die Edits werden die Breiten der Memos an die der Edits angepaßt, anlog funktioniert das mit Rechtsklick zwischen die Memos.
Im Anhang ist Unit1.pas und Unit1.dfm zum ausprobieren.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
|