1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Symolgoy

Beiträge von Symolgoy

  • Eingebettete GUIs

    • Symolgoy
    • 19. Februar 2019 um 14:57
    Zitat von BugFix

    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:

  • Eingebettete GUIs

    • Symolgoy
    • 19. Februar 2019 um 13:03

    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.

  • Eingebettete GUIs

    • Symolgoy
    • 19. Februar 2019 um 09:48

    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
    Code
    Func __GUICreate_Subform(ByRef $oObj, $hParent)
        ;what type of control should we create...
        With $oObj.Item("body")
            If .Exists("active") Then
                If .Item("active") == "true" Then
                    If $bDebug Then ConsoleWrite("Create Subform: " & $oObj.Item("id") & @CRLF)
    
                    Switch .Item("type")
                        Case "form"
                            ;GUISwitch($hParent)
                            Local $hwnd = GUICreate(    .Item("title"), _
                                                        .Item("dimensions").Item("left"), _
                                                        .Item("dimensions").Item("top"), _
                                                        .Item("dimensions").Item("width"), _
                                                        .Item("dimensions").Item("height"));, _
                                                        ;$WS_POPUP, _
                                                        ;$WS_EX_MDICHILD, _
                                                        ;$hParent)
    
                            .Item("hwnd") = String($hwnd)
    
                            ConsoleWrite("hwnd: " & $hwnd & @CRLF & "hwnd(int): " & Int(.item("hwnd")) & @CRLF & "hwnd(hex): " & IsHWnd(Hwnd(.item("hwnd"))) & @CRLF)
    
                            ;create the controls for the subform (if any)
                            For $i = 0 To UBound(.Item("controls")) - 1
                                ;check (for safety) if the datastructure is correct
                                If IsObj(.Item("controls")[$i]) Then
                                    ;create the control in a seperate function for cleaner code
                                    Local $oControl = .Item("controls")[$i]
                                    __GUICreate_Control($oControl)
    
                                    ;errors?
                                    If @error Then Return SetError(2, 0, 0)
                                EndIf
                            Next
    
                            ;DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle(.Item("hwnd")), "hwnd", WinGetHandle(HWnd($hParent)))
                            GUISetState(@SW_SHOW, $hwnd)
                    EndSwitch
                EndIf
            EndIf
        EndWith
    EndFunc
    Alles 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...

  • Eingebettete GUIs

    • Symolgoy
    • 18. Februar 2019 um 09:04

    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.

    GUIs.png

    Kann mir da vielleicht jemand helfen?

    Dateien

    d2.0.zip 8,67 kB – 212 Downloads

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™