Eingebettete GUIs

  • Hallo Zusammen,

    ich habe mal versucht mir eine kleine UDF zu schreiben, die mir eine GUI aus einer JSON erzeugen kann. (Auch mit Unterformularen und Child-GUIs). Jetzt will das Ganze aber nicht so wie ich.

    Das Problem ist wie Folgt: Ich möchte eine Child-GUI mit (WS_POPUP Syle) in die Main GUI einbetten. ich habe dazu auch im Anhang in der .zip mal eine test.au3 dort ist das was ich machen möchte minimalistisch gezeigt. In dieser test.au3 funktioniert das Ganze auch. in dem "Hauptprojekt" jedoch nicht. Vom prinzip her mache ich dort dasselbe wie in dem Beispiel. Ich gehe die JSON durch und erzeuge mir die Child-GUIs mit denselben Styles etc., nur werden diese entweder total verbuggt angezeigt oder gar nicht.

    Wenn man z.B. in der gui.au3 hingeht und dort die Zeilen 124-126 entfernt/auskommentiert und in Zeile 144 ein Guisetstate(@SW_SHOW) macht, dann werden die GUIs komplett verbuggt angezeigt.

    Kann mir da vielleicht jemand helfen?

  • Ich habe mal deine Funktion _GUICreate_FromXML ein wenig umgebaut, um dir das Problem vor Augen zu führen...

    Hier der rel. Teil mit den Änderungen:

    Die Ausgabe der drei von mir eingefügten ConsoleWrite sieht dann so aus:

    Kommst du nun drauf, warum es so nicht funktioniert? ;)

    Einmal editiert, zuletzt von Bitnugger (18. Februar 2019 um 19:36)

  • Hey Bitnugger,


    danke für Deine Antwort. Außerdem fällt mir auf, dass die Funktion falsch heißt :D.

    Ja dieser Vermutung bin ich auch schon nachgegangen. Ich habe die Funktion __GUICreate_Subform und _GUICreate_FromXML Ähnlich wie Du angepasst:

    Spoiler anzeigen

    Meine Ausgabe produziert nun Folgendes:

    Code
    Create Subform: test1
    hwnd: 0x000500E6        <-- Das Original Handle von GUICreate()
    hwnd(int): 327910        
    hwnd(hex): 0x000500E6      <-- Das was ich zurückkonvertiert habe
    hwnd(hex): 1                <-- mit IsHwnd kommt auch eine 1 zurück
    Create Subform: test2
    hwnd: 0x00060424
    hwnd(int): 394276
    hwnd(hex): 0x00060424

    Trotzdem tritt der Fehler noch auf. Also vermute ich, dass es nicht (mehr) der Fehler ist. Und da ich ja nun auch das richtige Handle an GuiSetState übergebe sollte die GUI ja zumindest richtig angezeigt werden... das macht sie aber nicht...

    5 Mal editiert, zuletzt von Symolgoy (19. Februar 2019 um 10:04)

  • Trotzdem tritt der Fehler noch auf. Also vermute ich, dass es nicht (mehr) der Fehler ist.

    ?

    hwnd(hex): 1 <-- mit IsHwnd kommt auch eine 1 zurück

    Ja klar, du gehst ja auch hin und konvertierst den Wert vorher zu einem Handle...

    ConsoleWrite("hwnd: " & $hwnd & @CRLF & "hwnd(int): " & Int(.item("hwnd")) & @CRLF & "hwnd(hex): " & IsHWnd(Hwnd(.item("hwnd"))) & @CRLF)

    Du musst bei allen Funktionen, denen ein Handle übergeben wird, dein *.Item("hwnd") vorher in ein Handle konvertierten - hast du das gemacht?

    Du hast aber auch bei GUICreate die Parameter width und height mit left und top vertauscht... deshalb werden die GUIs an falscher Position erstellt, ausserhalb des sichtbaren Bereichs!

    Im Anhang findest du ein korrigiertes Paket, bei dem soweit alles funktioniert... aber immer noch mit Fehlern behaftet... sieh dir die Kommentare an, die ich für dich hinzugefügt habe.

  • Hallo Bitnugger,

    ja ein Hwnd vor .Item("hwnd") hatte ich überall hinzugefügt. Aber ich denke der Dreher von width, height und left, top war das Problem... (left und top sind jeweils 0...)

    :Face:

    Manchmal hasse ich mich selbst, wenn sich am Ende herausstellt, dass der Fehler nur ein ganz blöder Dreher war. Wie dem auch sei. Vielen Dank für deine Hilfe.

  • Manchmal hasse ich mich selbst, wenn sich am Ende herausstellt, dass der Fehler nur ein ganz blöder Dreher war.

    Quatsch... dann müsste ich mich ja mindestens 5000x mal mehr hassen, denn mir ist er ja auch erst nach 10x Hinschauen aufgefallen... und es sind übrigens immer die banalsten Fehler, die schwer zu finden sind. ;)

    • Offizieller Beitrag

    der Dreher von width, height und left, top war das Problem

    MIt dem Fehler bist du nicht allein - und du wirst ihn auch in 10 Jahren das eine oder andere Mal wiederholen. Denn er ist sehr tückisch in der AutoIt-Syntax "vorhergesehen". Bei Erstellung der GUI wird zuerst width, height und dann left, top angegeben, bei GUI-Ctrl entgegengesetzt erst left, top und dann width, height. Darüber zu stolpern ist also gar nicht so selten. ;)

  • MIt dem Fehler bist du nicht allein - und du wirst ihn auch in 10 Jahren das eine oder andere Mal wiederholen. Denn er ist sehr tückisch in der AutoIt-Syntax "vorhergesehen". Bei Erstellung der GUI wird zuerst width, height und dann left, top angegeben, bei GUI-Ctrl entgegengesetzt erst left, top und dann width, height. Darüber zu stolpern ist also gar nicht so selten. ;)

    Ja inkonsitenz ist eine andere Sache, aber das ich zuerst alles andere Überprüft habe und nicht darauf gekommen bin lässt mich etwas aufstoßen... Gott sei Dank wurde der "Fehler" ja jetzt gefunden.:part::part: