Hallo,
ich versuche über GetOlePicture und SetOlePicture Bilder an ein
ActiveX Control und wieder zurück zu übergeben. Prinzipiell funktioniert das auch, allerdings verändert sich durch die Überagbe die Größe des Bitmaps...
Beispiel:
Code:
var
IPic : IPictureDisp;
begin
FPicture := TPicture.Create();
FPicture.LoadFromFile('c:\test.bmp');
GetOlePicture(FPicture, IPic);
//Übergabe an
ActiveX Control
FGrid.SetImage(I_Pic as IPicture);
end;
Im
ActiveX Control mache ich dann folgendes:
Code:
FPicture := TPicture.Create();
SetOlePicture(imgMap.Picture, image as IPictureDisp);
imgMap (ein TImage auf dem Formular) enthält nun korrekterweise das Bild, allerdings hat sich die ursprüngliche Größe von 80x300 Pixel auf 60x225 reduziert. Interessanterweise wird durch Stretch := true das Bild völlig korrekt dargestellt, wenn man das TImage auf 80x300 setzt, d.h. ohne jeden Verlust und ohne Interpolation, was mich darauf schließen lässt, dass die Daten dann wohl doch irgendwie richtig übergeben werden...
Das Problem betrifft Delphi 2010, ich weiß, dass in früheren Delphi-Versionen (5,6,7) ein Bug existierte, habe aber nichts für neuere Versionen gefunden.
Hat jemand von euch einen Tipp dazu?