Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Memo größe zur Laufzeit ändern! (https://www.delphipraxis.net/3312-memo-groesse-zur-laufzeit-aendern.html)

Gast 6. Mär 2003 12:41


Memo größe zur Laufzeit ändern!
 
Hi leute!

wie kann ich vier Memoboxen, immer gleich groß auf einen Form zeigen! eGAL WIE GORß ICH Das fenster ziehe?

Phoenix 6. Mär 2003 13:10

Hi.

So ganz schlau werd ich aus der Frage zwar nicht, aber ich denke Du willst sowas ähnliches wie z.B. im Notepad machen: Das Memofeld ändert die Größe zusammen mit dem Hauptformular beim Ändern der Größe.

Das geht ganz einfach:
Du stellst im Designmodus erstmal ein, wie es denn sein soll. Dann änderst Du im Objektinspektor die Eigenschaft 'Anchor', und stellst dort alle vier Werte auf 'True'. Damit 'verankert' sich das Memofeld an allen vier Seiten des übergeordneten Controls (in dem Fall ja wohl das Hauptfenster) und sobald sich dessen Größe ändert ändert sich dann auch die Größe des Memofeldes.

Gast 6. Mär 2003 13:12

Doch dieses Soll mit 4 Memoboxen gleichzeitig passieren!

Jan 6. Mär 2003 14:05

Hallo Chris,
dazu wirst du wohl (soweit ich das sagen kann) das onresize des Hauptformulars nehmen müssen und anhand der neuen Breite die Memos einzeln resizen. Angenommen die vier Memos sind von links nach rechts und von oben nach unten so durchnummeriert:
1 2
3 4
dann wirst du dem 1. memofeld beim resize keine neue position, sondern nur eine neue breite zuweisen müssen. Da die Breite und Höhe bei allen Memos ja gleich bleiben soll, sähe das ganze dann so aus:

Code:
memox.width:=(form1.width/2)- [linker rand + ((dist.zwischen linkem und rechtem memo)/2)];
Code:
memox.height:=(form1.height/2)-[((dist.zwischen oberem und unterem memo)/2)+obererrand];
für memo2 musst du auch die Position angleichen:

Code:
memo2.left:=(form1.width/2)+((dist.zwischen linkem und rechtem memo)/2);
top entfällt.


memo3(posi):

Code:
memo3.top:=(form1.height/2)+((dist.zwischen oberem und unterem memo)/2);
left bleibt gleich


memo4(top):

Code:
memo4.top:=(form1.height/2)+((dist.zwischen oberem und unterem memo)/2);
memo4(left):

Code:
memo4.left:=(form1.width/2)+((dist.zwischen linkem und rechtem memo)/2);
ich hoffe das hilft weiter
Gruß
Jan

Jan 6. Mär 2003 15:35

hallo,
bei mir sieht der Code jetzt so aus:


Code:
memo1.width:=(form1.width div 2)-20;
memo1.height:=(form1.height div 2)-20;
memo2.width:=(form1.width div 2)-20;
memo2.height:=(form1.height div 2)-20;
memo3.width:=(form1.width div 2)-20;
memo3.height:=(form1.height div 2)-20;
memo4.width:=(form1.width div 2)-20;
memo4.height:=(form1.height div 2)-20;
memo2.left:=(form1.width div 2)+10;
memo3.top:=(form1.height div 2)+10;
memo4.top:=(form1.height div 2)+10;
memo4.left:=(form1.width div 2)+10;

das klappt auch.
Die Memos resizen sich sehr schön, aber komischerweise habe ich immer 2 scrolleisten, mit denen ich scrollen kann. wobei ich weiss, dass an den angaben die hier oben gemacht sind nichts falsch ist. ich habe die memos mit jeweils 10 px abstand zum formrand gesetzt. und der mittelabastand beträgt 20px.
Dass die werte auch während dem ausführen korrekt sind sehe ich über diesen aufruf:

Code:
showmessage(inttostr(form1.width)+' '+inttostr(memo1.left)+' '+inttostr(memo1.width)+' '+ inttostr(memo2.left)+' '+inttostr(memo2.width));
Die werte, die ich dabei bekomme sind genau die, die ich brauche, damit überall ein rand sein sollte, aber irgendwie ist dieser Rand überschritten, weil ich ja scrollbars bekomme. :(
Hat da jemand einen Plan?
BB
Jan

Jan 6. Mär 2003 15:43

Problem gelöst:

Code:
procedure TForm1.FormResize(Sender: TObject);
begin
memo1.width:=(form1.clientwidth div 2)-20;
memo1.height:=(form1.clientheight div 2)-20;
memo2.width:=(form1.clientwidth div 2)-20;
memo2.height:=(form1.clientheight div 2)-20;
memo3.width:=(form1.clientwidth div 2)-20;
memo3.height:=(form1.clientheight div 2)-20;
memo4.width:=(form1.clientwidth div 2)-20;
memo4.height:=(form1.clientheight div 2)-20;
memo2.left:=(form1.clientwidth div 2)+10;
memo3.top:=(form1.clientheight div 2)+10;
memo4.top:=(form1.clientheight div 2)+10;
memo4.left:=(form1.clientwidth div 2)+10;
end;

Gast 7. Mär 2003 16:09

Danke, hat super geklappt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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