Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WinAPI Bitwise OR wie abfragen? (https://www.delphipraxis.net/190617-winapi-bitwise-wie-abfragen.html)

Codehunter 20. Okt 2016 12:13

WinAPI Bitwise OR wie abfragen?
 
Hallo!

Ich steh grad irgendwie auf dem Schlauch.
Zitat:

Zitat von MSDN
Code:
pdwResult [out]

    Receives a bitwise OR of flags

Wie fragt man das ab? So?

Delphi-Quellcode:
if (dwResultValue OR AnyFlagConst) <> 0 then ...


Grüße
Cody

Aviator 20. Okt 2016 12:18

AW: WinAPI Bitwise OR wie abfragen?
 
Wenn es nur um das eine Flag geht, dann kannst du das auch mit
Delphi-Quellcode:
if ((a and b) = b) then
prüfen. Dann ist sichergestellt, dass b gesetzt ist. Es ist aber trotzdem möglich, dass noch c, d und e ebenfalls gesetzt sind.

DeddyH 20. Okt 2016 12:43

AW: WinAPI Bitwise OR wie abfragen?
 
http://www.delphipraxis.net/95180-ef...bitmasken.html ;)

Codehunter 20. Okt 2016 13:03

AW: WinAPI Bitwise OR wie abfragen?
 
Hmmmmmmmmmmmmmm....

Zitat:

Zitat von DeddyH
Delphi-Quellcode:
if (Flags and flLesen) = flLesen then ...

Dann ist die Microsoft-Doku an dieser Stelle ein wenig unlogisch. Denn im vorliegenden Fall beherrscht der Monitor definitiv mehrere MonCaps. Prüfe ich aber mit

Delphi-Quellcode:
if (dwResult and MC_CAPS_NONE) = MC_CAPS_NONE then


dann ist das Ergebnis TRUE. Demnach würde der Monitor keine MonCaps beherrschen. Das ist aber Quark, weil dwResult = 7231. Das Problem liegt dann wohl darin, dass die Konstante MC_CAPS_NONE = 0 ist. Die Konstante müsste sinnigerweise eigentlich MC_HAS_CAPS heißen. Oder seh ich das falsch?

Kein Wunder dass ich da aufm Schlauch gestanden hab...

Grüße
Cody

DeddyH 20. Okt 2016 13:08

AW: WinAPI Bitwise OR wie abfragen?
 
Japp, die 0 ist für einen bitweisen Vergleich ungünstig (um es mal vornehm auszudrücken). Vielleicht ist sie dafür gedacht, im Vorfeld abzuprüfen, ob überhaupt irgendwelche Bits gesetzt sind. Das ist aber Spekulatius meinerseits.

Namenloser 20. Okt 2016 14:53

AW: WinAPI Bitwise OR wie abfragen?
 
Ist schon richtig und sinnvoll. Du fragst ja nicht, ob die Mengen gleich sind, sondern ob Menge b eine Teilmenge von Menge a ist. Und die leere Menge ist nun mal Teilmenge aller Mengen.

Wenn du prüfen willst, ob die Mengen gleich sind, dann prüfst du einfach
Delphi-Quellcode:
if dwResult = MC_CAPS_NONE then
.

einbeliebigername 20. Okt 2016 15:20

AW: WinAPI Bitwise OR wie abfragen?
 
Hallo,

Zitat:

Zitat von Codehunter (Beitrag 1351495)
Dann ist die Microsoft-Doku an dieser Stelle ein wenig unlogisch.

Ja das hat man bei Microsoft öfters. Gibt bei diesen bitwise OR Flags oft Konstanten die mehrer oder gar keine Bits enthalten. Blöd ist nur das die Doku die Werte der Konstanten nicht verrät.

einbeliebigername.

himitsu 20. Okt 2016 17:10

AW: WinAPI Bitwise OR wie abfragen?
 
Zitat:

Zitat von einbeliebigername (Beitrag 1351517)
Ja das hat man bei Microsoft öfters. Gibt bei diesen bitwise OR Flags oft Konstanten die mehrer oder gar keine Bits enthalten. Blöd ist nur das die Doku die Werte der Konstanten nicht verrät.

Du mußt nur die richtige Doku lesen. :stupid:

MSDN ist "nur" 'ne Funktionsbeschreibung und die genauen Definitionen findet man in den Headersfiles des Windows-SDK

Das PSDK vom Windows ist das, wogegen die C++-Leute immer kompilieren, damit sie ohne nachzudenken direkt die originalen Konstanten verwenden können und da nicht erst nach suchen müssen. :roll:

p80286 20. Okt 2016 17:11

AW: WinAPI Bitwise OR wie abfragen?
 
Zitat:

Zitat von einbeliebigername (Beitrag 1351517)
Hallo,

Zitat:

Zitat von Codehunter (Beitrag 1351495)
Dann ist die Microsoft-Doku an dieser Stelle ein wenig unlogisch.

Ja das hat man bei Microsoft öfters. Gibt bei diesen bitwise OR Flags oft Konstanten die mehrer oder gar keine Bits enthalten. Blöd ist nur das die Doku die Werte der Konstanten nicht verrät.

einbeliebigername.

Du must nur ein wenig weiter lesen: "If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag."https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Dann ist jedem MS-Programmierer klar,
Zitat:

dass die Konstante MC_CAPS_NONE = 0 ist.
:stupid:

Gruß
K-H

einbeliebigername 20. Okt 2016 19:13

AW: WinAPI Bitwise OR wie abfragen?
 
Hallo,

Zitat:

Zitat von himitsu (Beitrag 1351535)
Zitat:

Zitat von einbeliebigername (Beitrag 1351517)
Ja das hat man bei Microsoft öfters. Gibt bei diesen bitwise OR Flags oft Konstanten die mehrer oder gar keine Bits enthalten. Blöd ist nur das die Doku die Werte der Konstanten nicht verrät.

Du mußt nur die richtige Doku lesen. :stupid:

MSDN ist "nur" 'ne Funktionsbeschreibung und die genauen Definitionen findet man in den Headersfiles des Windows-SDK

Das PSDK vom Windows ist das, wogegen die C++-Leute immer kompilieren, damit sie ohne nachzudenken direkt die originalen Konstanten verwenden können und da nicht erst nach suchen müssen. :roll:

Ja, ich weiß doch der Sourcecode ist die Dokumentation. Aber die Funktionsbeschreibung liest sich manchmal doch besser. Und noch besser verstehen würde man das, wenn die Werte der Konstanten in der Funktionsbeschreibung auftauchen.

Zitat:

Zitat von p80286 (Beitrag 1351537)
Du must nur ein wenig weiter lesen: "If this function is supported, the GetMonitorCapabilities function returns the MC_CAPS_BRIGHTNESS flag."https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Dann ist jedem MS-Programmierer klar,
Zitat:

dass die Konstante MC_CAPS_NONE = 0 ist.
:stupid:

Also ich habe jetzt den logischen Zusammenhang nicht erkannt. Aber ich weiß, dass wenn ein NONE im Namen vorkommt, es in der Regel 0 ist. Bleiben nur die Ausnahmen von der Regel.

einbeliebigername.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Seite 1 von 2  1 2      

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