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. JBO

Beiträge von JBO

  • IniWrite Problem

    • JBO
    • 14. Januar 2022 um 11:01

    Hallo Zusammen,

    ich steh mal wieder auf dem Schlauch :(

    Ich möchte den Value eines Key's in einer Ini-Datei vergleichen. Bei Ungleichheit soll der Key/die Section gelöscht und neu geschrieben werden (die Section hat nur einen Key). Aber das tut er nicht.

    Der Quellcode für das Script sieht so aus:

    C
    #include <File.au3>
    #include <FileConstants.au3>
    
    $aExcel = IniReadSection( "test.ini", "EXCEL" )
    $pExcelDir = $aExcel[ 1 ][ 1 ]
    Local $sExcelFile = FileOpenDialog( "Select Excel-File", $pExcelDir, "Excel-File (*.xlsx; *.xls)", $FD_FILEMUSTEXIST )
    Local $pExcelFilePath = _PathSplit( $sExcelFile, "", "", "", "" )[ 1 ] & _PathSplit( $sExcelFile, "", "", "", "" )[ 2 ]
    ConsoleWrite( $pExcelDir & @CRLF & $pExcelFilePath & @CRLF & StringCompare( $pExcelDir, $pExcelFilePath ) & @CRLF )
    If Not ( $pExcelDir == $pExcelFilePath ) Then; And Not @error And Not $sExcelFile == "" Then
       IniDelete( "test.ini", "EXCEL" )
       IniWrite( "test.ini", "EXCEL", "ExcelDir", $pExcelFilePath )
       $pExcelDir = $pExcelFilePath
    EndIf
    Alles anzeigen

    Und die Ini-Datei so:

    Code
    [EXCEL]
    ExcelDir=.\

    Durch das "ConsoleWrite" sehe ich, dass sowohl die beiden Strings unterschiedlich sind, als auch der StringCompare ein vernünftiges Ergebnis liefert. Denoch wird entweder das If nicht ausgeführt, oder das Schreiben in die Ini-Datei.

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 14. Januar 2022 um 10:19
    Zitat von Moombas

    Also, ich habe das Beispiel von Velted mal probiert und bei mir zerschießt sich die GUI nicht.

    Dann probier mal bitte meins:

    C
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <ColorConstants.au3>
    
    Global $g_hGUI, $g_hGUI1, $g_idButton1, $g_idButton2, $g_hGUI2, $g_idMsgButton, $FileMenu, $OpenGUI1, $OpenGUI2
    
    example()
    
    Func example()
       $g_hGUI = GUICreate("GUI", 200, 217, 100, 100, Default, BitOR($WS_EX_COMPOSITED,$GUI_WS_EX_PARENTDRAG))
       $Menu1 = GUICtrlCreateMenu( "GUI" )
          $OpenGUI1 = GUICtrlCreateMenuItem( "Open GUI1", $Menu1 )
          GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
          $OpenGUI2 = GUICtrlCreateMenuItem( "Open GUI2", $Menu1 )
       $Menu2 = GUICtrlCreateMenu( "Help" )
          $About = GUICtrlCreateMenuItem( "About", $Menu2 )
       GUISetState(@SW_SHOW)
    
       ;GUI1
       $g_hGUI1 = GUICreate("GUI 1", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idMsgButton = GUICtrlCreateButton("Msgbox 1", 10, 10, 80, 30)
       $g_idButton1 = GUICtrlCreateButton("Show GUI 2", 10, 60, 80, 30)
       GUISetState(@SW_SHOW)
    
       ;GUI2
       $g_hGUI2 = GUICreate("GUI 2", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idButton2 = GUICtrlCreateButton("Show GUI 1", 10, 10, 80, 30)
    
       ;About
       $g_hAbout = GUICreate("About", 100, 100, 10, 10, BitOR($WS_POPUP,$WS_THICKFRAME), $WS_EX_MDICHILD , $g_hGui)
       $idAboutBox = _GUICtrlRichEdit_Create( $g_hAbout, "About", 0, 0, 100, 70, BitOR( $ES_READONLY, $ES_MULTILINE ) )
       _GUICtrlRichEdit_SetCharColor( $idAboutBox, _WinAPI_SwitchColor( $COLOR_RED ) )
       _GUICtrlRichEdit_AppendText( $idAboutBox, @CRLF & "Hallo Welt" )
       Global $btOK = GUICtrlCreateButton('OK', 10, 75, 80, 20)
    
       Local $aMsg
    
       While 1
            $aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
            If Not IsHWnd($aMsg[1]) Then ContinueLoop ; preventing subsequent lines from processing when nothing happens
    
            Switch $aMsg[1] ; check which GUI sent the message
                Case $g_hGUI
                   Switch $aMsg[0]
                      Case $GUI_EVENT_CLOSE ; If we get the CLOSE message from this GUI: $g_hGUI1 ...
                            ExitLoop ;  ... exit the loop and thus exit the program
                      Case $OpenGUI1
                            GUISetState(@SW_HIDE, $g_hGUI2)
                            GUISetState(@SW_SHOW, $g_hGUI1)
                            GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                      Case $OpenGUI2
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                      Case $About
                            GUISetState(@SW_SHOW, $g_hAbout)
                   EndSwitch
                Case $g_hGUI1
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI1
                         Case $g_idMsgButton
                            MsgBox($MB_OK, "MsgBox 1", "Test from GUI 1")
                         Case $g_idButton1
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                    EndSwitch
                Case $g_hGUI2
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI2
                    Case $g_idButton2
                         GUISetState(@SW_HIDE, $g_hGUI2)
                         GUISetState(@SW_SHOW, $g_hGUI1)
                         GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                         GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                   EndSwitch
                Case $g_hAbout
                      If $aMsg[0] = $btOK Then GUISetState(@SW_HIDE, $g_hAbout)
            EndSwitch
        WEnd
    EndFunc   ;==>example
    Alles anzeigen
  • GUI zerschießt sich beim Minimieren

    • JBO
    • 13. Januar 2022 um 17:09

    ... OK, habs ausprobiert, scheint von der Wirkung her keinen großen (sichtbaren) Unterschied zu machen, ist aber bestimmt die elegantere Lösung ;)

    Allerdings bleibt das Problem, dass sich das GUI beim verschieben des Fensters zerschießt und auch so bleibt, auch wenn ich ein anderes GUI aufrufe (Untermenü). Sowohl das UnterGUI, als auc das HauptGUI sind weg. Aber das ist jetzt nicht soooo furchbar wichtig, dann darf der Anwender das GUI eben nicht verschieben :D

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 13. Januar 2022 um 16:59
    Zitat von Velted

    Zum Thema "Übrigens": Was funktioniert an diesem Beispiel nicht korrekt?

    Also bei mir hat dein Beispiel jetzt auch funktioniert. Mein GUI zerlegt sich, sobald ich das Fenster bewege. Ich probier mal deine Methode aus, um Minimieren und Maximieren auszublenden, vlt. hat es ja was mit meiner Methode zu tun!?

  • Pfad eines laufenden Programms ermitteln

    • JBO
    • 13. Januar 2022 um 11:49
    Zitat von Moombas

    JBO: Das müsste auch gehen, da der komplette Pfad zurück gegeben wird. Bräuchtest also nur den Dateinamen entfernen, wenn du nur den Pfad brauchst.

    Naja, ich muss noch mehr mit dem Pfad machen, als nur Dateinamen entfernen, aber das kann ich sogar ;)

  • Pfad eines laufenden Programms ermitteln

    • JBO
    • 13. Januar 2022 um 11:40
    Zitat von Moombas

    Mit den richtigen Google "Begriffen" (autoit pfad eines programms über pid) gefunden :P

    Thema

    Anwendungspfad anhand der PID ermitteln

    Hi,
    hier mal eine Möglichkeit mit der PID den Pfad der Anwendung zu ermitteln.
    Wird keine PID übergeben, gibt die Funktion den Pfad für die Anwendung des aktiven Fensters zurück.

    (Versteckter Text)

    Edit: Es gibt ja kaum was, was nicht schon jemand getan hat ;(
    Habe gerade eine ähnliche Lösung (1 Monat alt) im EN-Forum gefunden. Link
    Naja, ich habs als Zweiter getan - der andere als Vorletzter. :rofl:
    BugFix
    1. April 2009 um 19:18

    oh, vielen Dank! Ich bin mit "autoit pfad eines laufenden programms" nicht weit gekommen, hab an "über PID" nicht gedacht :rolleyes:

  • Pfad eines laufenden Programms ermitteln

    • JBO
    • 13. Januar 2022 um 11:30

    Hallo Zusammen,

    ist es möglich herauszufinden, in welchem Pfad ein aktuell laufendes Programm liegt?

    Ich möchte überprüfen, ob ein Programm bereits läuft, das geht ja einfach mit

    Code
    $iPID = ProcessExists( WinGetProcess( "Programmname" ) )

    dabei kommt ein Wert > 0 raus. Allerdings möchte ich jetzt wissen, in welchem Pfad dieses Programm liegt. Komme ich irgendwie über die Process ID oder den hWnd an den Pfad?

    VG

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 13. Januar 2022 um 10:12
    Zitat von Velted

    Bemerkenswert! :Glaskugel:

    Mal der Reihe nach:

    1. Wir erstellen ein Fenster mit dem Stil $WS_SIZEBOX: 0x00040000. Damit ist sichergestellt, dass dieses Stilbit gesetzt ist, was immer auch sonst noch verwendet wird.
    2. Jetzt lesen wir die Stilbits aus. Das ergibt hier bei mir: 0x04CC0000
    3. Jetzt 'verxodern' wir die ausgelesenen Stilbits (0x04CC0000) mit $WS_SIZEBOX (0x00040000). Das ergibt hier: 0x04C80000
    4. Nun noch die ausgelesenen Stilbits (0x04CC0000) mit dem, was wir schon in 3. errechnet haben (0x04C80000), 'verodern'. Dabei kann nur der ursprünglich Wert der Stilbits entstehen (0x04CC0000).
    5. Die Werte aus 3. und 4. werden jetzt verglichen. Das Ergebnis ist immer 'ungleich'.
    6. Deshalb wird das Stilbit $WS_SIZEBOX per XOR aus entfernt: 0x04C80000. Diese neue Wert wird nun für das Fenster gesetzt.

    Auch wenn das Dein Problem umgeht. eine Lösung ist das meiner Meinung nach nicht.

    Übrigens: Bei meinem Test haben die Buttons und Menüeinträge im Testskript klaglos funktioniert.

    Danke, dass du das so ausführlich erklärt hast, leider fehlt mir da das Hintergrundwissen, um es nachvollziehen zu können :( Ich hab die "Lösung" im Internet gefunden und ausprobiert. Da es funktioniert hat, hab ich mich dann für diesen Weg entschieden und es in mein Script eingebaut.

    Zu "Übrigens": bei mir leider nicht. Ich benutze den mitgelieferten Editor von AutoIt, aber das dürfte ja wohl keinen Unterschied machen!?

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 11. Januar 2022 um 12:26
    Zitat von JBO
    C
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <ColorConstants.au3>
    
    Global $g_hGUI, $g_hGUI1, $g_idButton1, $g_idButton2, $g_hGUI2, $g_idMsgButton, $FileMenu, $OpenGUI1, $OpenGUI2
    
    example()
    
    Func example()
       $g_hGUI = GUICreate("GUI", 200, 217, 100, 100, Default, BitOR($WS_EX_COMPOSITED,$GUI_WS_EX_PARENTDRAG))
       $Menu1 = GUICtrlCreateMenu( "GUI" )
          $OpenGUI1 = GUICtrlCreateMenuItem( "Open GUI1", $Menu1 )
          GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
          $OpenGUI2 = GUICtrlCreateMenuItem( "Open GUI2", $Menu1 )
       $Menu2 = GUICtrlCreateMenu( "Help" )
          $About = GUICtrlCreateMenuItem( "About", $Menu2 )
       GUISetState(@SW_SHOW)
    
       ;GUI1
       $g_hGUI1 = GUICreate("GUI 1", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idMsgButton = GUICtrlCreateButton("Msgbox 1", 10, 10, 80, 30)
       $g_idButton1 = GUICtrlCreateButton("Show GUI 2", 10, 60, 80, 30)
       GUISetState(@SW_SHOW)
    
       ;GUI2
       $g_hGUI2 = GUICreate("GUI 2", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idButton2 = GUICtrlCreateButton("Show GUI 1", 10, 10, 80, 30)
    
       ;About
       $g_hAbout = GUICreate("About", 100, 100, 10, 10, BitOR($WS_POPUP,$WS_THICKFRAME), $WS_EX_MDICHILD , $g_hGui)
       $idAboutBox = _GUICtrlRichEdit_Create( $g_hAbout, "About", 0, 0, 100, 70, BitOR( $ES_READONLY, $ES_MULTILINE ) )
       _GUICtrlRichEdit_SetCharColor( $idAboutBox, _WinAPI_SwitchColor( $COLOR_RED ) )
       _GUICtrlRichEdit_AppendText( $idAboutBox, @CRLF & "Hallo Welt" )
       Global $btOK = GUICtrlCreateButton('OK', 10, 75, 80, 20)
    
       Local $aMsg
    
       While 1
            $aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
            If Not IsHWnd($aMsg[1]) Then ContinueLoop ; preventing subsequent lines from processing when nothing happens
    
            Switch $aMsg[1] ; check which GUI sent the message
                Case $g_hGUI
                   Switch $aMsg[0]
                      Case $GUI_EVENT_CLOSE ; If we get the CLOSE message from this GUI: $g_hGUI1 ...
                            ExitLoop ;  ... exit the loop and thus exit the program
                      Case $OpenGUI1
                            GUISetState(@SW_HIDE, $g_hGUI2)
                            GUISetState(@SW_SHOW, $g_hGUI1)
                            GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                      Case $OpenGUI2
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                      Case $About
                            GUISetState(@SW_SHOW, $g_hAbout)
                   EndSwitch
                Case $g_hGUI1
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI1
                         Case $g_idMsgButton
                            MsgBox($MB_OK, "MsgBox 1", "Test from GUI 1")
                         Case $g_idButton1
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                    EndSwitch
                Case $g_hGUI2
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI2
                    Case $g_idButton2
                         GUISetState(@SW_HIDE, $g_hGUI2)
                         GUISetState(@SW_SHOW, $g_hGUI1)
                         GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                         GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                   EndSwitch
                Case $g_hAbout
                      If $aMsg[0] = $btOK Then GUISetState(@SW_HIDE, $g_hAbout)
            EndSwitch
        WEnd
    EndFunc   ;==>example
    Alles anzeigen

    Auch in diesem Beispiel tritt der Fehler auf. Scheint wohl was mit dem Aufbau der Unterfenster zutun zu haben.

    so, ich bin das Problem mit dem fehlerhaft dargestellten GUI nach Wiederherstellung jetzt umgangen:

    Code
    Const $hGUI = GUICreate( $sTitle, 600, 432, Default, Default, $WS_SIZEBOX, BitOR($WS_EX_COMPOSITED,$GUI_WS_EX_PARENTDRAG) )
       $Style = _WinAPI_GetWindowLong( $hWinGUI, $GWL_STYLE )
       If BitXOR( $Style, $WS_SIZEBOX ) <> BitOr( $Style, BitXOR( $Style, $WS_SIZEBOX ) ) Then _WinAPI_SetWindowLong( $hGUI,$GWL_STYLE,BitXOR( $Style, $WS_SIZEBOX ) )

    Das GUI wird als "Sizebox" angezeigt (Minimieren und Maximieren werden nicht mehr angezeigt, man kann nur noch mit Alt+Tab aus dem Programm raus gehen) und die "Resize-Funktion" ist deaktiviert.

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 11. Januar 2022 um 12:18
    Zitat von Velted

    Hier gibt es mit Deinem Testskript keine 'Verschiebungen', wenn man die Definition der 'Kindfenster' auf BitOR( $WS_POPUP, $WS_VISIBLE ), $WS_EX_MDICHILD umstellt. Ich vermute deshalb, dass in Deinem 'Echtskript' etwas anders läuft.

    Ich hab das jetzt mal an dem geposteten Beispiel ausprobiert. Das Minimize und Restore funktioniert dabei wunderbar, nur leider funktioniert das GUI nicht mehr, also die Buttons bleiben ohne Funktion. Ach, und bei "POPUP" ist das Fenster auch nicht mehr in dem Ursprünglichen Rahmen, so wie es eigentlich sein sollte.

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 11. Januar 2022 um 11:20
    Zitat von Velted

    In Deinem letzten Beitrag Tab-Menü über Schleife erstellen lassen hast Du

    Code
    Const $hRAWExportGUI = GUICreate( "", 600, 400, 0, 0, BitOR( $WS_POPUP, $WS_VISIBLE ), $WS_EX_MDICHILD, $hGUI)

    als Lösung vorgestellt. Benutzt Du das so in Deinem 'echten' Skript?

    ja, warum? Es funktioniert so, wie ich es mir vorgestellt hatte, bzw. die neuen Felder werden auf das GUI geschrieben, nicht drunter. Mit der richtigen Positionierung hab ich die Felder auf den weißen Bereich verschoben. Ist das falsch?

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 11. Januar 2022 um 10:16
    Zitat von Moombas

    Ohne Code, keine hilfe möglich.

    C
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <ColorConstants.au3>
    
    Global $g_hGUI, $g_hGUI1, $g_idButton1, $g_idButton2, $g_hGUI2, $g_idMsgButton, $FileMenu, $OpenGUI1, $OpenGUI2
    
    example()
    
    Func example()
       $g_hGUI = GUICreate("GUI", 200, 217, 100, 100, Default, BitOR($WS_EX_COMPOSITED,$GUI_WS_EX_PARENTDRAG))
       $Menu1 = GUICtrlCreateMenu( "GUI" )
          $OpenGUI1 = GUICtrlCreateMenuItem( "Open GUI1", $Menu1 )
          GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
          $OpenGUI2 = GUICtrlCreateMenuItem( "Open GUI2", $Menu1 )
       $Menu2 = GUICtrlCreateMenu( "Help" )
          $About = GUICtrlCreateMenuItem( "About", $Menu2 )
       GUISetState(@SW_SHOW)
    
       ;GUI1
       $g_hGUI1 = GUICreate("GUI 1", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idMsgButton = GUICtrlCreateButton("Msgbox 1", 10, 10, 80, 30)
       $g_idButton1 = GUICtrlCreateButton("Show GUI 2", 10, 60, 80, 30)
       GUISetState(@SW_SHOW)
    
       ;GUI2
       $g_hGUI2 = GUICreate("GUI 2", 200, 200, 10, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $g_hGUI)
       $g_idButton2 = GUICtrlCreateButton("Show GUI 1", 10, 10, 80, 30)
    
       ;About
       $g_hAbout = GUICreate("About", 100, 100, 10, 10, BitOR($WS_POPUP,$WS_THICKFRAME), $WS_EX_MDICHILD , $g_hGui)
       $idAboutBox = _GUICtrlRichEdit_Create( $g_hAbout, "About", 0, 0, 100, 70, BitOR( $ES_READONLY, $ES_MULTILINE ) )
       _GUICtrlRichEdit_SetCharColor( $idAboutBox, _WinAPI_SwitchColor( $COLOR_RED ) )
       _GUICtrlRichEdit_AppendText( $idAboutBox, @CRLF & "Hallo Welt" )
       Global $btOK = GUICtrlCreateButton('OK', 10, 75, 80, 20)
    
       Local $aMsg
    
       While 1
            $aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
            If Not IsHWnd($aMsg[1]) Then ContinueLoop ; preventing subsequent lines from processing when nothing happens
    
            Switch $aMsg[1] ; check which GUI sent the message
                Case $g_hGUI
                   Switch $aMsg[0]
                      Case $GUI_EVENT_CLOSE ; If we get the CLOSE message from this GUI: $g_hGUI1 ...
                            ExitLoop ;  ... exit the loop and thus exit the program
                      Case $OpenGUI1
                            GUISetState(@SW_HIDE, $g_hGUI2)
                            GUISetState(@SW_SHOW, $g_hGUI1)
                            GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                      Case $OpenGUI2
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                      Case $About
                            GUISetState(@SW_SHOW, $g_hAbout)
                   EndSwitch
                Case $g_hGUI1
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI1
                         Case $g_idMsgButton
                            MsgBox($MB_OK, "MsgBox 1", "Test from GUI 1")
                         Case $g_idButton1
                            GUISetState(@SW_HIDE, $g_hGUI1)
                            GUISetState(@SW_SHOW, $g_hGUI2)
                            GUICtrlSetState($OpenGUI2, $GUI_DISABLE)
                            GUICtrlSetState($OpenGUI1, $GUI_ENABLE)
                    EndSwitch
                Case $g_hGUI2
                    Switch $aMsg[0] ; Now check for the messages for $g_hGUI2
                    Case $g_idButton2
                         GUISetState(@SW_HIDE, $g_hGUI2)
                         GUISetState(@SW_SHOW, $g_hGUI1)
                         GUICtrlSetState($OpenGUI2, $GUI_ENABLE)
                         GUICtrlSetState($OpenGUI1, $GUI_DISABLE)
                   EndSwitch
                Case $g_hAbout
                      If $aMsg[0] = $btOK Then GUISetState(@SW_HIDE, $g_hAbout)
            EndSwitch
        WEnd
    EndFunc   ;==>example
    Alles anzeigen

    Auch in diesem Beispiel tritt der Fehler auf. Scheint wohl was mit dem Aufbau der Unterfenster zutun zu haben.

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 11. Januar 2022 um 09:25

    Hallo zusammen!

    Ich habe folgendes Problem: Wenn ich mein Programm/Script starte, sieht das GUI wie folgt aus:

    pasted-from-clipboard.png

    Wenn ich dann auf "Minimieren" klicke, kommt nach dem Maximieren das GUI nur noch so an:

    pasted-from-clipboard.png

    Das GUI erstelle ich mit folgender Zeile:

    Code
    Const $hMainGUI = GUICreate( "", 600, 400, 0, 0, BitOR($WS_CHILD, $WS_VISIBLE), Default, $hGUI)

    (Das GUI ist ein GUI in einem GUI, da ich mehrere GUIs über mein Menü aufrufe. Ich bin so langsam fertig mit dem Programm/Script und möchte es natürlich sauber übergeben können :)

    Weiß jemand vlt. woran das liegen könnte? Und gibt es da Möglichkeiten, das zu verhindern?

    Achja, die GUI-Elemente werden alle mit einer XY-Koordinate angegeben, also scheint sich das komplette GUI zu verschieben und die XY-Koordinaten dann an der neuen Position zu orientieren, aber kA warum!

    VG

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 15:57

    SOOO, nach langem "Hin und Her":

    Code
    Const $hRAWExportGUI = GUICreate( "", 600, 400, 0, 0, BitOR( $WS_POPUP, $WS_VISIBLE ), $WS_EX_MDICHILD, $hGUI)

    Vielen Dank Euch allen für die HILFE!

    Schöne Feiertage Euch allen!!!!

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 15:44

    Ich hab grade mal das $WS_CHILD aus dem Style für die GUI raus genommen. Dann wird es zwar nicht mehr über das Haupt-GUI gelegt, aber dann sind die Tabs alle richtig!

    Also stellt sich jetzt die Frage, wie ich beides haben kann? :)

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 15:40
    Zitat von Micha_he

    die Objecte werden direkt auf der GUI und nicht auf dem Tabitem erzeugt

    ja, das hab ich auch schon festgestellt.

    Zitat von Micha_he

    Ich habe aber den Grund noch nicht gefunden.

    Den such ich jetzt schon seit ein paar Tagen -.-

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 15:26

    Ich hab im Grunde alles so gemacht, wie es das Tutorial es auf https://www.autoitscript.com/wiki/Tabs beschrieben ist.

    Code
    #include <GUIConstantsEx.au3>
    
    $hGUI = GUICreate("Test", 500, 500)
    
    $cTab = GUICtrlCreateTab(10, 10, 480, 350)
    $cTab_0 = GUICtrlCreateTabItem("Tab 0")
    $cTab_1 = GUICtrlCreateTabItem("Tab 1")
    GUICtrlCreateTabItem("")
    
    $cButton = GUICtrlCreateButton("Add controls", 10, 450, 80, 30)
    
    GUISetState()
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $cButton
                ; Correct
                GUISwitch($hGUI, $cTab_0)
                GUICtrlCreateLabel("Only on Tab 0", 40, 40, 200, 20)
                GUICtrlSetBkColor(-1, 0xCCFFCC)
                GUICtrlCreateTabItem("")
                GUISwitch($hGUI)
                ; Incorrect
                GUICtrlCreateLabel("OnTab 0 AND Tab 1", 40, 100, 200, 20)
                GUICtrlSetBkColor(-1, 0xFFCCCC)
        EndSwitch
    WEnd
    Alles anzeigen
  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 15:23
    Zitat von Micha_he

    2. Parameter von:

    Function GUISwitch

    Hab ich grade nochmal alle kontrolliert, steht aber überall drin. Ich erstelle die TabItems und speichere die ID in einen Array. Diese ID übergebe ich dann auch an GUISwitch. Ich hab meine Erstellung jetzt so geändert, dass ich beim öffnen der GUI erst alle TabItems erstellen lasse und danach erstelle ich für jedes TabItem die Labels.

    Trotzdem bleiben die Tabs leer X(

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 11:50

    Moombas Wenn ich übrigens ein GUIDelete mache, dann bekomme ich gar nichts mehr angezeigt, egal was ich mit dem GUI danach anstelle. Also da tappe ich total im Dunkeln, wie ich das richtig machen muss!

  • Tab-Menü über Schleife erstellen lassen

    • JBO
    • 22. Dezember 2021 um 11:41
    Zitat von Moombas

    Ich befürchte, das du ansonsten immer wieder in die gleiche GUI schreibst und dort dann sich alles überlppt, habe es aber selber noch nicht ausprobiert/testen können.

    Ich kann aber gerade auch komplett auf dem Holzweg sein...

    ja, das Gefühl hab ich auch, da die Eingabefelder, bzw. jetzt sind es im Moment Labels, ja erstellt werden, aber dann wohl unter den Tabitems liegen. Ich habe allerdings keine Ahnung, wie ich AutoIt beibringen kann, dass die Felder in den jewiligen Tabs erscheinen sollen. Im Internet wird sowas ja nicht erklärt.

    Zitat von Moombas

    Du müsstest die Variablen eigentlich alle als Global setzen, da sie im globalen Kontext genutzt werden (wie bereits erwähnt, nicht in einer Funktion).

    Wäre das in einer Funktion gekapselt (Func/EndFunc), sollten sie als "Locale" definiert werden und auch nur dort sind sie wirklich lokal.

    Hm, ok. Ich kenne das so, dass eine Variable nur so lange lebt, wie der Programmteil, in dem sie genutzt wird, also die Zählvariable $i einer For-Schleife nur solange, wie die For-Schleife läuft, danach wird sie gelöscht bzw. die Adresse der Variable. Wenn ich allerdings eine Variable am Anfang des Programms initialisiere, dann ist sie quasi Global, weil sie erst stirbt, wenn das Programm beendet wird. Ist das bei AutoIt anders, oder einfach nur ein "schlechter Style", wenn man kein Global benutzt?

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™