Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DwmGetColorizationColor benutzen (https://www.delphipraxis.net/147267-dwmgetcolorizationcolor-benutzen.html)

Culxxaw 4. Feb 2010 19:36


DwmGetColorizationColor benutzen
 
Hallo,

würde gerne die Funktion DwmGetColorizationColor benutzen. Nutze die DWMApi-Unit, die hier im Forum zu finden ist.

Auszug:
Delphi-Quellcode:
...
  TDwmGetColorizationColor = function(out pcrColorization: PDWORD; out pfOpaqueBlend: PBOOL): HRESULT; stdcall;
...
var
  DwmGetColorizationColor: TDwmGetColorizationColor;
...
  function DWM_GetColorizationColor(var pcrColorization: DWORD; var pfOpaqueBlend: BOOL): HRESULT;
Versuche die Funtion bisher so zu verwenden (das Ausgabeformat für farbe soll laut msdn "0xAARRGGBB" sein):
Delphi-Quellcode:
var
blend: bool;
farbe : dword;
begin
dwmapi.DwmGetColorizationColor(PDWORD(farbe),PBOOL(blend));

a := copy(IntToHex((integer(farbe)),8),1,2);
r := copy(IntToHex((integer(farbe)),8),3,2);
g := copy(IntToHex((integer(farbe)),8),5,2);
b := copy(IntToHex((integer(farbe)),8),7,2);
Dort kommt aber nur Unsinn heraus. Wollte nun fragen, ob jemand weiß, wie ich die Funktion richtig benutzen muss bzw. wie ich den dword-wert richtig umwandeln kann.

Danke im Voraus :wink:

Dezipaitor 4. Feb 2010 20:58

Re: DwmGetColorizationColor benutzen
 
Setze einfach @ vor die Variablen Farbe und blend, damit die Werte übergeben und nicht die Werte als Zeiger erkannt werden.

Culxxaw 4. Feb 2010 22:36

Re: DwmGetColorizationColor benutzen
 
Ersteinmal danke für die schnelle Antwort. :thumb:
Doch das behebt das Problem leider nicht. Könnte es sein, dass die Umwandlung mit "Integer()" nicht zulässig ist oder etwas in der Art. Oder habe ich noch einen Fehler bezüglich der Pointer eingebaut...

Dezipaitor 5. Feb 2010 10:18

Re: DwmGetColorizationColor benutzen
 
So, jetzt sehe ich erst, dass du var und Pointer gleichzeitig benutzt. D.h. du hast einen doppelten Zeiger. Also lass den Pointer (PDWORD und PBOOL) bei der Funktionsdeklaration weg und arbeite mit normalem DWORD und BOOL statt deren Zeiger (@). Denn var und out machen aus C Typenzeigern einfach nur noch den Typ.

Außerdem prüfe mit OleCheck(<fnct>); , ob der Aufruf erfolgreich war (unit ComObj).

Die Umrechnung mit Copy ist zudem auch net so glücklich.

Corpsman 5. Feb 2010 10:19

Re: DwmGetColorizationColor benutzen
 
deine Auswertung ist falsch :

Delphi-Quellcode:

A := (farbe and $FF000000) shr 24;
R := (farbe and $FF);
G := (farbe and $FF00) shr 8;
B := (farbe and $FF0000) shr 16;

Culxxaw 5. Feb 2010 15:58

Re: DwmGetColorizationColor benutzen
 
Danke für eure Hilfe Leute! :)

Ich hab das Ergebnis mal als Beitrag zusammengefasst:
Vista/Win7 Aero Farbe auslesen

Vielleicht nützt das ja noch dem ein oder anderem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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