200/160 = 1.25. Ich nehme an, dass du an einem Bildschirm arbeitest, der auf 120ppi Pixeldichte geschaltet ist ("125%" in Windows-Nomenklatur). Und ich nehme an, dass LCL-Scaling eingeschaltet ist, denn das ist Default seit Laz 2.0.
Wenn du nun ein TImage mit 200 x 50 Pixels auf dem Formular plazierst, wurde dieses mit dem "Maßstab" 120ppi erzeugt. Du hast das nicht geschrieben, aber ich vermute, du bist dann zur laufzeit auf ein anderes System gegangen, das mit 96ppi (100%) läuft. LCLScaling rechnet nun alle Längendimensionen von 120% auf 100% runter. Das Formular wird kleiner, die Schrift wird kleiner, und auch das TImage wird kleiner - nicht aber sein Inhalt. Daher passt bei 100% das Bild nicht mehr ins TImage.
Ich hab's ausprobiert, und konnte das beim Übergang von einer 150%-VM auf mein Standard-System bei 100% bestätigen .
Was kannst du tun? Am einfachsten ist es, wenn du zur Laufzeit die Größe der TImage-Komponente gleich der Bildgröße setzt (oder man könnte im Verhältnis der aktuellen PixelsPerInch zu den DesigntimePPI des Formular umrechnen):
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Width := Image1.Picture.Width;
Image1.Height := Image1.Picture.Height;
end;
(Bin nicht sicher, ob FormCreate die geeignete Stelle für diese Code ist...)
Wenn du wie hier die Größe der Controls zur Laufzeit änderst, musst du darauf gefasst sein, dass es Konflikte mit der Position anderer Controls geben kann. Daher rate ich unbedingt, den Anker-Editor zur benutzen, mit dem du Controls aneinander hängen kannst, so dass, wenn ein Control größer wird, die anderen folgen können und das Layout stimmig bleibt. Nachteil ist aber, dass das Bild relativ zu den Controls kleiner wird, wenn dein Programm z.B. auf einem super-high-res-Bildschirm läuft (normale 16x16-Icons sind da kaum mehr zu erkennen).
Eine andere Möglichkeit wäre, mit mehreren Bildern verschiedener Größe zu arbeiten, üblicherweise für 100%, 150% and 200% Pixeldichte. Dann skaliert der Bildinhalt mit dem TImage, und das Layout der Komponenten untereinander bleibt unbeeinflusst.
Oder du malst deine Bilder als svg und benutzt BGRABitmap zu deren Darstellung (oder FPVectorial, aber das ist sehr buggy).