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

Beiträge von BugFix

  • 7Zip nutzen um Archiv zu erstellen

    • BugFix
    • 16. Dezember 2019 um 15:08
    Zitat von Musashi

    Die aktuelle 7za.exe und 7z.dll müssen vorhanden sein, z.B. im SkriptDir.

    Echt witzig ist, dass bei der Installationsversion die 7za.exe NICHT installiert wurde. In der Portable Version ist sie enthalten. - Muss man nicht verstehen.... :Face:

  • 7Zip nutzen um Archiv zu erstellen

    • BugFix
    • 16. Dezember 2019 um 11:09
    Zitat von Moombas

    'C:\Program Files\7-Zip\7z.exe'

    DAS ist der Grund. Es geht nicht mit der installierten Version (habe ich bei mir gerade mal getestet). Portable Version funktioniert.

    Evtl. Rechteprobleme beim Zugriff auf den Programm Ordner.

  • 7Zip nutzen um Archiv zu erstellen

    • BugFix
    • 16. Dezember 2019 um 10:08

    Funktioniert tadellos:

    AutoIt
    Local $sPath7z = "C:\portable\7zip\App\7-Zip\7z.exe"
    Local $sTarget = @ScriptDir & '\all_txt.tar'
    Local $sSource = @ScriptDir & '\*.txt'
    
    Local $sCmd = StringFormat('%s a %s %s', $sPath7z, $sTarget, $sSource)
    Run($sCmd, @ScriptDir, @SW_HIDE)

    EDIT:

    tgz ist kein unterstütztes Format, insofern ist es wohl eher eine "Fehlfunktion", wenn dein Skript damit funktioniert. :P

    Btw: Bei einer Software mit vorhandener und gut dokumentierter Kommandozeilenoption, kann ich keinen Mehrwert in einer UDF erkennen. Parameter mit StringFormat zusammensetzen, Run und fertig!

  • Problem beim Strg+x senden in Programm

    • BugFix
    • 13. Dezember 2019 um 20:57
    Zitat von Hans65

    Hast du das Fenster mit WinActivate("DUMo") erkannt und aktiviert?

    Ja, das funktioniert.

    AutoIt
    Local $hWnd = _ActivateDUMo("C:\Users\BugFix\Downloads\dumo\DUMo.exe")
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hWnd --> " & $hWnd & @LF)
    
    Func _ActivateDUMo($_sPath)
        Local $sVersion = FileGetVersion($_sPath)
        Local $sTitle = "DUMo v" & $sVersion
        Local $hWnd = WinGetHandle($sTitle), $iCnt = 1
        While Not IsHWnd($hWnd) And $iCnt < 10
            $hWnd = WinWait($sTitle, "", 1)
            $iCnt += 1
        WEnd
        If Not IsHWnd($hWnd) Then Return MsgBox(0, $sTitle, 'Error while activating DUMo.')
        WinActivate($hWnd)
        WinWaitActive($hWnd)
        Return $hWnd
    EndFunc
    Alles anzeigen
    Zitat von Hans65

    Wie kann ich das Programm dennoch über Datei->Beenden / Ctrl+q / dem X am Fenster das Programm ordentlich schließen.

    Dafür habe ich keine Möglichkeit gefunden. Das Fenster nimmt keine Send-Befehle entgegen.

    Zitat von Hans65

    Wäre ein MouseClick() eine mögliche Lösung?

    Auch auf MouseClick reagiert das Fenster nicht. Vermutlich fängt der Ersteller des Programms das alles ab (verständlich, wenn man Automatisierung unterbinden möchte). Hast du die Free-Version? Evtl. reagiert die Pro-Version anders.

  • zwei ComboBox voneinander abhängig gestalten

    • BugFix
    • 13. Dezember 2019 um 12:55

    Ich habe mein Array-Tut mal noch erweitert um Array als Arrayelement.

  • zwei ComboBox voneinander abhängig gestalten

    • BugFix
    • 12. Dezember 2019 um 21:09

    Local $aValues[1][2] = [[0]] deklariert ein Array mit einem Element und 2 Spalten. Gleichzeitig wird $aValues[0][0] der Wert "0" zugewiesen (schau mal in mein Array-Tut, s. Signatur).

    Local $sFillComboVal = ($aLang[$iLangIndex][1])[0][0]

    $aLang[$iLangIndex][1] enthält wiederunm ein 2D-Array. Auf dessen Element [0][0] möchte ich zugreifen, dort ist der String zum direkten Befüllen der Combo gespeichert.

    Man könnte das so tun:

    $inneresArray = $aLang[$iLangIndex][1]

    Local $sFillComboVal = $inneresArray[0][0]

    oder mit etwas syntactic sugar spart man sich die extra Variable, covert das Array durch die runden Klammern und kann dann direkt mit den eckigen Klammern den Zugriff auf das innere Array durchführen.

  • zwei ComboBox voneinander abhängig gestalten

    • BugFix
    • 12. Dezember 2019 um 19:59
    Zitat von turbobaby

    Kannst du mir erklären was/wie genau hier gefiltert wird?

    '^(\w+)</option>'

    '<option value="([^"]+)">([^<]+)<\/option>'

    Ich hatte als erstes gesplittet, danach liegt für jede Sprache eine String vor, der mit "deutsch</option><option value="EINS">1 h....." beginnt.

    Das Pattern '^(\w+)</option>' bedeutet folgendes:

    ^ - starte Suche am Stringanfang

    () - in Klammern, hier wird das Ergebnis enthalten sein - Capturing Group

    \w - jedes Wortzeichen (a-z), alle Ziffern und Unterstrich

    + - einmal bis beliebige Anzahl

    diesem Ausdruck muss </option> folgen.

    Das nächste Pattern selektiert Wert und zugehörigen Inhalt.

    <option value=" - damit wird die Suche eingeleitet

    ([^"]+) - Klammern zum Auffangen des Ergebnisses, eckige Klammern: Gruppe von Zeichen, hier ^" bedeutet alles ausser ", + s.o.

    "> - diese Zeichen müssen folgen

    ([^<]+) - wieder Capturing group, gesucht wird alles ausser <

    gefolgt von <\/option>

  • zwei ComboBox voneinander abhängig gestalten

    • BugFix
    • 11. Dezember 2019 um 14:33

    Hier mal meine Lösung.

    Es wird ein Array erstellt mit "Sprache" an [1...n][0] und an [0][0] der ComboString.

    Das zugehörige Array mit [[ComboString],[Wert1,Inhalt],[Wert2,Inhalt],..] wird an [1...n][1] gespeichert.

    Sieht vielleicht etwas verwirrend aus, ist aber effektiv. ;)

    AutoIt
    Global $sRead, $iLangIndex
    Global $aLang = _PrepareData()
    Global $sFillComboLang = $aLang[0][0]
    
    Local $hGui = GUICreate('Test')
    Local $comboLang = GUICtrlCreateCombo('', 10, 10, 150)
    GUICtrlSetData(-1, $sFillComboLang)
    Local $comboVal = GUICtrlCreateCombo('', 240, 10, 150)
    
    GUISetState()
    
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $comboLang
                $sRead = GUICtrlRead($comboLang)
                If $sRead <> '' Then
                    _SetValCombo($sRead)
                EndIf
            Case $comboVal
                $sRead = GUICtrlRead($comboVal)
                If $sRead <> '' Then
                    MsgBox(0, $sRead, _GetValue($sRead))
                EndIf
        EndSwitch
    WEnd
    
    
    Func _PrepareData()
        Local $sTxt =  '<option disabled=""></option><option disabled="" class="SelectSeparator">deutsch</option><option value="EINS">1 hier steht etwas</option><option value="ZWEI">2 auch hier steht etwas</option><option value="DREI">3 auch hier steht etwas</option><option value="VIER">4 auch hier steht etwas</option><option value="FUENF">5 auch hier steht etwas</option><option value="SECHS">6 auch hier steht etwas</option><option value="SIEBEN">7 auch hier steht etwas</option><option value="ACHT">8 auch hier steht etwas</option><option value="NEUN">9 auch hier steht etwas</option><option value="ZEHN">10 auch hier steht etwas</option><option value="ELF">11 auch hier steht etwas</option><option value="ZWOELF">12 auch hier steht etwas</option><option value="DREIZEHN">13 auch hier steht etwas</option><option value="VIERZEHN">14 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">englisch</option><option value="ONE">15 auch hier steht etwas</option><option value="TWO">16 auch hier steht etwas</option><option value="THREE">17 auch hier steht etwas</option><option value="VOUR">18 auch hier steht etwas</option><option value="FIFE">19 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">französisch</option><option value="ONEFR">20 auch hier steht etwas</option><option value="TWOFR">21 auch hier steht etwas</option><option value="THREEFR">22 auch hier steht etwas</option><option value="VOURFR">23 auch hier steht etwas</option><option value="FIFEFR">24 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">polnisch</option><option value="ONEPOL">25 auch hier steht etwas</option><option value="TWOPOL">26 auch hier steht etwas</option><option value="THREEPOL">27 auch hier steht etwas</option><option value="VOURPOL">28 auch hier steht etwas</option><option value="FIFEPOL">29 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">russisch</option><option value="ONERU">30 auch hier steht etwas</option><option value="TWORU">31 auch hier steht etwas</option><option value="TREERU">32 auch hier steht etwas</option><option value="VOURRU">33 auch hier steht etwas</option><option value="FIFERU">34 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">japanisch</option><option value="ONEJP">35 auch hier steht etwas</option><option value="TWOJP">36 auch hier steht etwas</option><option value="THREEJP">37 auch hier steht etwas</option><option value="VOURJP">38 auch hier steht etwas</option><option value="FIFEJP">39 auch hier steht etwas</option><option disabled=""></option>'
        Local $aSplit = StringSplit($sTxt, 'class="SelectSeparator">', 1)
        Local $aMatch, $aVal, $aLanguages[1][2] = [[0]], $aValues[1][2] = [[0]]
        Local $iCntLang = 0, $iCntVal, $n, $sComboLang, $sComboValue
        For $i = 1 To $aSplit[0]
            $aMatch = StringRegExp($aSplit[$i], '^(\w+)</option>', 1)  ; Sprache & Werte
            If IsArray($aMatch) Then
                $iCntLang += 1
                $aLanguages[0][0] = $iCntLang
                ReDim $aLanguages[$iCntLang+1][2]
                $aLanguages[$iCntLang][0] = $aMatch[0]  ; Sprache
                $sComboLang &= $aMatch[0] & '|'
                $aVal = StringRegExp($aSplit[$i], '<option value="([^"]+)">([^<]+)<\/option>', 3) ; Werte
                $iCntVal = UBound($aVal)/2
                ReDim $aValues[$iCntVal+1][2]
                $n = 1
                $sComboValue = ''
                For $j = 0 To UBound($aVal) -2 Step 2
                    $aValues[$n][0] = $aVal[$j]
                    $aValues[$n][1] = $aVal[$j+1]
                    $n += 1
                    $sComboValue &= $aVal[$j] & '|'
                Next
                $aValues[0][0] = $sComboValue
                $aLanguages[$iCntLang][1] = $aValues
            EndIf
            $aLanguages[0][0] = $sComboLang
        Next
        Return $aLanguages
    EndFunc
    
    
    Func _SetValCombo($_sLang)
        For $i = 1 To UBound($aLang) -1
            If $aLang[$i][0] = $_sLang Then ExitLoop
        Next
        $iLangIndex = $i
        Local $sFillComboVal = ($aLang[$iLangIndex][1])[0][0]
        GUICtrlSetData($comboVal, "|" & $sFillComboVal)
    EndFunc
    
    
    Func _GetValue($_sVal)
        Local $aValues = $aLang[$iLangIndex][1]
        For $i = 0 To UBound($aValues) -1
            If $aValues[$i][0] = $_sVal Then Return $aValues[$i][1]
        Next
    EndFunc
    Alles anzeigen
  • Problem beim Strg+x senden in Programm

    • BugFix
    • 11. Dezember 2019 um 11:45

    Ich habe das mal getestet. Du kannst zwar das Fenster erkennen und auch aktivieren - aber es reagiert nicht auf Send.

    Die Anwendung ist in Delphi geschrieben und das ist bekannterweise automatisierungsfeindlich. Über die Controls kommst du auch nicht zum Ziel, denn es hat nur die folgenden:

    ! hControl hParent ID Classname ControlText

    > 0x000805D2 0x00100700 525778 TJvBitBtn DUMo PRO kaufen

    > 0x0009076A 0x00100700 591722 TJvBitBtn Ignorieren

    > 0x000A06E0 0x00100700 657120 TJvBitBtn Download

    > 0x000A060C 0x00100700 656908 TJvBitBtn Erneuern

    > 0x000B05EA 0x00100700 722410 TJvImgBtn Software Update

    > 0x000F05B8 0x00100700 984504 TStatusBar 42 Gerät gefunden

    > 0x000A05DE 0x00100700 656862 TPanel

    > 0x000C0760 0x00100700 788320 TListView

    > 0x000A02F6 0x000C0760 0 SysHeader32 DUMo v2.19.0.98

  • Problem beim Strg+x senden in Programm

    • BugFix
    • 10. Dezember 2019 um 09:37

    Benutze mal

    $hWnd = WinWaitActive('TITEL')

    ConsoleWrite('hWnd: ' & $hWnd & @CRLF)

    und vergleiche das erhaltene Handle mit den Angaben aus der Info. Ich vermute, dass du kein Handle erhältst, da es das Fenster mit dem abgefragten Titel gar nicht gibt (Abfrage: "DUMo", laut Info ist der Titel: "DUMo v2.18.2.97"). Eigentlich sollte das Fenster erkannt werden, wenn der Suchbegriff der Anfang des Titels ist. Evtl. existieren aber mehrere Fenster die damit anfangen?

    Versuchs mal mit dem korrekten Titel.

  • Fehler in der ENGLISCHEN Hilfe bitte hier melden

    • BugFix
    • 9. Dezember 2019 um 18:09

    Professor Bernd

    Ob ich recht habe, ist eigentlich unwichtig. Ich habe hier nur meine Betrachtungsweise wiedergegeben. Und die lautet im Kern: Die Verwendung von $STR_STRIPALL macht die Verwendung anderer Flags obsolet. Ich vermute mal, dass auch noch niemand vorher auf die Idee gekommen ist, dieses Flag mit anderen zu kombinieren.

    Was deine Frage bezüglich der Übersetzung angeht - keine Ahnung. Bis auf wenige Rudimente ist mein Umgangsenglisch nicht sehr berühmt. Ich bin berufsbedingt mehr im Fachenglisch zu Hause.

    Die Geschichte mit "Kneifzange" hatte ich mal gelesen und das fand ich so markant, dass ich es nicht vergessen habe.

  • Fehler in der ENGLISCHEN Hilfe bitte hier melden

    • BugFix
    • 9. Dezember 2019 um 10:28

    .... man kann ja auch die Funktion der Beschreibung anpassen ^^

    AutoIt
    Func _StringStripWS($_sStr, $_iFlag)
        If BitAND($_iFlag, 8) Then Return StringRegExpReplace($_sStr, "[\s\x0]", "")        ; $STR_STRIPALL
        If BitAND($_iFlag, 4) Then $_sStr = StringRegExpReplace($_sStr, "[\s\x0]{1,}", " ") ; $STR_STRIPSPACES
        If BitAND($_iFlag, 2) Then $_sStr = StringRegExpReplace($_sStr, "[\s\x0]+$", "")    ; $STR_STRIPTRAILING
        If BitAND($_iFlag, 1) Then $_sStr = StringRegExpReplace($_sStr, "^[\s\x0]+", "")    ; $STR_STRIPLEADING
        Return $_sStr
    EndFunc
  • Fehler in der ENGLISCHEN Hilfe bitte hier melden

    • BugFix
    • 9. Dezember 2019 um 08:57

    Nun, ich habe das noch nie in der von euch benutzten Deutung gesehen (Überschreiben der anderen Flags, wenn diese gesetzt sind).

    Für mich bedeutet (over-rides all other flags), dass keines der anderen Flags genutzt werden muss um deren Wirkung zu erzielen.

    Ich vermute mal, hier geht die wörtliche Übersetzung ins Deutsche am Ziel vorbei. Insofern kann ich mir vorstellen, dass die Jungs im EN-Forum auch mit der Anfrage von @Musashi nicht so richtig was anfangen können. Problem: Umgangs-Englisch trifft wörtliche Übersetzung. :P

    Um es mal an einem krassen Bsp. zu demonstrieren:

    deutsch:

    "Erzähl das einem, der sich die Hose mit der Kneifzange anzieht."

    identische Bedeutung auf englisch:

    "Tell that to the marines."

  • zwei ComboBox voneinander abhängig gestalten

    • BugFix
    • 8. Dezember 2019 um 17:40

    Du solltest schon ein minimales , lauffähiges Skript bereit stellen. Niemand hat Lust jetzt selbst eine Gui mit Combos zu basteln.

    - stelle das Skript bereit

    - stelle Musterdaten bereit

    z.B. $sDataBox1 = ..... / $sDataBox2 = .....

    Dann kann man auch aufzeigen, wie das umzusetzen ist.

  • Ovale Buttons gestalten

    • BugFix
    • 8. Dezember 2019 um 11:04

    Ich habe in meiner Version mal noch einen Klickeffekt (durch Farbwechsel) eingefügt und alle Includes entfernt.

    AutoIt
    ;-- TIME_STAMP   2019-12-08 11:01:08
    
    Opt('MustDeclareVars', 1)
    
    
    Global $iBtnColUp   = 0x33BB33
    Global $iBtnColDown = 0x33EE22
    
    Global $hMainGui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-270, 150)
    GUISetState()  ; set the state BEFORE creating the button!!!
    
    Global $IDBtn1 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 1', 5, 5, 120, 30, $iBtnColUp)
    Global $IDBtn2 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 2', 5, 50, 120, 30, $iBtnColUp)
    Global $IDBtn3 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 3', 5, 95, 120, 30, $iBtnColUp)
    
    Global $aCursor, $bDown = False, $IDlast
    While 1
        $aCursor = GUIGetCursorInfo($hMainGui)
        If $aCursor[2] = 1 Then     ; primary down
            If Not $bDown Then
                $bDown = _BtnColorSwitch($aCursor[4])
                If $bDown Then $IDlast = $aCursor[4]
            EndIf
        ElseIf $aCursor[2] = 0 Then ; primary up
            If $bDown Then
                $bDown = _BtnColorSwitch($IDlast, False)
                $IDlast = 0
            EndIf
        EndIf
        Switch GUIGetMsg()
            Case -3
                ExitLoop
            Case $IDBtn1
                MsgBox(0, 'Testing', 'Button 1 was pressed')
            Case $IDBtn2
                MsgBox(0, 'Testing', 'Button 2 was pressed')
            Case $IDBtn3
                MsgBox(0, 'Testing', 'Button 3 was pressed')
        EndSwitch
    WEnd
    
    Func _BtnColorSwitch($_IDBtn, $_bDown=True)
        Switch $_IDBtn
            Case $IDBtn1, $IDBtn2, $IDBtn3
                Local $iBkCol = $_bDown ? $iBtnColDown : $iBtnColUp
                GUICtrlSetBkColor($_IDBtn, $iBkCol)
                Return $_bDown
            Case Else
                Return False
        EndSwitch
    EndFunc
    
    Func _GuiCtrl_RoundButtonCreate($_hMainGui, $_sText, $_iX, $_iY, $_iWEllipse, $_iHEllipse, $_iBkCol=0xFFE0C0)
        Local Const $iCorrect = 6 ; minimum: 6, must be even!!
        Local $hBtnGUI = GUICreate('', $_iWEllipse+$iCorrect, $_iHEllipse+$iCorrect, $_iX, $_iY, BitOr(0x40000000, 0x00010000, 0x00000080), -1, $_hMainGui) ; WS_CHILD|WS_TABSTOP|DS_MODALFRAME
        Local $ID = GUICtrlCreateButton($_sText, -($iCorrect/2), -($iCorrect/2), $_iWEllipse+(2*$iCorrect), $_iHEllipse+(2*$iCorrect), 0x8000) ; BS_FLAT
        GUICtrlSetBkColor(-1, $_iBkCol)
        Local $aPos = WinGetPos($hBtnGUI)
        Local $aResult = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", 0, "int", 0, _
                "int", $aPos[2], "int", $aPos[3], "int", $_iWEllipse, "int", $_iHEllipse)
        If @error Then Return SetError(@error, @extended, 0)
        Local $hRgn = $aResult[0]
        $aResult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $hBtnGUI, "handle", $hRgn, "bool", True)
        If @error Then Return SetError(@error, @extended, False)
        DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hRgn)
        GUISetState(@SW_SHOW, $hBtnGUI)
        Return $ID
    EndFunc
    Alles anzeigen
  • Ovale Buttons gestalten

    • BugFix
    • 7. Dezember 2019 um 11:21

    Ich habe noch eine andere Lösung für dich:

    AutoIt
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    Local $hMainGui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-270, 150)
    GUISetState()  ; set the state BEFORE creating the button!!!
    
    Local $IDBtn1 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 1', 5, 5, 120, 30)
    Local $IDBtn2 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 2', 5, 50, 120, 30)
    Local $IDBtn3 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 3', 5, 95, 120, 30)
    
    
    While 1
        Switch GUIGetMsg()
            Case -3
                ExitLoop
            Case $IDBtn1
                MsgBox(0, 'Testing', 'Button 1 was pressed')
            Case $IDBtn2
                MsgBox(0, 'Testing', 'Button 2 was pressed')
            Case $IDBtn3
                MsgBox(0, 'Testing', 'Button 3 was pressed')
        EndSwitch
    WEnd
    
    Func _GuiCtrl_RoundButtonCreate($_hMainGui, $_sText, $_iX, $_iY, $_iWEllipse, $_iHEllipse, $_iBkCol=0xFFE0C0)
        Local Const $iCorrect = 6 ; minimum: 6, must be even!!
        Local $hBtnGUI = GUICreate('', $_iWEllipse+$iCorrect, $_iHEllipse+$iCorrect, $_iX, $_iY, BitOr($WS_CHILD, $WS_TABSTOP, $DS_MODALFRAME), -1, $_hMainGui)
        Local $ID = GUICtrlCreateButton($_sText, -($iCorrect/2), -($iCorrect/2), $_iWEllipse+(2*$iCorrect), $_iHEllipse+(2*$iCorrect), 0x8000) ; $BS_FLAT
        GUICtrlSetBkColor(-1, $_iBkCol)
        Local $aPos = WinGetPos($hBtnGUI)
        Local $hRgn = _WinAPI_CreateRoundRectRgn(0, 0, $aPos[2], $aPos[3], $_iWEllipse, $_iHEllipse)
        _WinAPI_SetWindowRgn($hBtnGUI, $hRgn)
        _WinAPI_DeleteObject($hRgn)
        GUISetState(@SW_SHOW, $hBtnGUI)
        Return $ID
    EndFunc
    Alles anzeigen
  • Button frei wählbare Funktion

    • BugFix
    • 1. Dezember 2019 um 14:53

    Ich denke, das hier ist, was du willst:

    AutoIt
    Global $INI = @ScriptDir & '\test_button.ini'
    
    Global $hGui = GUICreate('Test')
    
    Global $cbReSet = GUICtrlCreateCheckbox('(Re)Set Button', 20, 15, 160)
    
    Global $bt_1 = GUICtrlCreateButton('', 10, 60, 100, 20)
    Global $sTitle_Btn1 = IniRead($INI, 'btn1', 'title', 'Frei')
    GUICtrlSetData($bt_1, $sTitle_Btn1)
    
    Global $bt_2 = GUICtrlCreateButton('', 10, 90, 100, 20)
    Global $sTitle_Btn2 = IniRead($INI, 'btn2', 'title', 'Frei')
    GUICtrlSetData($bt_2, $sTitle_Btn2)
    
    GUISetState()
    
    Global $nMsg
    While True
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case -3
                Exit
            Case $bt_1
                _Check($bt_1, 'btn1')
            Case $bt_2
                _Check($bt_2, 'btn2')
        EndSwitch
    WEnd
    
    
    Func _Check($_ID, $_sSection)
        Local $sTitle = GUICtrlRead($_ID)
        Local $bSet = BitAND(GUICtrlRead($cbReSet), $GUI_CHECKED), $sExe
        If $bSet Then
            $sExe = _SelectFile($sTitle, $_sSection)
            If @error Then Return
            GUICtrlSetData($_ID, $sTitle)
        Else
            $sExe = IniRead($INI, $_sSection, 'program', '')
        EndIf
        If $sExe <> '' Then ShellExecute($sExe)
    EndFunc
    
    Func _SelectFile(ByRef $_sTitle, $_sSection)
        Local $sExe = FileOpenDialog('Programm wählen', @ProgramFilesDir, 'EXE (*.exe)')
        If @error Then Return SetError(@error,0,'')
        $_sTitle = StringTrimLeft(StringLeft($sExe, StringInStr($sExe, '.', 0, -1)-1), StringInStr($sExe, '\', 0, -1))
        IniWrite($INI, $_sSection, 'program', $sExe)
        IniWrite($INI, $_sSection, 'title', $_sTitle)
        Return $sExe
    EndFunc
    Alles anzeigen
  • Input darf nicht verlassen werden

    • BugFix
    • 30. November 2019 um 13:31

    Das Problem ist etwas umfangreicher:

    - der Benutzer kann die Inputs per Maus anwählen

    - er kann mit TAB zum nächsten Input springen

    Du musst also die Maus einfangen (_MouseTrap) und die TAB-Taste abfangen (z.B. mit GUISetAccelerators auf ein Dummy-Ctrl umrouten).

    Die Gültigkeitsprüfung der Eingabe und Weiterleitung zum nächsten Input solltest du, wie schon beschrieben, mit einem Button realisieren.

    Man kann zwar auch z.B. das über das Abfangen der Enter-Taste realisieren, aber das übersteigt im Moment deine Möglichkeiten noch deutlich.

  • Input darf nicht verlassen werden

    • BugFix
    • 30. November 2019 um 10:43
    Zitat von Silvermoon1

    Der Benutzer darf das einzelne Input nicht verlassen, bis er eine Eingabe gemacht hat.

    Das ist eine sehr vage Beschreibung. Wie definierst du "Eingabe" - ein Zeichen, eine Zeichenkette (mit Mindestlänge von n), oder andere Einschränkungen?

    Sinnvoll ist einen Button (z.B. "Weiter") einzubinden. Fokus ist im ersten Input, "Weiter" prüft ob Eingabe erfolgt und korrekt - wenn ja: Fokus setzen nächstes Input etc.

  • Problem mit #AutoIt3Wrapper_Res_ProductVersion=

    • BugFix
    • 29. November 2019 um 16:11
    Zitat

    Nichts für ungut @BugFix, "Fehler" passieren halt und ich hätte die Test-EXE ja nicht ausführen müssen. :)

    LOL, die angeführte msgbox.au3 war eine Musterdatei auf meinem PC mit

    Exit Msgbox(0, "Test", "Test").

    Dass es tatsächlich eine Datei mit diesem Namen gibt hatte ich nicht auf der Uhr. :Face:;)

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™