Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Edit1 und Edit2 proportional ändern (https://www.delphipraxis.net/159730-edit1-und-edit2-proportional-aendern.html)

thomas2009 10. Apr 2011 15:27


Edit1 und Edit2 proportional ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
ich möchte die Image Grösse proportional ändern
Edit1 : W1
Edit2: H1

Nun möchte ich in Edit1OnChange den Wert in Edit2 Proportional ändern

Wie kann ich das machen ?
H2 : Round( H1*W2 / W1 )

DP-Maintenance 10. Apr 2011 16:30

Dieses Thema wurde am "10. Apr 2011, 17:30 Uhr" von "Matze" aus dem Forum "Programmieren allgemein" in das Forum "GUI-Design mit VCL / Qt / Common Controls" verschoben.

s.h.a.r.k 10. Apr 2011 21:49

AW: Edit1 und Edit2 proportional ändern
 
Du brauchst lediglich die Größen (Breite und Höhe) von vorher. Dann kannst du über das Verhältnis von vorher zu nachher, z.B. bei der geänderten Breite den Multiplikator für (in diesem Beispiel) die Höhe errechnen:
Code:
Höhe_nachher = Breite_nachher / Breite_vorher * Höhe_vorher
Daraus resultiert aber die Frage, warum du deine Formel nicht einfach ausprobiert hast? Du hättest ziemlich schnell mit ein paar Testwerten gesehen, ob es geklappt hätte oder eben nicht.

thomas2009 11. Apr 2011 15:55

AW: Edit1 und Edit2 proportional ändern
 
Problem gelöst
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
NeueBreite:=StrToInt(Edit1.Text);
AlteBreite:=Image1.width;
AlteHoehe:=Image1.Height;

if ((CheckBox1.Checked)and (edit1.Focused) ) or
   ((CheckBox1.Checked) and (UpDown1.Focused)) then
begin
Edit2.Text:=IntToStr(Round( NeueBreite * AlteHoehe /AlteBreite));
end;
Warum ich if ((CheckBox1 ... rein gemacht habe, ist schon klar :wink:

Deep-Sea 11. Apr 2011 15:59

AW: Edit1 und Edit2 proportional ändern
 
Zitat:

Zitat von thomas2009 (Beitrag 1094449)
Delphi-Quellcode:
[...]
StrToInt(Edit1.Text);
[...]

Ist das nicht ein SpinEdit? Wieso nutzt du dann Text? :gruebel:


Nachtrag:
Delphi-Quellcode:
if ((CheckBox1.Checked)and (edit1.Focused) ) or
   ((CheckBox1.Checked) and (UpDown1.Focused)) then
Das kann man verkürzen zu:
Delphi-Quellcode:
If CheckBox1.Checked and (Edit1.Focused or UpDown1.Focused) then

himitsu 11. Apr 2011 16:25

AW: Edit1 und Edit2 proportional ändern
 
Zitat:

Delphi-Quellcode:
if ((CheckBox1.Checked)and (edit1.Focused) ) or
   ((CheckBox1.Checked) and (UpDown1.Focused)) then

Warum es aber zweimal drin ist, ist nicht klar.
Delphi-Quellcode:
if CheckBox1.Checked and (edit1.Focused or UpDown1.Focused) then
.

Und warum die lokalen Variablen (NeueBreite, AlteBreite, AlteHoehe) global deklariert sind, auch nicht.

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if CheckBox1.Checked and (Sender = Edit1) then
    Edit2.Text := IntToStr(Round(StrToInt(Edit1.Text) * Image1.Height / Image1.Width));
  if CheckBox1.Checked and (Sender = Edit2) then
    Edit1.Text := IntToStr(Round(StrToInt(Edit2.Text) * Image1.Width / Image1.Height));
end;

thomas2009 11. Apr 2011 17:27

AW: Edit1 und Edit2 proportional ändern
 
Zitat:

Zitat von Deep-Sea (Beitrag 1094451)

Ist das nicht ein SpinEdit? Wieso nutzt du dann Text? :gruebel:

Was meinst Du mit SpinEdit !? Ich verwende normale TEdit.


Die Abkürzung habe ich echt nicht aufgepasst ;)
Ich finde so ist am kürzesten :
Delphi-Quellcode:
if CheckBox1.Checked and (Sender = Edit1) then
:thumb:

rollstuhlfahrer 11. Apr 2011 19:54

AW: Edit1 und Edit2 proportional ändern
 
Das mit dem "0" verhindern ist ja ganz einfach, nämlich mit 2 If-Strukturen.

Zu dem Spin-Edit: In #1 (siehe Anhang) verwendest du das Delphi-SpinEdit. Jetzt schreibst du von einem normalen Edit-Feld. Das ist ganz schön verwirrend.

Bernhard

thomas2009 11. Apr 2011 20:19

AW: Edit1 und Edit2 proportional ändern
 
Stimmt, mit SpinEdit, kann man das Problem von /0 verhindern
:)

Aber Nur wenn man Updown von SpinEdit verwendet sonst kann man 0 eintippen
obwohl SpinEdit Min-Value 1 !!!


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