AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formgröße proportional ändern

Ein Thema von phire_ · begonnen am 27. Jul 2008 · letzter Beitrag vom 28. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
phire_

Registriert seit: 3. Apr 2007
2 Beiträge
 
#1

Formgröße proportional ändern

  Alt 27. Jul 2008, 20:04
Also Hallo erstmal,

ich habe folgendes Problem:

Ich möchte, das wenn ich die Größe einer Form ändere (Borderstyle = bsSizeable) sich Width und Height proportional mitändern. Das heißt konkret, das sich zum bsp. Width und Height im Verhältnis 4:3 ändern.

ich möchte also immer das gleiche Format des Forms beibehalten.
ich habe es mit diesem code im OnResize Event probiert, doch das geht auch nur wenn man die Formnach unten hin vergrößert bzw. verkleinert, aber auch nicht gut, da die Form hin und her springt.

  Width := Round((4/3)*Height); ich freue mich auf eure antworten und hoffe ihr könnt mir helfen

mfg
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Formgröße proportional ändern

  Alt 27. Jul 2008, 23:51
Dabei stellt sich die Grundsätzliche Frage: Ist das Sinnvoll?
Die Antwort lautet dann ganz klar: Nein.

Wenn ich zum Beispiel einen tollen neuen TFT mein eigen nenne und ich mich über die tolle nicht 4:3 Auflösung freue, dann kommt da dein tolles Programm daher und nimmt mir jeglichen Spass an der neuen Hardware. Ich möchte gern das Fenster einer Anwendung auch maximieren können. Da sind irgendwelche Manipulationen absolut wiederlich.
Leider hast du uns ja nicht verraten was du da eigentlich machen willst...

Trotzdem mal ein Vorschlag: Lass das Fenster so wie es ist und lasse die Elemente auf deiner Form mitwachsen. Oder wenn es sich z.B. um ein Spielfeld handelt, kannst du dieses automatisch anpassen. Dies geht, wenn du dich dann immer an der kürzesten Länge (Width, Height) orientierst.

Ein Beispiel siehe hier.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 00:19
oder anchors, benutzen...
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 00:48
Zitat von lbccaleb:
oder anchors, benutzen...
das verbarg sich hinter "mitwachsen"
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 00:50
Moin!

Zitat von phire_:
  Width := Round((4/3)*Height); ich freue mich auf eure antworten und hoffe ihr könnt mir helfen
Überschreibe die Delphi-Referenz durchsuchenSetBounds() Methode und reiche die veränderten Parameter im inherited Aufruf weiter.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 01:13
Zitat von omata:
Zitat von lbccaleb:
oder anchors, benutzen...
das verbarg sich hinter "mitwachsen"
muss man nicht, kann es natürlich auch selber proggen..
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
phire_

Registriert seit: 3. Apr 2007
2 Beiträge
 
#7

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 01:14
Danke Muetze1

das Stichwort SetBounds() hat mir geholfen!

Hier ein guter Link dazu: http://www.bsdg.org/SWAG/DELPHI/0076.PAS.html

Edit:

Also ich habe es jetzt so gemacht:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
  public
    procedure SetBounds(aLeft, aTop, aWidth, aHeight: Integer); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetBounds(aLeft, aTop, aWidth, aHeight: Integer);
begin
  aWidth := Round((4/3)*aHeight);
  inherited SetBounds(aLeft, aTop, aWidth, aHeight);
end;

end.
Das funktionier jedoch nicht. es ist wie vorher.
hoffe auf hilfe

mfg
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 02:13
Moin!

Mein Fehler. Diese Methode mit der SetBounds() Methode funktioniert nur bei Komponenten. Bei Formularen müsstest du die WM_SIZING Botschaft behandeln. Dir werden die aktuellen Werte übergeben, die du frei abändern kannst.

/EDIT: Here it is...
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    procedure WMSizing(var Message: TMessage); message WM_SIZING;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMSizing(var Message: TMessage);
var
  lRect: PRect;
begin
  lRect := Pointer(Message.lParam);

  lRect.Right := lRect.Left + round((4/3)*(lRect.Bottom - lRect.Top));
end;

end.
MfG
Muetze1
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 08:50
Zitat von phire_:
Also Hallo erstmal,

ich habe folgendes Problem:

Ich möchte, das wenn ich die Größe einer Form ändere (Borderstyle = bsSizeable) sich Width und Height proportional mitändern. Das heißt konkret, das sich zum bsp. Width und Height im Verhältnis 4:3 ändern.

ich möchte also immer das gleiche Format des Forms beibehalten.
ich habe es mit diesem code im OnResize Event probiert, doch das geht auch nur wenn man die Formnach unten hin vergrößert bzw. verkleinert, aber auch nicht gut, da die Form hin und her springt.

  Width := Round((4/3)*Height); ich freue mich auf eure antworten und hoffe ihr könnt mir helfen

mfg
Ich habe das jetzt mal probiert. Funktioniert einwandfrei, wenn man es so macht:

Delphi-Quellcode:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  NewWidth := Round((4/3)*NewHeight);
end;
Edit: Ok, nicht ganz einwandfrei, weil es nicht geht, wenn man nur die Breite verändert...
  Mit Zitat antworten Zitat
Benutzerbild von spaxxn
spaxxn

Registriert seit: 19. Nov 2004
253 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Formgröße proportional ändern

  Alt 28. Jul 2008, 10:27
Du setzt ja auch nur die Breite...

Delphi-Quellcode:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  NewWidth := Round((4/3)*NewHeight);
end;
Probier mal:
Delphi-Quellcode:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  if NewWidth <> Self.Width then
    NewHeight := Round((3/4)*NewWidth)
  else if NewHeight <> Self.Height then
    NewWidth := Round((4/3)*NewHeight);
end;
Ist nicht getestet, aber wäre logisch ...

Edit: Habs gestestet und das geht, hab noch nen Zahlendreher in der Berechnung gehabt, also beachten.
"Hey Süße,
hol mir mal was zu trinken! Du wirst schon wieder hässlich!"

Zitat eines Betrunkenen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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