Deine Lösung unterscheidet sich von meiner Lösung durch das Aufrufen von Sleep.
Nein, Du hast noch einen zusätzlichen Prozedur-Aufruf und im Else-zweig einen möglichen Thread-Aufruf.
BTW Die Abfrage ist überflüssig denn der Setter prüft schon, ob sich der Wert ändert und löst nur dann ein Repaint aus:
Delphi-Quellcode:
if (Image1.Width <> Image1.Bitmap.Width) or (Image1.Height <> Image1.Bitmap.height) then begin
Image1.Width:=Image1.Bitmap.Width;
Image1.Height:=Image1.Bitmap.Height;
end;
Das stimmt zwar, dass beim Setter Repaint nur ausgelöst wird, wenn die Bitmap sich im Ausmaß geändert hat, aber es werden davon unabhängig IMMER beim Setter noch andere Aktionen für das TImage ausgeführt, die letztlich überflüssig sind.
Ich habe das hier gerade mal getestet, auf 1 Mio Durchläufe macht das ca. 200 MS Unterschied aus. Nun gut, ist nicht die Welt hier. Aber es gibt andere Beispiele wo sich der (überflüssige) Aufruf von Settern deutlich mehr auf die Performance auswirkt. Deswegen habe ich es mir angewöhnt, Setter nur aufzurufen, wenn es wirklich notwendig ist.