Ich hätte da wohl auch noch eine kleine Frage zu.
Ich müsste mit dieser Funktion auf ein TBitmap zeichnen können, nur leider klappt das scheinbar nur mit Nachfahren von TWinControl, wie z.B. TForm.
Ich habe die function wie folgt umgeschrieben:
Delphi-Quellcode:
function TmyJPEG.ShowImage(fileName:
string;
var hmWidth, hmHeight: Integer; wnd: HWND): hResult;
var DC : HDC;
nWidth,
nHeight : Integer;
rc : TRect;
begin
if LoadPicture(fileName)
then
begin
DC := GetDC(wnd);
if (pPicture.get_Width(hmWidth) = S_OK)
and
(pPicture.get_Height(hmHeight) = S_OK)
and
(GetClientRect(wnd, rc))
then
begin
nWidth := MulDiv(hmWidth, GetDeviceCaps(
DC, LOGPIXELSX),2540);
nHeight := MulDiv(hmHeight, GetDeviceCaps(
DC, LOGPIXELSY),2540);
pPicture.Render(
DC, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, rc);
end;
ReleaseDC(wnd,
DC);
end;
end;
Sie ist Teil der Klasse "TmyJPEG", die aus nicht viel mehr besteht, wie der funktion "LoadImage" (wie in dem hier besprochenen Thread, nur mit'm try...finally drumrum), und eben "ShowImage".
Aufgerufen wird wie folgt:
TmyJPEG.ShowImage('C:\einJPG.jpg', x, y, TBitmap.Handle);
(mal in Klassennamen geschrieben...)
x und y halten die Größe des Bildes (komischerweise mit 26,458333333... multipliziert, aber egal).
Wenn ich statt des "TBitmap.Handle" ein "TForm.Handle" übergebe klappt das ganze sehr prächtig! Nur MUSS ich in ein Bitmap zeichnen können, da ich
a) Die Scanline brauche und
b) das ganze in einem Thread passiert, und ein TForm hat da nix zu suchen
(wiel nicht threadsicher)
Die Deklaration des Parameters "wnd: HWND" in "wnd: HBITMAP" zu ändern brachte leider keinen Erfolg. Und ich weiss leider noch nicht ganz die ganze Klamotte mit
dc's und Handles und tüdeldü zu verstehen. (Bin aber dicht dran *g*)
Also Frage ist: Was kann ich tun, damit mir meine function auch in ein TBitmap rendert?
Herzlichen Dank schonmal!
mfg,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel