![]() |
AW: Formulargröße auf HighDPI-Monitor speichern
Ich habe mir eure Funktionen jetzt nochmal genau angeguckt, selber nachgerechnet und ja, ich bin dumm wie Stroh. ich bin halt ein mathematisches Anti-Wunderkind im erhöhten Alter :thumb:
Ich versuche hier die ganze Zeit Prozentrechnung und wundere mich, warum ich nicht zurück auf 1050 komme. MultiDiv scheint genau das zu tun, was Michael schrieb. Leider kann man in die Quelltexte von MultiDiv nicht reingucken. Wenn ich das richtig verstehe, ist MultiDiv auch plattformspezifisch. Meine zwei neuen Funktionen, die mir sicher oft noch weiterhelfen werden
Delphi-Quellcode:
***
// Plattformunabhängiges MultiDiv, Uwe Raabe, Michael II@ DelphiPraxis.net
function TMathUtils.MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; begin Result := Round((nNumber / nNumerator) * nDenominator); end; // Diese Funktion nutze ich aktuell dort, wo ich vorher nur ScaleBy nutzte procedure TFormUtils.ScaleForm(const Form: TForm; const NewDPI, CurrentDPI: Integer); begin if NewDPI <> CurrentDPI then begin SendMessage(Form.Handle, WM_SETREDRAW, WPARAM(False), 0); // LockWindow nutze ich nicht wegen, siehe *** try aForm.ScaleBy(NewDPI, CurrentDPI); finally SendMessage(Form.Handle, WM_SETREDRAW, WPARAM(True), 0); end; end; end; Zitat:
|
AW: Formulargröße auf HighDPI-Monitor speichern
Versteh nicht was du da tust aber gut..
Was hat das verhindern von Zeichnungs Operationen nun mit dem Skalieren der Form zu tun? Ok bin raus das driftet ab. gruss |
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
|
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
|
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
Ich habe kein Problem da ich mich NUR mit einem rumschlage. Ich möchte nicht im Elektrosmog untergehen. gruss |
AW: Formulargröße auf HighDPI-Monitor speichern
Früher hatte ich auch nur einen Monitor. Mittlerweile einen 24" und einen 21". Den zweiten möchte ich nicht mehr missen.
1x Delphi links, 1x rechts oder auf dem anderen Sublime oder irgendwas anderes. |
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
Die MulDiv Funktion muss ich korrigieren. Sie war leider falsch. Nicht, dass einer die falsche kopiert. Richtig lautet sie
Delphi-Quellcode:
class function TMathUtils.MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer;
begin Result := Round((nNumber * nNumerator) / nDenominator); end; |
AW: Formulargröße auf HighDPI-Monitor speichern
Ja mir war aufgefallen, dass deine nicht 100%ig jener von Delphi entspricht, aber meistens wohl genügt ;-).
Delphi setzt dies um: ![]() D.h. deine nachgebaute Funktion sollte zum Beispiel in gewissen Fällen -1 ausgeben. Fürs Runden solltest du nicht round verwenden. round(x) rundet .5 immer auf die gerade Zahl, welche x am nächsten liegt. Beispiel 0.5 wird auf 0 gerundet, 1.5 auf 2, 2.5 auf 2, 3.5 auf 4. MulDiv macht's anders. Schau dir zum Beispiel trunc an. Zum Runden in Delphi gibt's ![]() |
AW: Formulargröße auf HighDPI-Monitor speichern
Verbesserung
Delphi-Quellcode:
class function TMathUtils.MathRound(X: Extended): Int64; // Bei stackoverflow gefunden, für die Sammlung. Obwohl Trunc dasselbe macht.
begin if X >= 0 then Result := Trunc(X + 0.5) else Result := Trunc(X - 0.5); end; class function TMathUtils.MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; begin Result := Trunc((nNumber * nNumerator) / nDenominator); end; |
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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