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 Styles (https://www.delphipraxis.net/11456-styles.html)

Dax 7. Nov 2003 06:18


Styles
 
Wenn ich folgenden Code habe:
Delphi-Quellcode:
procedure get;
var
  Style, StyleEx: cardinal;
begin
  Style := getwindowlong(handle, gwl_style);
  StyleEx := getwindowlong(handle, gwl_styleex);
end;
Wie kann ich aus Style und StyleEx die benutzen (Ex)Styles (z.B.: WS_VISIBLE or WS_DISABLED) zurückerhalten?

sakura 7. Nov 2003 08:51

Re: Styles
 
Einfach mit AND vergleichen:

Delphi-Quellcode:
procedure get;
var
  Style, StyleEx: cardinal;
begin
  Style := getwindowlong(handle, gwl_style);
  if Style and (WS_VISIBLE or WS_DISABLED) = (WS_VISIBLE or WS_DISABLED) then
    // ... hehe, beide sind da ;-)
...:cat:...

Dax 10. Nov 2003 06:14

Re: Styles
 
Ich will aber nicht jede möglichkeit einzeln durchspielen, sondern das einer schleife überlassen. Nur wie??

choose 10. Nov 2003 10:39

Re: Styles
 
Was willst Du denn mit dem Ergebnis machen?
  • Wenn Du es in einer Liste oä ausgeben willst, musst Du ohnehin noch den Wert von zB WS_VISIBLE in einen Bezeichner übersetzen...
  • Du könntest Du den Test von sakura über eine Array von Integers durchführen, zB
    Delphi-Quellcode:
    procedure CheckWindowStyle(const AStyle: Cardinal;
      const arIdents: array of Integer);
    var
      i: Integer;
    begin
      for i:= Low(arIdents) to High(arIdents) do
        if SakurasTest then
          //do sth here...
    end;
    mit
    Delphi-Quellcode:
    CheckWindowStyle(myStyle, [SW_VISIBLE, SW_DISABLED]);
  • Du könntest über die einzelnen Bits iterieren und
  • bestimmt noch 42 andere Verfahren anwenden...

Es hängt davon ab, was Du mit dem Ergebnis vorhast.

Dax 11. Nov 2003 06:13

Re: Styles
 
@sakura: Funktioniert!
@choose: Funktioniert nicht(bei mir).

choose 11. Nov 2003 06:59

Re: Styles
 
Zitat:

Zitat von gecko2000
@choose: Funktioniert nicht(bei mir).

Was genau funktioniert nicht bei Dir?

Dax 13. Nov 2003 11:44

Re: Styles
 
Er bringt mir bei dieser Funktion jedes mal bei der Array-Stelle eine Zugriffsverletzung.

choose 13. Nov 2003 17:06

Re: Styles
 
Welche "Array-Stelle" meinst Du? Handelt es sich um einen Laufzeitfehler oder etwas, das beim Kompilieren erkannt und abgelehnt wird?

Dax 14. Nov 2003 06:21

Re: Styles
 
1: Wenn das array zum ersten mal ge-accest wird.
2: Nein.(schön wär's) Er bringt mir den Fehler erst, wenn ich den ersten Wert im array auslesen will...

choose 14. Nov 2003 08:00

Re: Styles
 
Probier das
Delphi-Quellcode:
procedure CheckWindowStyle(const AStyle: Cardinal;
  const arIdents: array of Integer);
var
  i: Integer;
begin
  for i:= Low(arIdents) to High(arIdents) do
    showmessage(Format('AStyle: %.8x, arIdent[%d]=%.8x',
      [AStyle, i, arIdents[i]]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckWindowStyle( $f00, [WS_VISIBLE, WS_DISABLED]);
end;
Wenn es klappen sollte, liegt der Fehler wahrscheinlich in dem Teil, der auf die gesetzten Bits prüft...
Du bekommst also einen Fehler zur Laufzeit (Exception)? Wie genau lautet dessen Bezeichnung?


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