Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hexstring vb to Delphi (https://www.delphipraxis.net/87753-hexstring-vbulletin-delphi.html)

EWeiss 5. Mär 2007 18:21


Hexstring vb to Delphi
 
Hallo

möchte gerne wissen wie dieser string "&H200000" in delphi geschrieben wird.

%H200000 ??

oder wie?

EDIT:
oder anders wie wird der Hexstring von dieser Const ausgegeben

WS_VISIBLE := ??

gruss

turboPASCAL 5. Mär 2007 18:22

Re: Hexstring vb to Delphi
 
:gruebel:

Als String ?
Delphi-Quellcode:
s := '$200000';
// Edit: :-D

Delphi-Quellcode:
const
  WS_VISIBLE := $200000;
Allerdings ist WS_VISIBLE in der Unit Windows schon deklariert und da hat es den Wert $10000000 .

EWeiss 5. Mär 2007 18:24

Re: Hexstring vb to Delphi
 
Zitat:

Zitat von turboPASCAL
:gruebel: $200000

Ahhh gut !
Also alles vor den nummerischen wert mit % ersetzen.
wie wäre dann der wert bei WS_VISIBLE := %10000000 ?

gruss

Muetze1 5. Mär 2007 18:25

Re: Hexstring vb to Delphi
 
&H = hexadezimal in VB = $ in Delphi
% = ??? in VB

Ist letzteres eine Binärschreibweise (also duales System?)??

EWeiss 5. Mär 2007 18:27

Re: Hexstring vb to Delphi
 
Zitat:

Zitat von Muetze1
&H = hexadezimal in VB
% = ??? in VB

Ist letzteres eine Binärschreibweise (also duales System?)??

Danke!
Dann müßte das ja stimmen ....

Delphi-Quellcode:
    WStyleList.Add('WS_ACTIVECAPTION,%1');
    WStyleList.Add('WS_BORDER,%800000');
    WStyleList.Add('WS_CAPTION,%C00000');
    WStyleList.Add('WS_CHILD,%40000000');
    WStyleList.Add('WS_CLIPCHILDREN,%2000000');
    WStyleList.Add('WS_CLIPSIBLINGS,%4000000');
    WStyleList.Add('WS_DISABLED,%8000000');
    WStyleList.Add('WS_DLGFRAME,%400000');
    WStyleList.Add('WS_EX_ACCEPTFILES,%10');
    WStyleList.Add('WS_EX_APPWINDOW,%40000');
    WStyleList.Add('WS_EX_CLIENTEDGE,%200');
    WStyleList.Add('WS_EX_CONTEXTHELP,%400');
    WStyleList.Add('WS_EX_CONTROLPARENT,%10000');
    WStyleList.Add('WS_EX_DLGMODALFRAME,%1');
    WStyleList.Add('WS_EX_LAYERED,%80000');
    WStyleList.Add('WS_EX_LAYOUTRTL,%400000');
    WStyleList.Add('WS_EX_LEFT,%0');
    WStyleList.Add('WS_EX_LEFTSCROLLBAR,%4000');
    WStyleList.Add('WS_EX_LTRREADING,%0');
    WStyleList.Add('WS_EX_MDICHILD,%40');
    WStyleList.Add('WS_EX_NOACTIVATE,%8000000');
    WStyleList.Add('WS_EX_NOINHERITLAYOUT,%100000');
    WStyleList.Add('WS_EX_NOPARENTNOTIFY,%4');
    WStyleList.Add('WS_EX_OVERLAPPEDWINDOW,%300');
    WStyleList.Add('WS_EX_PALETTEWINDOW,%188');
    WStyleList.Add('WS_EX_RIGHT,%1000');
    WStyleList.Add('WS_EX_RIGHTSCROLLBAR,%0');
    WStyleList.Add('WS_EX_RTLREADING,%2000');
    WStyleList.Add('WS_EX_STATICEDGE,%20000');
    WStyleList.Add('WS_EX_TOOLWINDOW,%80');
    WStyleList.Add('WS_EX_TOPMOST,%8');
    WStyleList.Add('WS_EX_TRANSPARENT,%20');
    WStyleList.Add('WS_EX_WINDOWEDGE,%100');
    WStyleList.Add('WS_GROUP,%20000');
    WStyleList.Add('WS_GT,%30000');
    WStyleList.Add('WS_HSCROLL,%100000');
    WStyleList.Add('WS_ICONIC,%20000000');
    WStyleList.Add('WS_MAXIMIZE,%1000000');
    WStyleList.Add('WS_MAXIMIZEBOX,%10000');
    WStyleList.Add('WS_MINIMIZE,%20000000');
    WStyleList.Add('WS_MINIMIZEBOX,%20000');
    WStyleList.Add('WS_OVERLAPPED,%0');
    WStyleList.Add('WS_OVERLAPPEDWINDOW,%CF0000');
    WStyleList.Add('WS_POPUP,%80000000');
    WStyleList.Add('WS_POPUPWINDOW,%80880000');
    WStyleList.Add('WS_SIZEBOX,%40000');
    WStyleList.Add('WS_SYSMENU,%80000');
    WStyleList.Add('WS_TABSTOP,%10000');
    WStyleList.Add('WS_THICKFRAME,%40000');
    WStyleList.Add('WS_TILED,%0');
    WStyleList.Add('WS_TILEDWINDOW,%CF0000');
    WStyleList.Add('WS_VISIBLE,%10000000');
    WStyleList.Add('WS_VSCROLL,%200000');
will nur sicher gehen ;)

