AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DWM Shadow

Ein Thema von EWeiss · begonnen am 18. Mär 2017 · letzter Beitrag vom 18. Mär 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

DWM Shadow

  Alt 18. Mär 2017, 15:45
Ich hab ne Funktion für DWM Shadow erstellt aber der Schatten wird nicht gezeichnet.
woran liegst?

Schatten wird erstellt nach der Anzeige des Window.
Delphi-Quellcode:
// Window Anzeigen
SKAERO_ShowMainWindow(gp.hMain, 5);
SKAERO_EnableShadow(gp.hMain);
WindowStyle
dwStyle := WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;
Delphi-Quellcode:
function DWM_ExtendFrameIntoClientArea(hWnd: hWnd; ATopHeight, ALeftWidth, ABottomHeight,
  ARightWidth: Integer): HRESULT;
var
  Margins: TMargins;
begin
  Margins.cyTopHeight := ATopHeight;
  Margins.cyBottomHeight := ABottomHeight;
  Margins.cxLeftWidth := ALeftWidth;
  Margins.cxRightWidth := ARightWidth;
  Result := S_FALSE;

  if IsDWMloaded then
    Result := DwmExtendFrameIntoClientArea(hWnd, @Margins);
end;
Delphi-Quellcode:
function TSkinEngine.EnableShadow(WinHandle: hWnd): HRESULT;
var
  val: TDWMNCRENDERINGPOLICY;
begin

  Result := -1;
  if IsCompositionEnabled then
  begin
    val := DWMNCRP_ENABLED;
    DwmSetWindowAttribute(WinHandle, DWMWA_NCRENDERING_POLICY, @val, DWMWA_ALLOW_NCPAINT);

    Result := DWM_ExtendFrameIntoClientArea(WinHandle, -1, -1, -1, -1); // result := 0 sollte also in Ordnung sein.
  end;
end;
gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: DWM Shadow

  Alt 18. Mär 2017, 23:16
So geht es.
Delphi-Quellcode:
function TSkinEngine.EnableShadow(WinHandle: hWnd): HRESULT;
var
  Policy: LongInt;
begin

  Result := -1;
  if IsCompositionEnabled then
  begin
    Policy := DWMNCRP_ENABLED;
    DwmSetWindowAttribute(WinHandle, DWMWA_NCRENDERING_POLICY, @Policy, SizeOf(Policy));

    Result := DWM_ExtendFrameIntoClientArea(WinHandle, -1, -1, -1, -1);
  end;
end;
irgendwie erschließt sich das mir nicht.
Meiner Meinung nach wäre das richtig.
Delphi-Quellcode:
var
  Policy: TDWMNCRENDERINGPOLICY;
Dann bekomme ich aber keinen Schatten.

Bei dieser Version gibt es aber auch wieder ein Problem.
Sobald ich ein anderes Fenster öffne verschwindet der Schatten von meinem Window.

Seltsam das ganze.

Auch das ist seltsam funktioniert genauso mit dem vorher genannten Problem

DwmSetWindowAttribute(WinHandle, DWMWA_NCRENDERING_POLICY, @Policy, DWMWA_ALLOW_NCPAINT);

Irgendwie weis keiner was nun richtig übergeben werden muss.
Sobald irgendein anderes Fenster aktiviert wird ist der Schatten weg. (Auch das der IDE)

gruss

Geändert von EWeiss (18. Mär 2017 um 23:22 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz