Ich klicke auf ein Uhr Blatt danach schicke ich eine Message um das Fenster verschieben zu können.
PostMessage(hDrop, WM_NCLBUTTONDOWN, HTCAPTION, MAKELONG(y, x));
Diese wird in meiner WinProc nicht weiter behandelt.
Das Fenster kann ich jetzt verschieben das Problem ist nur das mein Image das ich vorher in diesen Fenster erstellt habe wird nicht mitgezogen.
Jemand eine Idee wie ich das trotzdem verwirklichen könnte?
Siehe Anhang! (Die Qualität ist natürlich besser wird aber leider hier nach *.jpg konvertiert)
EDIT:
So erstelle ich das Teil.
Delphi-Quellcode:
{$REGION 'SetDropImage'}
procedure SetDropImage(WinHandle: HWND; gSprite: ISkinSpriteContainer; filename: string;
Alpha: Integer);
var
Graphics, Img, ImgW, ImgH: Cardinal;
Count: Integer;
hMemDC, DesktopDC: HDC;
hBmp: HBitmap;
rw: TRect;
bf: BLENDFUNCTION;
lP, ptSrc: TPoint;
ls: size;
begin
hMemDC := 0;
DesktopDC := 0;
hBmp := 0;
GetWindowRect(WinHandle, rw);
ls.Cx := rw.Right - rw.Left;
ls.Cy := rw.Bottom - rw.Top;
lP.x := rw.Left;
lP.y := rw.Top;
ptSrc.x := 0;
ptSrc.y := 0;
Img := gSprite.gLoadImageFromFile(PWideChar(filename), ImgW, ImgH, 0);
if Img <> 0 then
begin
DesktopDC := GetDC(0);
hMemDC := CreateCompatibleDC(DesktopDC);
hBmp := CreateCompatibleBitmap(DesktopDC, ImgW, ImgH);
Count := ImgW div ImgH;
if ((Count * Integer(ImgH)) = Integer(ImgW)) then
ImgW := ImgH;
SelectObject(hMemDC, hBmp);
if (GDIP_CreateFromHDC(hMemDC, Graphics) = OK) then
begin
GDIP_SetInterpolationMode(Graphics, InterpolationModeHighQualityBicubic);
GDIP_DrawImageRectRectI(Graphics, Img, 0, 0, ls.cx, ls.cy, 0, 0, integer(ImgW), integer(ImgH),
2, nil, false, nil);
GDIP_DeleteGraphics(Graphics);
GDIP_DisposeImage(Img);
end;
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.AlphaFormat := AC_SRC_ALPHA;
bf.SourceConstantAlpha := Alpha;
UpdateLayeredWindow(WinHandle, DesktopDC, @lP, @ls, hMemDC, @ptSrc, 0, @bf, ULW_ALPHA);
end;
DeleteObject(hBmp);
DeleteDC(hMemDC);
ReleaseDC(0, DesktopDC);
end;
{$ENDREGION}
Wenn ich jetzt in meiner Winproc eine Message addiere um beim verschieben des Fensters das Image mit zu verschieben
Delphi-Quellcode:
WM_MOVING:
SetDropImage(bla, bla);
um ein neu zeichnen zu erzwingen nutzt das auch nichts das Image bleibt stehen wo es steht.
Hmmm. Sieht so aus als wenn ich HTCLIENT dafür nicht verwenden kann. grrr..
gruss