Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 08.08.05 18:09 
N'Abend!

Ich will ein Fenster in der Größe so anpassen, dass es einem bestimmten Seitenverhältnis entspricht (was ja prinzipiell nicht schwer ist), ABER es sollen nur reine Integer-werte sein (also es soll exakt stimmen). Beispiel:

600x400 bei 3:2 ist ok
5:3,5 bei 10:7 nicht, weil 3,5 keine ganze Zahl ist.

Das Seitenverhältnis soll natürlich variabel sein - kann also auch z.B. 11 sein. Wie geh ich am besten vor? Ich ahne Dinge wie KGV und infolgedessen auch GGT ;)

AXMD

//EDIT: Gültiges Beispiel hinzugefügt :P


Zuletzt bearbeitet von AXMD am Mo 08.08.05 18:18, insgesamt 1-mal bearbeitet
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 08.08.05 18:16 
nä ich würds so machen:

a := 600;
b := 200;

verhältnis 3:2

if (a * 2 = b * 3) and ganzzahlig(a) and ganzzahlig(b) then
// gültig

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 08.08.05 18:21 
Ich will aber nicht prüfen, OB es gültig ist, sondern etwas erzeugen, DAS gültig ist. Das heißt, deine Bedingung soll erfüllt sein - ich will die Form so hinbiegen, dass sie dann ein Seitenverhältnis von 3:2 hat (z.B.)

AXMD
TM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 74

Win xp
D7 ET
BeitragVerfasst: Mo 08.08.05 18:36 
Meinst du so was?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not ganzzahlig(form1.clientheight/2then
 form1.clientheight:=form1.clientheight+1//ganzzahlig machen

form1.clientwidth:=form1.clientheight*3/2;


..

_________________
Dieser Beitrag enthält keine Schreibfehler.
Das sind versteckte Hinweise.
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 08.08.05 18:40 
@TM: nein. Hab jetzt eine Lösung von BenBE (thxvm). Lösung sieht wie folgt aus (Anmerkung: PaintBox muss 3:2 sein, daher die Herumrechnerei mit der Differenz Form PaintBox):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TMainForm.SetHeightButtonClick(Sender: TObject);
var
  w: Integer; //Weite der Paintbox
begin
  w := Width - 8;
  Width := w - w mod Round(intervalsre) + 8//Gannzahlig bleiben! (8 Pixel = Rand)
  Height := Round(intervalsim) * (w div Round(intervalsre)) + (Height - PaintBox1.Height);
end;

procedure TMainForm.SetWidthButtonClick(Sender: TObject);
var
  h: Integer; //Weite der Paintbox
begin
  h := PaintBox1.Height;
  Height := h - h mod Round(intervalsim) + (Height - h); //Gannzahlig bleiben! (8 Pixel = Rand)
  Width := Round(intervalsre) * (h div Round(intervalsim)) + 8//8 Pixel = Rand
end;


Im Anhang (falls es jemanden interessiert) das Ganze zum Spielen :P. Einfach die Formularweite/-höhe ändern und dann die zwei letzten Buttons in der zweiten Toolbar ausprobieren. Ist leider noch sehr unausgereift. Das Seitenverhältnis gibt der Re-/Im-Raster (auch zweite Toolbar) an.

AXMD
Einloggen, um Attachments anzusehen!