![]() |
Kleine API-Fragen
1.) Wie ermittle ich die ID, wenn ich den Handle eines Fensters bereits habe?
2.) Wie lese ich die Styles / StylesEx eines Fensters aus, dessen Handle ich auch bereits habe? |
Re: Kleine API-Fragen
Zu 2): Für die normalen Styles
Delphi-Quellcode:
und für die ExStyles
Styles := GetWindowLong(Handle, GWL_STYLE);
Delphi-Quellcode:
Für die ID weiß ich leider nichts..
ExStyles := GetWindowLong(Handle, GWL_EXSTYLE);
|
Re: Kleine API-Fragen
zu 1)
Delphi-Quellcode:
ID := GetWindowLong(Handle, GWL_ID);
|
Re: Kleine API-Fragen
Ich danke Euch! :)
Aber wie werte ich den LONG-Wert nun aus? Ich meine, ich habe jetzt bsp.: 256 zurückbekommen. (Beim ermitteln der Styles) Wie komme ich jetzt zu den Angaben à la WS_BORDER... ? :thumb: |
Re: Kleine API-Fragen
Den Wert durchgehend unter Verwendung von and mit den Stale-Werten verknüpfen. Wenn das Resultat größer als Null ist, ist der gewählte Style gesetzt ;)
|
Re: Kleine API-Fragen
Ich habe dich so verstanden,
aber das ist wohl falsch. :???:
Code:
Wie meinst du's also genau? :) Danke!
// C++ - Variante
if((WS_THICKFRAME && Styles) > 0) ShowMessage("Der Style ist aktiv"); |
Re: Kleine API-Fragen
Genau so hab' ich das gemeint, aber so ist es am besten:
Delphi-Quellcode:
if Style and WS_BORDER = WS_BORDER then
ShowMessage('Style ist aktiv.'); |
Re: Kleine API-Fragen
Habe gerade praktisch ein paar Probleme... aber das passt schon. :)
Gibt es eine Möglichkeit, aus dem Long-Wert - bspw. 524288 - den Stylenamen (in diesem Fall WS_SYSMENU) zurückgeben zu lassen? Ist die Andverknüpfung logisch oder bitweise? Ersteres hätte doch keinen Sinn, oder? Mein Problem... Muss meine Variable "Style" nicht immer 0 sein, damit die "Ja, der Style ist aktiv"-Meldung erscheint? |
Re: Kleine API-Fragen
Die Verknüpfung ist Bitweise, also erübrigt sich deine zweite Frage: Nur wenn die Bits in Style dort gesetzt sind wie die Bits im Styleflag (z.B. WM_BORDER), gibt die Operation etwas über 0 zurück. Es liegt in der Natur der and-Operation, das als Ergebnis immer 0 herauskommt, wenn ein Operand 0 ist ;)
Aber jetzt zur ersten: Der einzige Weg ist, deinen Wert mit and nach allen möglichen Styles durchzurastern und dann den Namen des Styles zurückzugeben. |
Re: Kleine API-Fragen
sollte dann nicht:
Code:
besser
if Style and WS_BORDER = WS_BORDER then
ShowMessage('Style ist aktiv.');
Code:
heißen? :shock: Wie auch immer, es funktioniert jetzt! :=)
if Style and WS_BORDER > 0 then
ShowMessage('Style ist aktiv.'); -- Wenn ich nun sinnvoll alle Styles durchgehen möchte, sollte ich mit einer Schleife durch ein Array switchen, gell? :angel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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