Ja du musst aber natürlich in deiner MulDiv() deine Rundungsfunktion MathRound() verwenden - so wie von dir gepostet verwendest du trunc().
Also so:
Result := MathRound( (nNumber * nNumerator) / nDenominator);
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).
Weiteres Problem: Möglicher integer Überlauf bei der Multiplikation nNumber * nNumerator
Deine MulDiv Funktion liefert zum Beispiel für
Delphi-Quellcode:
var x : integer;
begin
x := MulDiv( maxint div 2, maxint div 2, maxint div 2 );
x = -2, müsste aber natürlich maxint div 2 zurückgeben.
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.