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

  • [gelöst]vmrun über autoIT ausführen

    • BugFix
    • 12. August 2015 um 16:14

    Das Problem bei Befehlen für die Konsole ist die korrekte Einbettung in Anführungszeichen. Da Parameter dort zusätzliche Anführungszeichen enthalten können, ist es am Einfachsten die Strings zu splitten und erst beim Aufruf zusammenzuführen.
    Probier mal so:

    AutoIt
    Func Yadis()
        If WinExists("[CLASS:VMwareUnityHostWndClass]") Then
    		Sleep(50000)
    		Call("Yadis")
    	Else
    		MsgBox(0,"","Yadis ist nicht aktiv")
    ;~ 		Run("C:\vmware.bat")
    		$sPathVMRun = 'C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe'
    		$sParam = ' -T player stop "D:\Windows 8 VM\Windows 8 x64.vmx"'
    		Run(@ComSpec & " /c " & $sPathVMRun & $sParam, "", @SW_HIDE)     
        EndIf
    EndFunc
    Alles anzeigen
  • Oracle VM - kein Internetzugang [GELÖST]

    • BugFix
    • 12. August 2015 um 14:44

    Hi,
    ich habe ein seltsames Problem.
    Auf der VM habe ich WinXP installiert. Die VM-Gasterweiterungen sind auch aktiv, Netzwerkbrücke eingerichtet und zeigt 'verbunden' an. Aber ich kann mich nicht ins INet verbinden.
    Installiere ich z.B. ein Win7 in der VM oder ein Linux habe ich sofort Internetzugang.
    Hat jemand dafür eine Erklärung, bzw. besser - einen Lösungsansatz?

    Falls von Bedeutung: Ich nutze die Oracle VM in der Portable Version.

  • Fehlende Großbuchstaben von ControlSend() vs. getrennte Serversession

    • BugFix
    • 12. August 2015 um 13:13

    Mangels Serverumgebung kann ich das Problem für mich nicht nachstellen.
    Solltest du keine probate Lösung finden, könntest du eine Alternativlösung schaffen:
    - auf dem Zielrechner einen Ordner (z.B. MsgToSend) erstellen (als Freigabe)
    - auf dem Zielrechner startest du ein Endlosskript, dass diesen Ordner auf Inhalt prüft (Intervall nach deinem Geschmack, 5...10 Sekunden)
    - auf dem Fernsteuerungsrechner erstellst du die Triggerdatei mit den Daten (Window=Window-Titel; Send-String=... etc.)
    - nun kopierst du die Datei auf den Zielrechner
    - das Skript auf dem Zielrechner liest den Inhalt der Datei und löscht danach die Datei
    - mit den Daten aus der Datei wird lokal der ControlSend-Befehl ausgeführt

  • Fehlende Großbuchstaben von ControlSend() vs. getrennte Serversession

    • BugFix
    • 12. August 2015 um 12:36
    Zitat von Fengalf

    CountrolSend() keine Großbuchstaben schreibt

    Schon mal mit Flag $SEND_RAW (1) getestet?

  • Ordnerstrukturen Durchsuchen

    • BugFix
    • 12. August 2015 um 12:27

    Wie wär es denn mit einer Rekursiven Suche? :rolleyes:

    AutoIt
    ;===============================================================================
    ; Function Name:   _SearchTreeForFile($sRootPath, $sFileName)
    ; Description::    Search for file in a folder with all subfolders
    ; Parameter(s):    $sRootPath    Path to start
    ;                  $sFileName    Name of file to search
    ; Return Value(s): found         Full path of the file
    ;                  not found     Empty string
    ; Author(s):       BugFix (bugfix@autoit.de)
    ;===============================================================================
    Func _SearchTreeForFile($_sRootPath, $_sFileName)
    	$_sRootPath = StringRegExpReplace($_sRootPath, '\\, '') & '\'
        Local $aRet = DllCall("imagehlp", 'long', 'SearchTreeForFile', 'str', _
                $_sRootPath, 'str', $_sFileName, 'str', '')
        If $aRet[0] = 1 Then Return $aRet[3]
        Return ''
    EndFunc  ;==>_SearchTreeForFile
    Alles anzeigen
  • AutoIt Grundlagen Schulung oder Webinar / Interessenten gesucht.

    • BugFix
    • 11. August 2015 um 21:33

    Also unabhängig von Eigeninitiative (die ich bei jedem voraussetze) habe ich das Schulungsangebot auch deshalb unterbreitet, weil ich beim Durchführen einer mehrtägigen Schulung bemerkt habe, dass es für die Teilnehmer ein völlig anderer Lernprozeß ist als im Selbsstudium. Das gemeinsame Lösen von Problemen führt zu Synergieeffekten und bringt somit einen wesentlich höheren Wissenszuwachs als bei alleiniger Arbeit.

    Ich hatte mir auch überlegt, AutoIt-Webinare zu einem festen Bestandteil unserer Forenarbeit werden zu lassen.
    Das könnte man in wiederkehrende Webinare für Anfänger und für Fortgeschrittene sowie zusätzlich mit wechselnden Themengebieten zu speziellen Problemen gliedern.
    Wir haben ein enormes Potenzial an "Wissenden" hier im Forum. Wenn sich mehrere an diesem Projekt beteiligen würden, hätten wir auch das Plus, Problemlösungen aus unterschiedlichen Blickwinkeln zu erleben. Denn wenn ihr mal zurückblickt zu unseren Wettbewerben, zeigte sich doch, dass bei identischer Aufgabenstellung völlig unterschiedliche Wege zum Ziel führten, mit sehr interessanten Lösungsansätzen.
    Eine solche "Webinar-Kultur" aufzubauen passiert natürlich nicht von heute auf morgen. Dank dem Angebot von Gun-Food, ist ja schonmal die technische Abwicklung gesichert.
    Ich würde mich freuen, wenn wir solch ein Projekt bei uns integrieren könnten.

  • [gelöst] Probleme bei der Pfadauswahl und Funktionen

    • BugFix
    • 10. August 2015 um 22:05
    Zitat von bazii

    Wenn es mal in der VHS in Stuttgart einen Kurs zu Autoit geben sollte, wäre ich ganz sicher einer der ersten Kursteilnehmer.

    Wenn da echt Bedarf besteht, würde ich mich bereit erklären eine "Online-School" zu realisieren. Kann man mit mehreren Teilnehmern (für einen allein wär das ineffizient) gleichzeitig über Teamviewer abhalten oder für größere Anzahl mit einer Webinar-Software. Müßte aber erst schauen, ob es da eine Freeware gibt. Cisco ist glaub ich lizenzpflichtig.
    Also mal umschauen wer echten Bedarf hat und Themenschwerpunkte zusammenstellen. Ich würde daraus ein Schulungsprogramm erstellen, hatte mir mal für eine Schulung eine Darstellungssoftware geschrieben. Also Handwerkszeug ist da.
    Aber nur, wenn es wirklich ernst gemeint ist. Und eines vorneweg: Wer ernsthaft Koda zum Designen benutzt sollte danach keine Fragen stellen. Ich bin der Meinung, dass Koda zum Nicht-Denken verleitet und das ist kontraproduktiv. Nur wer in der Lage ist, das Modell seiner GUI im Kopf zu erstellen, kann auch ordentlich strukturiert programmieren.

  • XML-Problem, Anzahl der Starttags und Endtags stimmen nicht - Wie sinnvoll ermitteln?

    • BugFix
    • 10. August 2015 um 10:00
    Zitat von UserIsGrateful

    Gebt bitte Bescheid, wenn ich mich mit der Problemstellung zu undeutlich ausgedrückt habe oder so.

    Ja, du hast nicht aufgezeigt, wie die korrekte Datei aussehen muß. Also nicht speziell diese, sondern das Muster einer korrekten *.docx.
    Ich habe z.B. noch nie eine *docx benutzt, weil die bei mir automatisch schon beim Abholen aus dem Postfach auf ordentliches *.doc umformatiert werden. Nicht abwärtskompatible Datenformate zu nutzen ist echt das letzte, aber bei M$ leider Standard. 90% aller User können bequem alle ihre Office-Aufgaben auch mit den Versionen vor MSO-2007 lösen.
    Also zeig mal, wie die Struktur richtig aussehen muss.

  • Kombinationen von 1, 2, 4, 8, 16, etc. zurückrechnen

    • BugFix
    • 10. August 2015 um 09:47

    Hier mal aus meiner Bsp-Kiste, umgesetzt mit Checkboxen:

    AutoIt
    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind
    
    
    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2]             ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    	$arCB[$i][1] = 2^$i         ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0             ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
                                    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    	$top += 30
    	$arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    	GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()
    
    
    While 1
    	Sleep(100)
    WEnd
    
    
    Func _Ende()
    	Exit
    EndFunc
    
    
    Func _ClickCB()
    	For $i = 0 To UBound($arCB) -1
    		If $arCB[$i][0] = @GUI_CtrlId Then
    			$Checked = BitXOR($Checked, $arCB[$i][1])
    			_ReadCB()
    			ExitLoop
    		EndIf
    	Next
    EndFunc
    
    
    Func _CheckAll()
    	For $i = 0 To UBound($arCB) -1
    		If Not BitAND($Checked, $arCB[$i][1]) Then
    ;~ 			GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    			GUICtrlSetState($arCB[$i][0], BitOR($GUI_CHECKED, $GUI_DISABLE)) ; markieren und disablen
    			$Checked = BitXOR($Checked, $arCB[$i][1])
    		EndIf
    	Next
    	_ReadCB()
    EndFunc
    
    
    Func _UnCheckAll()
    	For $i = 0 To UBound($arCB) -1
    		If BitAND($Checked, $arCB[$i][1]) Then
    ;~ 			GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    			GUICtrlSetState($arCB[$i][0], BitOR($GUI_UNCHECKED, $GUI_ENABLE)) ; Markierung aufheben und enablen
    			$Checked = BitXOR($Checked, $arCB[$i][1])
    		EndIf
    	Next
    	_ReadCB()
    EndFunc
    
    
    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    	Local $str = 'Markiert:  '
    	For $i = 0 To UBound($arCB) -1
    		If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    	Next
    	WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc
    Alles anzeigen
  • Error adding script file

    • BugFix
    • 2. August 2015 um 17:51
    Zitat von clauer

    Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax

    Das verweist auf fehlerhafte Syntax. Du hast vor dem Kompilieren keinen Syntaxcheck ausgeführt und da die Syntax grundlegende Fehler aufweist, wurde der standardmäßige AU3-Check beim Kompilieren übersprungen.
    Also schau in dein Skript, was du da verbockt hast. :whistling:

  • Case problem..

    • BugFix
    • 31. Juli 2015 um 15:21
    Zitat von ManuelB.95

    $aSize = WinGetPos($id_slot_1)

    Wenn du die Abfrage für die Position (inkl. Abmessungen) eines Fensters auf ein Control anwendest, bekommst du natürlich ein Ergebnis, das nicht passt.
    Also nicht blind einsetzen, zumal ich ja auch kommentiert hatte WARUM diese Abfrage erfolgt. :whistling:

  • Wie Handle von ComboBox herausfinden?

    • BugFix
    • 30. Juli 2015 um 13:01
    Zitat von ISI360

    Wenn ich jedoch nur das Handle des Edits habe komme ich damit leider nicht auf das "richtige" Handle zurück.

    ?? - Na klar, Edit ist Child vom Combo. Somit bekommst du über die Parentabfrage auch das Combo-Hwnd

    AutoIt
    If _GUICtrlComboBox_GetComboBoxInfo($idCombo, $tInfo) Then
            MemoWrite("Handle to the ComboBox .....: " & DllStructGetData($tInfo, "hCombo"))
            MemoWrite("Handle to the Edit Box .....: " & DllStructGetData($tInfo, "hEdit"))
            MemoWrite("Handle to the drop-down list: " & DllStructGetData($tInfo, "hList"))
        EndIf
    
    
    	$hParent = _WinAPI_GetParent(DllStructGetData($tInfo, "hEdit"))
    	ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hParent --> " & $hParent & @LF)

    Und was bitte meinst du mit echten Handle? Gibt es denn unechte? - Klär mich mal auf. :rolleyes:

  • Case problem..

    • BugFix
    • 30. Juli 2015 um 12:45
    Zitat von ManuelB.95

    wie ich das umsetze, dass sie "versteckt" und oder deaktiviert werden.. und soll ich sie schon vorher "erstellen" und dann direkt verstecken? wie setze ich das am besten um

    Du könntest sie bereits vorher erstellen, aber die GUI-Größe so definieren, dass diese Ctrl nicht sichtbar sind. Erst nach Button-Klick wird die GUI "ausgeklappt".
    Wichtig - Für jedes Ctrl muß der Resizing-Befehl gesetzt werden, sonst spielen die Ctrl verrückt. Kannst den Befehl ja mal weglassen, dann siehst du den Unterschied.
    Hier ein Bsp.

    AutoIt
    Global $iW = 230, $iH_small = 40, $iH_full, $iH, $iX, $iY
    Global $fSwitch = False
    
    
    $hGui = GUICreate('Test', $iW, $iH_small)
    $idButton = GUICtrlCreateButton('Show/Hide Other Ctrl', 10, 10, 150, 20)
    GUICtrlSetResizing(-1, 802)   ;~ $GUI_DOCKALL = 802
    
    
    ; diese Ctrl werden nachher ein/ausgeblendet
    $idInput1 = GUICtrlCreateInput('', 10 , 40, 100, 20)
    GUICtrlSetResizing(-1, 802)   ;~ $GUI_DOCKALL = 802
    $idInput2 = GUICtrlCreateInput('', 120 , 40, 100, 20)
    GUICtrlSetResizing(-1, 802)   ;~ $GUI_DOCKALL = 802
    
    
    ; jetzt die wirklichen Abmaße des Fensters auslesen und speichern, brauchen wir für Resizing
    $aSize = WinGetPos($hGui)
    $iX = $aSize[0]
    $iY = $aSize[1]
    $iW = $aSize[2]
    $iH_small = $aSize[3]
    $iH_full = $iH_small +30
    
    
    GUISetState()
    
    
    While True
    	Switch GUIGetMsg()
    		Case -3
    			Exit
    		Case $idButton
    			$fSwitch = Not $fSwitch
    			$iH = $fSwitch ? $iH_full : $iH_small
    			WinMove($hGui, '', $iX, $iY, $iW, $iH)
    	EndSwitch
    WEnd
    Alles anzeigen
  • Wie Handle von ComboBox herausfinden?

    • BugFix
    • 30. Juli 2015 um 12:10

    Gibt genau dafür ein Bsp. in der Hilfe:

    AutoIt
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    
    
    Global $g_idMemo
    
    
    Example()
    
    
    Func Example()
        Local $tInfo, $idCombo
    
    
        ; Create GUI
        GUICreate("ComboBox Get ComboBox Info", 400, 296)
        $idCombo = GUICtrlCreateCombo("", 2, 2, 396, 296)
        $g_idMemo = GUICtrlCreateEdit("", 2, 32, 396, 266, 0)
        GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
        GUISetState(@SW_SHOW)
    
    
        ; Add files
        _GUICtrlComboBox_BeginUpdate($idCombo)
        _GUICtrlComboBox_AddDir($idCombo, @WindowsDir & "\*.exe")
        _GUICtrlComboBox_EndUpdate($idCombo)
    
    
        If _GUICtrlComboBox_GetComboBoxInfo($idCombo, $tInfo) Then
            MemoWrite("Handle to the ComboBox .....: " & DllStructGetData($tInfo, "hCombo"))
            MemoWrite("Handle to the Edit Box .....: " & DllStructGetData($tInfo, "hEdit"))
            MemoWrite("Handle to the drop-down list: " & DllStructGetData($tInfo, "hList"))
        EndIf
    
    
        ; Loop until the user exits.
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
    EndFunc   ;==>Example
    
    
    ; Write a line to the memo control
    Func MemoWrite($sMessage)
        GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
    EndFunc   ;==>MemoWrite
    Alles anzeigen
  • Case problem..

    • BugFix
    • 30. Juli 2015 um 10:04
    Zitat von ManuelB.95

    da wenn ich ein neues fenster öffnen lassen würde, ich das problem hätte, dass sich das ganze programm schließen würde sobald ich "X" auf dem fenster drücken würde.

    Nöö, dem ist nur so, wenn du das in deinem Skript festlegst. :P

    Hier mal ein einfaches Bsp., wie nur das Hauptfenster das Skript beendet. Beim Schliessen des zweiten Fensters wird zurückgekehrt zum Hauptfenster.
    Da das also das Hauptproblem war, hättest du vielleicht gleich mal in dieser Richtung fragen sollen... :rolleyes:

    AutoIt
    #include<GUIConstantsEx.au3>
    Local $gui1, $gui2, $btn1, $btn2, $msg
    
    
    $gui1 = GUICreate('GUI 1')
    $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
    
    
    $gui2 = GUICreate('GUI 2')
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
    
    
    GUISetState(@SW_SHOW, $gui1)
    
    
    While 1
    	$msg = GUIGetMsg(1)
    	Switch $msg[1] ; Window Handle
    		Case $gui1
    			Switch $msg[0] ; Event
    				Case $GUI_EVENT_CLOSE
    					ExitLoop
    				Case $btn1
    					GUISetState(@SW_HIDE, $gui1)
    					GUISetState(@SW_SHOW, $gui2)
    			EndSwitch
    		Case $gui2
    			Switch $msg[0]
    				Case $GUI_EVENT_CLOSE
    					GUISetState(@SW_SHOW, $gui1)
    					GUISetState(@SW_HIDE, $gui2)
    				Case $btn2
    					MsgBox(0, '', 'Button 2 geklickt')
    			EndSwitch
    	EndSwitch
    WEnd
    GUIDelete($gui1)
    GUIDelete($gui2)
    Alles anzeigen

    Edit:
    Hier mal noch ein Hinweis, wie du durch die Verwendung von Arrays (s. auch mein Array-Tut in der Signatur) deinen Code deutlich straffen kannst.
    Betrifft das If-Statement aus der Funktion um die Ctrl zu verschieben.

    AutoIt
    If $slot_1check Then
    		GUICtrlSetState (@SW_HIDE, $id_slot_1)         ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet
    		GUICtrlDelete ($id_slot_1)
    		GUICtrlSetState ($password_slot_1, $GUI_HIDE)
    		GUICtrlSetState ($market_slot_1, $GUI_HIDE)
    		GUICtrlSetState ($leveling_slot_1, $GUI_HIDE)
    		GUICtrlSetPos ( $slot_2, 8, 40, 75, 25)
    		GUICtrlSetPos ( $slot_3, 8, 72, 75, 25)
    		GUICtrlSetPos ( $slot_4, 8, 104, 75, 25)
    		GUICtrlSetPos ( $slot_5, 88, 8, 75, 25)
    		GUICtrlSetPos ( $slot_6, 88, 40, 75, 25)
    		GUICtrlSetPos ( $slot_7, 88, 72, 75, 25)
    		GUICtrlSetPos ( $slot_8, 88, 104, 75, 25)
    	Else
    		$id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21)
    		$password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
    		$market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17)
    		$leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17)
    		GUICtrlSetPos ( $slot_2,8,152  ,  75, 25)
    		GUICtrlSetPos ( $slot_3,8,184  ,  75, 25)
    		GUICtrlSetPos ( $slot_4,8,216  ,  75, 25)
    		GUICtrlSetPos ( $slot_5,136,8  ,  75, 25)
    		GUICtrlSetPos ( $slot_6,136,40 , 75, 25)
    		GUICtrlSetPos ( $slot_7,136,72 , 75, 25)
    		GUICtrlSetPos ( $slot_8,136,104, 75, 25)
    	EndIf
    
    
    #cs
    	; Wenn mehrfach dasselbe durchgeführt wird (GUICtrlSetPos) empfiehlt es sich mit Schleifen und Arrays zu arbeiten
    	; Im Array speicherst du: [[ID,x-Pos-1,y-Pos-1,x-Pos-2,y-Pos-2]]
    	; Sollte dann aber als Globales Array ausserhalb der Funktion erstellt werden, würde sonst bei jedem Aufruf neu erstellt werden
    	Local $aSlots[7][5] = [ _
    	[$slot_2,8,40,8,152], _
    	[$slot_3,8,72,8,184], _
    	[$slot_4,8,104,8,216], _
    	[$slot_5,88,8,136,8], _
    	[$slot_6,88,40,136,40], _
    	[$slot_7,88,72,136,72], _
    	[$slot_8,88,104,136,104]]
    
    
    	; In der Funktion dann nur die Schleife
    	; Spalten-Index im Array für x1 ist 1, für x2 ist er 3. Der y-Index ist immer x-Index +1
    	Local $iX = 1
    	If Not $slot_1check Then $iX = 3
    	; oder ternär: Local $iX = $slot_1check ? 1 : 3
    	For $i = 0 To UBound($aSlots) -1
    		GUICtrlSetPos($aSlots[$i][0], $aSlots[$i][$iX], $aSlots[$i][$iX+1], 75, 25)
    	Next
    #ce
    Alles anzeigen
  • Case problem..

    • BugFix
    • 30. Juli 2015 um 09:17
    Zitat von ManuelB.95

    ...jedoch stoße ich auf ein nächstes problem. wenn ich ich nochmal auf den button drücke, möchte ich gerne die zuvor generierten inputboxen sowie die radioboxen unsichtbar machen oder entfernen, ich weiß wieder nicht was ich falsch mache denn GUICtrlDelete oder GUICtrlSetState (@SW_HIDE, INPUTBOX) funktionieren beide nicht. anbei der code

    Du hattest mich wegen weiterer Fragen zu diesem Thema per PN angeschrieben. - Warum?
    Wir diskutieren die Fragen hier im Forum, dazu ist es da. Und dann haben auch andere User einen Nutzen davon.
    Es wäre nützlich, wenn du mal dein kpl. Skript zeigst, dann könnte man genauer auf die Schwachstellen eingehen.

    Hier mal die Funktion, die du mir geschickt hattest. Ich habe meine Anmerkungen rein geschrieben.

    AutoIt
    ; Grundsätzlich solltest du dir angewöhnen, alle GUI-Ctrl am Skriptanfang zu erstellen.
    ; Dann kannst du in Abhängigkeit von deinem Programmablauf die einzelnen Ctrl anzeigen ($GUI_SHOW) oder verstecken ($GUI_HIDE)
    ; oder auch deaktivieren/aktivieren ($GUI_DISABLE/$GUI_ENABLE)
    
    
    
    
     Func _slot_1check()
    	Local Static $slot_1check = True
    	$slot_1check = Not $slot_1check
    
    
    	; jetzt erstellst du ein Input und liest es SOFORT aus - wann bitte soll der User da eine Eingabe machen??
    	$id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21)
    	$id_slot_1r = GUICtrlRead ($id_slot_1)
    
    
    	; hier dasselbe nochmal
    	$password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
    	$password_slot_1r = GUICtrlRead ($password_slot_1)
    
    
    	$market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17)
    	$leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17)
    
    
    	; Ausserdem werden jetzt bei JEDEM Aufruf der Funktion diese Inputs und Radios erstellt.
    	; Es passt auch nicht, dass im selben Aufruf, indem das Input erstellt/gezeigt wird, dieses gelesen wird.
    	; Das kann logischerweise erst im nächsten Aufruf erfolgen. Hier solltest du dringend deine Programmlogik überarbeiten
    
    
    	If $slot_1check Then
    		GUICtrlSetState (@SW_HIDE, $id_slot_1)         ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet
    		GUICtrlDelete ($id_slot_1)
    		GUICtrlSetState ($password_slot_1, $GUI_HIDE)
    		GUICtrlSetState ($market_slot_1, $GUI_HIDE)
    		GUICtrlSetState ($leveling_slot_1, $GUI_HIDE)
    		GUICtrlSetPos ( $slot_2, 8, 40, 75, 25)
    		GUICtrlSetPos ( $slot_3, 8, 72, 75, 25)
    		GUICtrlSetPos ( $slot_4, 8, 104, 75, 25)
    		GUICtrlSetPos ( $slot_5, 88, 8, 75, 25)
    		GUICtrlSetPos ( $slot_6, 88, 40, 75, 25)
    		GUICtrlSetPos ( $slot_7, 88, 72, 75, 25)
    		GUICtrlSetPos ( $slot_8, 88, 104, 75, 25)
    	Else
    		$id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21)
    		$password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
    		$market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17)
    		$leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17)
    		GUICtrlSetPos ( $slot_2, 8, 152, 75, 25)
    		GUICtrlSetPos ( $slot_3, 8, 184, 75, 25)
    		GUICtrlSetPos ( $slot_4, 8, 216, 75, 25)
    		GUICtrlSetPos ( $slot_5, 136, 8, 75, 25)
    		GUICtrlSetPos ( $slot_6, 136, 40, 75, 25)
    		GUICtrlSetPos ( $slot_7, 136, 72, 75, 25)
    		GUICtrlSetPos ( $slot_8, 136, 104, 75, 25)
    	EndIf
     EndFunc
    Alles anzeigen
  • Case problem..

    • BugFix
    • 29. Juli 2015 um 22:39

    Nun, dazu haben findige Programmierer die Funktionen erfunden. :D

    Edit: Ich habe mal für dich noch ein paar Kommentare eingefügt, dann wird klar warum das funktioniert.

    AutoIt
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $slot_1
    			_Switch()
    	EndSwitch
    WEnd
    
    
    
    
    Func _Switch()
    	Local Static $slot_1check = True  ; statische Variable: wird beim ersten Aufruf erstellt und bleibt nach Funktionsende erhalten (Verhalten wie Globale Variable, aber nur in der Funktion gültig)
    	$slot_1check = Not $slot_1check   ; Wert der Variablen wird negiert: aus True wird False und umgekehrt, je nachdem, welchen Wert die Variable beim letzten Aufruf hatte
    	If $slot_1check Then              ; Abhängig ob True oder False wird das jeweilige Statement ausgeführt
    		GUICtrlSetPos ( $slot_1, 162, 8, 75, 25)
    	Else
    		GUICtrlSetPos ( $slot_1, 8, 8, 75, 25)
    	EndIf
    	; Bei Verwendung von AutoIt ab v3.3.12 kann man das If-Statement auch in einen Einzeiler stecken (Ternärer Operator)
    ;~ 	GUICtrlSetPos ( $slot_1, ($slot_1check ? 162 : 8), 8, 75, 25)
    EndFunc
    Alles anzeigen
  • Projekt: abfragen, Downloaden, übergeben, speichern und starten!

    • BugFix
    • 27. Juli 2015 um 08:55

    @syltfreak:

    Da lacht das Herz eines jeden Programmierers:
    Endlich mal jemand, der es schafft, die Umgebungsbedingungen seines Projektes ganz konkret und nachvollziehbar darzustellen. Das zeigt, dass du ohne Kenntnisse in der Programmierung zu haben, dir doch gründlich Gedanken zu Ablauf und Struktur gemacht hast. :thumbup:
    Da kann sich so mancher Poster aus H&U mal 'ne Scheibe abschneiden.

  • LIstview (oder ähnlich) befüllen

    • BugFix
    • 22. Juli 2015 um 11:56
    Zitat von Dietmar

    Sowas wie auf dem Bild stell ich mir final vor...

    Farbwechsel nebeneinander ist im Listview nicht so ohne weiteres möglich. Da muss man auf individuelles Zeichnen aller Inhalte zurückgreifen, hatte dafür auch mal eine UDF erstellt - ist aber sehr komplex.
    Aber kpl. Zeilen zu färben ist einfach: Die ID des erstellten Item auffangen und mit GUICtrlSetBkColor($ID_Item, $iColor) einfärben.
    Also wenn du mit einer Tabelle leben kannst, in der die Angaben untereinander stehen, geht das problemlos.
    Oder du verwendest das Listview im Group-Style, da kann man die Item ja nebeneinander anordnen. Sollte mit Färben dann auch so gehen.

  • LIstview (oder ähnlich) befüllen

    • BugFix
    • 22. Juli 2015 um 11:31
    Zitat von Dietmar

    also lfd. Nummer(unwichtig aber Vor und Nachname mit Komma getrennt klappt nicht vor dem Gleicheitszeichen in der Ini),
    Name und ein Kennzeichen wie die Person farblich hinterlegt sein soll.

    Und warum verwendest du da eine INI? CSV (allerdings mit Pipe als Trenner wegen Eintrag im Listview) ist doch hier viel sinnvoller:

    Code
    NAME|VORNAME|FARBE
    Mustermann|Max|1
    Müller|Gerlinde|2

    kannst du kpl. in ein Array lesen und dann ist jeder Eintrag sofort verwendbar um einen Listview-Eintrag zu erstellen.

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™