AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zeichnen in Non-Client-Area unter Vista
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichnen in Non-Client-Area unter Vista

Ein Thema von MasterEvil · begonnen am 1. Dez 2008 · letzter Beitrag vom 25. Sep 2018
 
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Zeichnen in Non-Client-Area unter Vista

  Alt 1. Dez 2008, 12:41
Glaube ich eigentlich* nicht.

*ich wüsste dicht das man da etwas syncron. müsste.


Es kann aber auch an der Umsetzung des Quelltextes von C nach Delphi liegen...


Delphi-Quellcode:
implementation

{$R *.dfm}

// DWMFLIP3DWINDOWPOLICY
const
    DWMFLIP3D_DEFAULT = 0;
    DWMFLIP3D_EXCLUDEBELOW = 1;
    DWMFLIP3D_EXCLUDEABOVE = 2;

type
  DWMFLIP3DWINDOWPOLICY = DWMFLIP3D_DEFAULT..DWMFLIP3D_EXCLUDEABOVE;


// DWMNCRENDERINGPOLICY
const
  DWMNCRP_USEWINDOWSTYLE = 0;
  DWMNCRP_DISABLED = 1;
  DWMNCRP_ENABLED = 2;
  DWMNCRP_LAST = 3;

type
  TDWMNCRENDERINGPOLICY = DWMNCRP_USEWINDOWSTYLE..DWMNCRP_LAST;
  PDWMNCRENDERINGPOLICY = ^TDWMNCRENDERINGPOLICY;


// DWMWINDOWATTRIBUTE
const
  DWMWA_NCRENDERING_ENABLED = 1;
  DWMWA_NCRENDERING_POLICY = 2;
  DWMWA_TRANSITIONS_FORCEDISABLED = 3;
  DWMWA_ALLOW_NCPAINT = 4;
  DWMWA_CAPTION_BUTTON_BOUNDS = 5;
  DWMWA_NONCLIENT_RTL_LAYOUT = 6;
  DWMWA_FORCE_ICONIC_REPRESENTATION = 7;
  DWMWA_FLIP3D_POLICY = 8;
  DWMWA_EXTENDED_FRAME_BOUNDS = 9;
  DWMWA_LAST = 10;

type
  TDWMWINDOWATTRIBUTE = DWMWA_NCRENDERING_ENABLED..DWMWA_LAST;


var
  hDWMDLL: THAndle;

  DwmSetWindowAttribute: function(WindowHandle: HWND; dwAttribute: DWORD;
    pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall;


function DisableNCRendering(WindowHandle: HWND): BOOL;
var
  hr: HRESULT;
  ncrp: TDWMNCRENDERINGPOLICY;
begin
  Result := FALSE;
  if @DwmSetWindowAttribute <> nil then
  begin
    ncrp := DWMNCRP_ENABLED;

    //disable non-client area rendering on window
    hr := DwmSetWindowAttribute(WindowHandle, DWMWA_NCRENDERING_POLICY, @ncrp, sizeof(ncrp));

    Result := Bool( hr = S_OK );
  end;
end;

function DisableFlip3D(WindowHandle: HWND): BOOL;
var
  hr: HRESULT;
  flip: TDWMNCRENDERINGPOLICY;
begin
  Result := FALSE;
  if @DwmSetWindowAttribute <> nil then
  begin
    flip := DWMFLIP3D_EXCLUDEBELOW;

    //disable non-client area rendering on window
    hr := DwmSetWindowAttribute(WindowHandle, DWMWA_FLIP3D_POLICY, @flip, sizeof(flip));

    Result := Bool( hr = S_OK );
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  hDWMDLL := LoadLibrary('DWMAPI.DLL');
  if hDWMDLL <> 0 then
  begin
    @DwmSetWindowAttribute := GetProcAddress(hDWMDLL, 'DwmSetWindowAttribute');
    if not DisableNCRendering(Self.Handle) // das FormX.Handle
      then ShowMessage('DwmSetWindowAttribute konnte ggf. das Attribut nicht setzen.');

    // oder: DisableFlip3D(Self.Handle);
  end;

  if hDWMDLL <> 0 then FreeLibrary(hDWMDLL);
end;

end.
Angehängte Dateien
Dateityp: zip dwmsetwindowattributetest_195.zip (217,7 KB, 39x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  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 00:50 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