AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte WatchKit... (Uhren Baukasten)
Thema durchsuchen
Ansicht
Themen-Optionen

WatchKit... (Uhren Baukasten)

Ein Thema von EWeiss · begonnen am 9. Jun 2018 · letzter Beitrag vom 27. Aug 2018
 
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: WatchKit... (Uhren Baukasten)

  Alt 11. Jun 2018, 20:31
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

Geändert von EWeiss (11. Jul 2019 um 15:52 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz