![]() |
Größen von Objekten in einer Form anpassen
Hi Leute,
wisst ihr wie man am besten die Größen von allen Objekten in einer Form wenn dass Fenster vergrößert / verkleinert wird, anpasst, sodass alles ein bisschen größer wird wenn man das Fenster vergrößert und umgekehrt. Ich habe schon den Weg ausprobiert indem ich jedes einzelnes Objekt die Höhe und Breite und Position bestimme. Ist nur ein bisschen mega mühsam. Danke im Vorraus. |
Re: Größen von Objekten in einer Form anpassen
|
Re: Größen von Objekten in einer Form anpassen
Align ist ja so was nur am Rand und dann so schrecklich über die ganze Seite.
Anchors scheint ja das richtige zu sein, aber irgendwie krieg ich es nicht hin dass er die richtigen typen da hat: Zitat:
Delphi-Quellcode:
form1.Button1.Anchors := akLeft ;
|
Re: Größen von Objekten in einer Form anpassen
Hi!
Hättest du einen Blick in die OH geworfen hättest du bemerkt, dass Anchors ein Set of ist. Zudem kann man das gleich am OI sehen, wenn man die Eigenschaft aufklappt. Es muss also heißen:
Delphi-Quellcode:
Anchors := [akLeft];
|
Re: Größen von Objekten in einer Form anpassen
Also,
Anchors verankert die Position am Bildschirm und nicht an dem Fenster wie ich es mir wünschen würde. Vielleicht habe ich auch meine Frage falsch gestellt: Ich würde einige Felder Listen usw automatisch der größe des Fensters anpassen. |
Re: Größen von Objekten in einer Form anpassen
bei mir geht das mit anchors. ich hab ne form gemacht, ne listbox drauf gesetzt und dann alle anchors der listbox auf true gesetzt. und nun, wenn ich die form resize, dann resizet auch die listbox mit. das is doch das, was du willst, oder?
|
Re: Größen von Objekten in einer Form anpassen
Ich versteh's so, dass er alle Komponenten proportional zum Form verändern will, dass also wenn Form.width:=2*Form.width gemacht wird, dass dann alle Komponenten doppelt so breit werden.
Also könntest du width und heigth des Forms speichern und dann wenn sich diese Werte ändern, den Quotienten aus width(alt) und width(neu) berechnen und dann für jede Komponente width und left mit dieser Zahl multiplizieren. (analog dazu Form.height und Top sowie heigth anpassen). Ich hab's jetzt nicht ausprobiert, sollte aber so zu machen sein. |
Re: Größen von Objekten in einer Form anpassen
Irgendwie mach er das aber nicht proportional.
Er verkleinert/vergrößert zwar die Listen etc., aber zb: In der Normalen Ansicht grenzen 2 Listboxesn aneinader. Mach man nun bei beiden alle Anchors = true, führt dann aus, und zieht das Fenster seitlich auseinander, sind nicht beide Lisen etwas breiter geworden, dass sie immer noch aneinandergrenzen sondern stehen so eklich übereinander. Ja genau, Toxman, nur leider hab ich die Idee schon gehabt (warvielleicht nicht ganz so offensichtlich, doch:) Zitat:
|
Re: Größen von Objekten in einer Form anpassen
Also ich hab hier mal kurz eine procedure geschrieben dir dir nützlich sein könnte. Nur muss die für jede Komponente aufgerufen werden, aber wahrscheinlich gibt es eine Möglichkeit eine TControl ist die Basisklasse für alle Komponenten, die zur Laufzeit sichtbar sind. Art Findcomponent so zu gestalten, dass alle TControl-Komponenten aufgerufen werden.
Delphi-Quellcode:
procedure Tform.Changecomponent(comp: TControl; dw1,dh1: real);
begin comp.left:=round(dw1*comp.Left); comp.width:=round(dw1*comp.Width); comp.top:=round(dh1*comp.Top); comp.height:=round(dh1*comp.Height); end; // zu den Variablen: //im oncreate oder schon fest: w:=form.Width; h:=form.Height; // Dann bei einem Veränderung des Forms: dw:=form.Width/w; dh:=form.Height/h; // und aufrufen: Changecomponent(Panel1,dw,dh); |
Re: Größen von Objekten in einer Form anpassen
Jetzt noch schneller: (
![]()
Delphi-Quellcode:
Viel Spaß
for i := 0 to Form.ControlCount-1 do
Changecomponent(Form.Controls[i],dw,dh); Tox @ Codelib-Manager: Meint ihr, dass Ganze sollte in die Codelib? Ist eigentlich recht nützlich :gruebel: |
Re: Größen von Objekten in einer Form anpassen
Irgendwie gibt es bei dir eine fette unstimmigkeit: dw und dh ergeben immer 1. Da Form.width/form.width 1 ist.
|
Re: Größen von Objekten in einer Form anpassen
wo steht denn, dass dw:=form.width/form.width??? Du musst das hier:
Delphi-Quellcode:
natürlich nach jeder Veränderung des Forms neu ausführen. :zwinker:
w:=form.Width;
h:=form.Height; |
Re: Größen von Objekten in einer Form anpassen
Und wieso steht dann:
Delphi-Quellcode:
Tschuldigung wenn ich nachfragen muss aber bei mir klappt das nicht:
//im oncreate oder schon fest:
w:=form.Width; h:=form.Height; In welcher reihenfolge muss man nun, und wo:
Delphi-Quellcode:
w:=form.Width;
h:=form.Height;
Delphi-Quellcode:
paltzieren???
dw:=form.Width/w;
dh:=form.Height/h; |
Re: Größen von Objekten in einer Form anpassen
Sagt mal schon mal was Scaled gehört damit geht das nämlich auch.
Delphi-Quellcode:
:-D
Form1.Scaled:=True; //Und gut
|
Re: Größen von Objekten in einer Form anpassen
scaled is bei mir standardmässig auf true, und nix geht.
|
Re: Größen von Objekten in einer Form anpassen
Zitat:
Zitat:
|
Re: Größen von Objekten in einer Form anpassen
Ihr habt recht unter D7 gehts nicht mehr unter D5 gings da wahr immer alles grösser geworden :-D
|
Re: Größen von Objekten in einer Form anpassen
die Anweisung müsste dann auch "ScaleBy" heißen. ScaleBy hat allerdings den nachteil das nicht alle Controls darauf eingehen, ist zum Beispiel bei einem TImage Stretched nicht aktiviert so bleibt das bild im TImage auch ungestretcht...
|
Re: Größen von Objekten in einer Form anpassen
Tschuldigung hab nicht gemwerkt dass es schon 2 Seiten sind.
|
Re: Größen von Objekten in einer Form anpassen
Zitat:
Alles wird hier nicht verraten 8) |
Re: Größen von Objekten in einer Form anpassen
Jaaaaaaaaaaaaaaaa.
Jetzt klappts prima. Danke für alle eure Beiträge und für den Code von Toxman. :party: :party: :party: |
Re: Größen von Objekten in einer Form anpassen
hatte mich auch gerade mit diesem thema beschäftigt, es aber anders gelöst, war zumindest für mich so am einfachsten
Delphi-Quellcode:
das ganze gehört ins onrezize vom form rein, naja ist ja schon das komplete resize wenn vorher nichts drinn war :D
procedure TForm1.FormResize(Sender: TObject);
var w,h : integer; begin // differenz w := form1.Width - 871; h := form1.Height - 692; SynEdit1.width := 857 + w; BitBtn2.width := 857 + w; GroupBox1.width := 857 + w; GroupBox2.width := 857 + w; Edit1.width := 617 + w; Edit2.width := 617 + w; Edit3.width := 617 + w; Edit4.width := 441 + w; Edit5.width := 441 + w; BitBtn1.Left := 720 + w; CheckBox1.Left := 720 + w; RadioButton1.Left := 544 + w; RadioButton2.Left := 544 + w; RadioButton3.Left := 680 + w; SynEdit1.height := 321 + h; GroupBox2.top := 536 + h; end; in w und h wird die differenz berechnet, die beiden zahlen sind die startgröße vom programm an den ankern habe ich nichts geändert, somit kann man die breite prima bestimmen, nur ist leider halt immer hardgecodet, aber was solls, hauptsache es geht :D ach ja sämtliche zahlen hier sind die angaben womit das programm erstellt wurde muß man dann halt schauen wie man was verändern möchte width --> ist die breite top --> position von oben left --> position von links |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz