Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Größen von Objekten in einer Form anpassen (https://www.delphipraxis.net/27777-groessen-von-objekten-einer-form-anpassen.html)

Alexander Roth 15. Aug 2004 17:45


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.

Die Muhkuh 15. Aug 2004 18:00

Re: Größen von Objekten in einer Form anpassen
 
Schau dir mal Delphi-Referenz durchsuchenAlign bzw. Delphi-Referenz durchsuchenAnchors an.

Alexander Roth 15. Aug 2004 18:33

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:

[Fehler] Unit1.pas(49): Inkompatible Typen: 'TAnchors' und 'TAnchorKind'
Mein Quelltext:
Delphi-Quellcode:
form1.Button1.Anchors := akLeft ;

ManuelM 15. Aug 2004 22:26

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];

Alexander Roth 16. Aug 2004 12:53

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.

phXql 16. Aug 2004 13:49

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?

Nikolas 16. Aug 2004 13:54

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.

Alexander Roth 16. Aug 2004 14:53

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:

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.

Nikolas 16. Aug 2004 22:07

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);

Nikolas 16. Aug 2004 23:52

Re: Größen von Objekten in einer Form anpassen
 
Jetzt noch schneller: (Hier kommt's her)

Delphi-Quellcode:
for i := 0 to Form.ControlCount-1 do
Changecomponent(Form.Controls[i],dw,dh);
Viel Spaß
Tox

@ Codelib-Manager: Meint ihr, dass Ganze sollte in die Codelib? Ist eigentlich recht nützlich :gruebel:

Alexander Roth 17. Aug 2004 11:39

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.

Nikolas 17. Aug 2004 11:55

Re: Größen von Objekten in einer Form anpassen
 
wo steht denn, dass dw:=form.width/form.width??? Du musst das hier:
Delphi-Quellcode:
w:=form.Width;
h:=form.Height;
natürlich nach jeder Veränderung des Forms neu ausführen. :zwinker:

Alexander Roth 17. Aug 2004 12:37

Re: Größen von Objekten in einer Form anpassen
 
Und wieso steht dann:
Delphi-Quellcode:
//im oncreate oder schon fest:
w:=form.Width;
h:=form.Height;
Tschuldigung wenn ich nachfragen muss aber bei mir klappt das nicht:
In welcher reihenfolge muss man nun, und wo:
Delphi-Quellcode:
w:=form.Width;
h:=form.Height;
Delphi-Quellcode:
dw:=form.Width/w;
dh:=form.Height/h;
paltzieren???

franktron 17. Aug 2004 13:04

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:
Form1.Scaled:=True; //Und gut
:-D

phXql 17. Aug 2004 13:41

Re: Größen von Objekten in einer Form anpassen
 
scaled is bei mir standardmässig auf true, und nix geht.

Stevie 17. Aug 2004 13:51

Re: Größen von Objekten in einer Form anpassen
 
Zitat:

Zitat von franktron
Sagt mal schon mal was Scaled gehört damit geht das nämlich auch.

Delphi-Quellcode:
Form1.Scaled:=True; //Und gut
:-D

Hääh??? :gruebel:
Zitat:

Zitat von Delphi-Hilfe
Das Setzen von Scaled auf True ermöglicht, daß das Formular an Schriftarten, die nicht skalierbar sind (Schriftarten, die nur einzelne Punktgrößen unterstützen) oder an Unterschiede angepaßt werden kann, die sich beispielsweise aus der Verwendung einer kleinen Schriftart während des Entwurfs und der Ausführung des Formulars auf Systemen mit großen Schriftarten ergeben.


franktron 17. Aug 2004 14:02

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

SirThornberry 17. Aug 2004 14:05

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...

Alexander Roth 17. Aug 2004 16:25

Re: Größen von Objekten in einer Form anpassen
 
Tschuldigung hab nicht gemwerkt dass es schon 2 Seiten sind.

Nikolas 17. Aug 2004 16:31

Re: Größen von Objekten in einer Form anpassen
 
Zitat:

Tschuldigung wenn ich nachfragen muss aber bei mir klappt das nicht:
In welcher reihenfolge muss man nun, und wo:

Delphi-Quellcode:
w:=form.Width;
h:=form.Height;
Delphi-Quellcode:
dw:=form.Width/w;
dh:=form.Height/h;

Erstmal ins oncreate damit du die ersten Vergleichswerte(w,h) fest hast. Dann rechnest du bei jeder Veränderung der FormGröße dw und dh aus und setzt w und h neu.
Alles wird hier nicht verraten 8)

Alexander Roth 17. Aug 2004 17:05

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:

Nisbo 26. Mär 2006 18:04

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:
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;
das ganze gehört ins onrezize vom form rein, naja ist ja schon das komplete resize wenn vorher nichts drinn war :D
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