gruß

Muetze1 5. Mär 2007 18:32

Re: Hexstring vb to Delphi
 
Zitat:

Zitat von EWeiss
Dann müßte das ja stimmen ....

Wie ich vorhin schon fragte: ich weiss nicht, was das % bei dir anzeigen/bedeuten soll. In Delphi hat das % keine Bedeutung, von daher kann ich dir nicht sagen ob folgendes stimmt. Auch zeigst du eine Liste wo der Wert mit dem % als Teilstring angibst, von daher erschliesst sich mir keine Bedeutung um dir jetzt das zu bestätigen oder zu widersprechen.

inherited 5. Mär 2007 18:33

Re: Hexstring vb to Delphi
 
Du kannst das ganze noch mit
Delphi-Quellcode:
with WStyleList do
begin
  Add('blar...');
end;
abkürzen.

turboPASCAL 5. Mär 2007 18:36

Re: Hexstring vb to Delphi
 
Machs mal so und drück F1. :mrgreen:


Delphi-Quellcode:
WStyleList.Add( format('%s = $%8.8x', ['WS_CAPTION', WS_CAPTION]) );

EWeiss 5. Mär 2007 18:41

Re: Hexstring vb to Delphi
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von EWeiss
Dann müßte das ja stimmen ....

Wie ich vorhin schon fragte: ich weiss nicht, was das % bei dir anzeigen/bedeuten soll. In Delphi hat das % keine Bedeutung, von daher kann ich dir nicht sagen ob folgendes stimmt. Auch zeigst du eine Liste wo der Wert mit dem % als Teilstring angibst, von daher erschliesst sich mir keine Bedeutung um dir jetzt das zu bestätigen oder zu widersprechen.

Also ich möchte den Hex oder binärwert beispiel 'WS_VISIBLE' in einer TStringList addieren.
Dieser soll dann mit einem realen wert eines fensters verglichen werden wenn dieses über 'WS_VISIBLE' verfügt.
Anschließend theoretisch soll dieses verändert werden das es meinen ansprüchen entspricht.

Dafür brauche ich aber den realen wert so wie er bei Delphi binär oder Hexadezimal übergeben wird
wenn ich ihn abfrage.

% ist bei VB zum beispiel 'Test%' eine variable welche test als integer declariert.
& wäre als Beispiel 'Test&' ein string


@turboPASCAL
Delphi-Quellcode:
WStyleList.Add( format('%s = $%8.8x', ['WS_CAPTION', WS_CAPTION]) );
wird damit der reale wert in die liste addiert welche bei einer rückfrage mit dem originalen übereinstimmt ?

Quasi WStyleList.Add('WS_CAPTION', dein mit format errechnete wert?)
Nur dauert das formatieren nicht länger als wenn man den wert direkt übergibt wenn bekannt?

Oder was wolltest du mir damit zeigen?


gruss

Muetze1 6. Mär 2007 00:36

Re: Hexstring vb to Delphi
 
Ok, nun habe ich verstanden was du willst. Aber eine Frage: Warum fügst du die Werte der Konstanten als String ein? Dann hättest du danach bei jedem Eintrag wieder aufwändig den String schneiden müssen und wieder zurück wandeln müssen. Ich empfehle lieber die Konstanten in der Objekteigenschaften abzulegen.

lList -> TStringList;
Delphi-Quellcode:
  With lList Do
  Begin
    AddObject('WS_ACTIVECAPTION', TObject(WS_ACTIVECAPTION));
    AddObject('WS_BORDER', TObject(WS_BORDER));
    AddObject('WS_CAPTION', TObject(WS_CAPTION));
    ....
    AddObject('WS_VSCROLL', TObject(WS_VSCROLL));
  End;
