Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Static Control PNG aufsetzen

  Alt 7. Jun 2019, 14:49
Zitat:
Eventuell TStaticText? Dieses ist von TWindowControl abgeleitet
Gar nichts davon deshalb bin ich hier in der Rubrik Win32\64 API.
Meinst du mit "Static control" ein TGraphicControl? Also eines ohne Window handle?
Ich erkläre es anhand von einem Beispiel bzw. schaut auf den Quelltext.
Mein bestreben ist ein Image auf einem Nicht Client Area, Client Area, oder beides gleichzeitig zu zeichnen. PNG.. nicht Bitmap(bmp)

Delphi-Quellcode:
function TSkinStaticImage.CreateWindow(ParentHandle: HWND): HWND;
var
  hBmp: HBitmap;
// ARgn: HRGN;
begin

  if SkinEngine.RegisterButton(SKStaticImage) then
  begin
    // Erstelle das GDIPLUS image vom Dateinamen
    if (Width > 0) and (Height > 0) then
    begin
      hBmp := SkinEngine.FitBitmapFromFile(PWideChar(ImagePath), Width, Height);
      Img := GDIP_CreateImageFromHBITMAP(0, hBmp);
    end else
    Img := SkinEngine.AddResource(ParentHandle, PWideChar(ImagePath));


    if Img <> 0 then
    begin
      Style:= WS_CHILD or WS_VISIBLE or SS_BITMAP;

      FHStaticImage := CreateWindowEx(WS_EX_TRANSPARENT, SKStaticImage, nil,
        Style, Left, Top, Width, Height, ParentHandle, DlgItemID, SkinEngine.skInstance, nil);

     if FHStaticImage <> 0 then
      begin
        SkinEngine.SetImageProperty(Handle, PROP_IMAGE_BACK, LONG_PTR(Img));
        SkinEngine.SetImageProperty(Handle, PROP_STYLE, SS_BITMAP);
        SkinEngine.SetImageProperty(Handle, PROP_STATEMAX, 1);
// SkinEngine.SetProperty(Handle, PROP_REGION, 1);

        if hBmp = 0 then
          GdipCreateHBITMAPFromBitmap(img, hBmp, 0);

        SendMessage(Handle, STM_SETIMAGE, WPARAM(IMAGE_BITMAP), LPARAM(hBmp));
// ARgn := SkinEngine.RegionFromBitmap(hBmp, $FF00FF);
// SetWindowRgn(Handle, ARgn, true);
//
// DeleteObject(ARgn);
      end;
     end else
     begin
       // Lösche das Image
       SkinEngine.DeleteResource(Handle, Img);
     end;
  end;

  result := FHStaticImage;

end;
Den Teil um die Region abhängig von der Farbe auszuschneiden habe ich mal deaktiviert weil es nicht funktioniert.
Wenn ich LoadImage\W verwenden würde mit dem Flag IMAGE_BITMAP akzeptiert diese nur ein reines Bitmap also PNG geht dann ja nicht.

gruss

Geändert von EWeiss ( 7. Jun 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat