![]() |
AW: Formulargröße auf HighDPI-Monitor speichern
Ja du musst aber natürlich in deiner MulDiv() deine Rundungsfunktion MathRound() verwenden - so wie von dir gepostet verwendest du trunc().
Also so:
Delphi-Quellcode:
Weiter musst du den Fall nDenominator=0 abfangen (Result := -1) und auch mögliche Überläufe ((nNumber * nNumerator) / nDenominator kann so gross werden, dass das Resultat nicht in einem integer Platz hat).
Result := MathRound( (nNumber * nNumerator) / nDenominator);
Weiteres Problem: Möglicher integer Überlauf bei der Multiplikation nNumber * nNumerator Deine MulDiv Funktion liefert zum Beispiel für
Delphi-Quellcode:
x = -2, müsste aber natürlich maxint div 2 zurückgeben.
var x : integer;
begin x := MulDiv( maxint div 2, maxint div 2, maxint div 2 ); Schreibe deshalb int64(nNumber) * int64(nNumerator) statt nNumber * nNumerator, sonst hast du wenig Freude, wenn nNumber * nNumerator > maxint. OK für deinen "Fenster-Fall" wirst du kaum je solche Werte als Argumente haben. Aber wenn du MulDiv nachbilden willst, dann musst du darauf achten. |
AW: Formulargröße auf HighDPI-Monitor speichern
Ich hätte nicht gedacht, dass die windowseigene Muldiv() das alles berücksichtigt. Was berücksichtigt die denn noch? Denn die ist scheinbar plattformspezifisch.
|
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
MulDivInt64(.....) aus der System Unit. Die ist crossplatform angelegt sollte also keine Problem machen. |
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
|
AW: Formulargröße auf HighDPI-Monitor speichern
Zitat:
|
AW: Formulargröße auf HighDPI-Monitor speichern
Habe kurz in den Code reingeguckt und der scheint grob überschlagen 10x länger zu sein als der aus diesem Thread hier.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 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