Ok, nun zur Abfrage bezüglich eines Fensterhandles:

lWinStyle = Windows Style des Fenster welches analysiert werden soll
i = Integer
lConst = Cardinal
ListBox1 = AusgabeListBox
Delphi-Quellcode:
  For i := 0 To Pred(lList.Count) Do
  Begin
    lConst := Cardinal(lList.Objects[i]);

    If ( lWinStyle And lConst ) = lConst Then
      ListBox1.Items.Add(lList[i]);
  End;
Wenn du in der Liste auch noch den konstanten Wert haben willst, dann nutze die Format() Angabe von turboPASCAL.

EWeiss 6. Mär 2007 01:09

Re: Hexstring vb to Delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
@Muetze1
Danke für die Infos..

Deine lösung ist interessant ..
Wenn es jetzt wirklich um die ganzen Windowstyle gehen würde wie oben aufgeführt würde ich meinen source nochmal ändern
aber bei den fünf zeilen macht es eigentlich keinen großen unterschied.

Ich habs jetzt so gelößt.

Ich fülle die Liste!
Delphi-Quellcode:
procedure FillList;
Var
  P : Integer;
  X : Integer;

begin

    WStyleList.Clear;
    WValue.Clear;

    with WStyleList do
    begin
       Add('WS_BORDER' + ',' +  format('$%8.8x', [WS_BORDER]));
       Add('WS_DLGFRAME' + ',' +  format('$%8.8x', [WS_DLGFRAME]));
       Add('WS_EX_TOOLWINDOW' + ',' +  format('$%8.8x', [WS_EX_TOOLWINDOW]));
       Add('WS_THICKFRAME' + ',' +  format('$%8.8x', [WS_THICKFRAME]));
       Add('WS_SIZEBOX' + ',' +  format('$%8.8x', [WS_SIZEBOX]));
    end;

    For P := 0 To WStyleList.Count - 1 do
    begin
        X := pos(',',WStyleList.Strings[P]);
        WValue.Add(AnsiMidStr(WStyleList.Strings[P], X + 1, strlen(PChar(WStyleList.Strings[P]))));
        WStyleList.Strings[P] := AnsiMidStr(WStyleList.Strings[P], 1, X - 1);
    end;

end;
dann überprüfe ich die WindowStyle!
Delphi-Quellcode:
procedure GetStyle(handle: HWND);
Var
   P     : Integer;
   nIndex : integer;
   Ivalue : integer;
   Style : integer;

begin

   LBStyle.Clear;

   For P := 0 To WValue.Count - 1 do
    begin
        nIndex := GWL_STYLE;
        If Pos('_EX_', WStyleList.Strings[P]) <> 0 Then
           nIndex := GWL_EXSTYLE;

        Style := GetWindowLongA(handle, nIndex);
        Ivalue := StrToInt(WValue.Strings[P]);

        If (Style <> 0) And (Ivalue <> 0) Then
          LBStyle.Add(WStyleList.Strings[P]);

           ChangeWindowStyle(handle, nIndex, Style);
    end;

end;
anschließend wird das Fenster wenn die einträge vom Fenster existieren verändert.
Delphi-Quellcode:
procedure ChangeWindowStyle(handle: HWND; nIndex: Integer; Style: Integer);
Var
    lngStyle : integer;
    Rect    : TRECT ;

begin
    lngStyle := GetWindowLong(handle, nIndex);

    If (lngStyle <> 0) And (Style <> 0) Then
        lngStyle := lngStyle - Style
    Else
        lngStyle := lngStyle Or Style;

    GetWindowRect(handle, Rect);
    SetWindowLong(handle, nIndex, lngStyle);
    SetWindowPos(handle,
                 0,
                 Rect.Left,
                 Rect.Top,
                 Rect.Right - Rect.Left,
                 Rect.Bottom - Rect.Top,
                 SWP_FRAMECHANGED);
End;
Habe jetzt nur noch ein problem das ich nicht schnell genug an das Window handle des Plugins komme
muss mir da noch was einfallen lassen.
Einen Thread stoppen geht ja schlecht oder ?
So dass man eventuell schneller an das Windowhandle gelangen kann.

Man könnte das Window auch unverändert in den Container schieben nur dann
könnte man einfluss auf das Window nehmen das sollte man dann besser vermeiden.

Sicherlich kann man das noch verbessern ;)

Das ganze sieht dann geändert so aus!


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