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

Beiträge von Oscar

  • AutoIt Screensaver collection - GDIPlus / Direct2D

    • Oscar
    • 4. Juni 2014 um 09:12

    Klasse gemacht! :thumbup:
    Am besten gefallen mir "ColorBalls" und "PrimeFactorization".
    Allerdings sind die Kreise nur auf meinem Hauptmonitor (Auflösung: 1920 x 1200 px) auch wirklich kreisrund. Bei meinem Zweitmonitor (Auflösung: 1600 x 1200 px) sehen die Kreise eher wie Eier (Ellipsen) aus.
    Kann man das noch anpassen? Oder ist das zu aufwendig?

  • Listbox und rechte Maustaste

    • Oscar
    • 28. Mai 2014 um 16:34

    Klar geht das! :D

    So:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    Local $MESSAGE = "The following buttons have been clicked"
    Local $add, $clear, $mylist, $close, $msg

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("My GUI list") ; will create a dialog box that when displayed is centered

    [/autoit] [autoit][/autoit] [autoit]

    $add = GUICtrlCreateButton("Add", 32, 32, 75, 25)
    $clear = GUICtrlCreateButton("Clear", 32, 72, 75, 25)
    $mylist = GUICtrlCreateList("buttons that have been clicked", 140, 32, 240, 97)
    GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling
    GUICtrlSetData(-1, $MESSAGE)
    $Context = GUICtrlCreateContextMenu($mylist)
    $Copy2Clip = GUICtrlCreateMenuItem('Copy2Clip', $Context)
    $close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $msg = $Copy2Clip
    ClipPut(GUICtrlRead($mylist))
    Case $msg = $add
    GUICtrlSetData($mylist, "You clicked button No1|")
    Case $msg = $clear
    GUICtrlSetData($mylist, "")
    Case $msg = $close
    MsgBox(0, "", "the closing button has been clicked", 2)
    Exit
    EndSelect
    WEnd
    EndFunc ;==>Example

    [/autoit]
  • Bewertung mit Sternen (MouseHover)

    • Oscar
    • 28. Mai 2014 um 13:21

    Ich habe das Script nochmal überarbeitet. Jetzt wird die Bewertung in einer Inidatei abgespeichert. Und man braucht nicht mehr die Icons downloaden. Das Script reicht aus. Die Binärdaten der Icons befinden sich im Script und werden zur Laufzeit extrahiert. Außerdem habe ich das Script mal kommentiert.

  • Ausgabe eines cmdlet übergeben

    • Oscar
    • 28. Mai 2014 um 11:41

    Die Rückgabe von Run ist auch die PID des gestarteten Prozesses.
    Wenn Du die Konsolenausgabe benötigst, musst Du diese mit StdoutRead auslesen (siehe auch das Beispiel zu dem Befehl).

  • Fenster vergrößern ändern - WinMove

    • Oscar
    • 28. Mai 2014 um 09:35

    Der Grund ist der, dass man bei GuiCreate die inneren Abmessungen angibt. WinMove benutzt aber die äußeren Abmessungen des Fensters.
    Du könntest Dir damit behelfen, diese Unterschiede mit WinGetPos und WinGetClientSize auszulesen und die Differenz der Werte zu der gewünschten Größe zu addieren.
    Das sieht dann ungefähr so aus:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('Test', 480, 160)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(1000)
    _WinMoveClientSize($hGui, 50, 50, 640, 480)
    $aWinSize = WinGetClientSize($hGui)
    _ArrayDisplay($aWinSize, 'Auflösung innen:')

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinMoveClientSize($hGui, $iX, $iY, $iWidth, $iHeight)
    Local $aWinPos = WinGetPos($hGui)
    If @error Then Return SetError(@error, 0, '')
    Local $aClientSize = WinGetClientSize($hGui)
    If @error Then Return SetError(@error, 0, '')
    Local $iNewWidth = $iWidth + $aWinPos[2] - $aClientSize[0]
    Local $iNewHeight = $iHeight + $aWinPos[3] - $aClientSize[1]
    WinMove($hGui, '', $iX, $iY, $iNewWidth, $iNewHeight)
    Return SetError(@error, 0, '')
    EndFunc

    [/autoit]
  • Bewertung mit Sternen (MouseHover)

    • Oscar
    • 28. Mai 2014 um 08:02

    Stimmt, das war zu kompliziert gedacht. :rolleyes:
    Aber ganz so einfach, wie bei Dir ist es dann doch nicht, weil bei Dir bereits das überfahren mit der Maus die Anzeige dauerhaft verändert.
    Das soll aber erst beim Mausklick passieren. Beim überfahren soll die Anzeige nur temporär die Sterne anzeigen.
    Ich hab's jetzt aber mal in Post#1 geändert. Danke für den Verbesserungsvorschlag!

  • timer in einem nicht klickbarem overlay

    • Oscar
    • 27. Mai 2014 um 20:01

    Hier ist ein Beispiel mit mehreren Timern: Multi-Timer

  • Bewertung mit Sternen (MouseHover)

    • Oscar
    • 27. Mai 2014 um 07:36

    Stimmt! Das passiert wahrscheinlich, weil die GUI bereits gelöscht wird, während die Funktion noch läuft (AdlibRegister)!?
    Obwohl ich dachte, dass Adlib nicht wirklich parallel läuft!? :?:
    Naja, ein

    [autoit]

    If @error Then Return

    [/autoit]


    nach ControlGetPos beseitigt das Problem. Habe es oben eingefügt. Danke, CheaterDieter! :thumbup:

  • Bewertung mit Sternen (MouseHover)

    • Oscar
    • 26. Mai 2014 um 20:22

    Hier mal ein Beispielscript, wie man eine Bewertung mit Sternen in das eigene Programm einbauen kann.
    Die Bewertung läßt sich mit der Maus ändern. Beim bewegen der Maus über die Sterne werden diese entsprechend angezeigt.
    Die beiden Icons (als Binärdaten im Script) sind von findicons.com und laut Beschreibung "Freeware". Diese beiden Icons werden automatisch im Unterverzeichnis ("icons") des Scriptverzeichnisses erstellt.

    Ich habe das Script mal komplett kommentiert, sodass es auch für Anfänger leichter zu verstehen ist.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1) ; den OnEventMode einschalten

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('SternBewertung', 480, 160) ; Die GUI erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, 'CloseGui') ; Funktion, die aufgerufen wird, wenn man das Fenster schließt
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_MOUSEMOVE') ; Funktion, die aufgerufen wird, sobald die Maus bewegt wird

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel('Bewertung:', 10, 25, 140, 32) ; Label mit Bewertungsschriftzug erstellen
    GUICtrlSetFont(-1, 16, 400, 0, 'Verdana', 5) ; die Schriftgröße und -art ändern

    [/autoit] [autoit][/autoit] [autoit]

    Global $sIconPath = @ScriptDir & '\icons\' ; Variable zum Pfad der Icons
    If Not FileExists($sIconPath) Then DirCreate($sIconPath) ; falls das Verzeichnis nicht existiert, dann dieses erstellen

    [/autoit] [autoit][/autoit] [autoit]

    Global $sIniFile = @ScriptDir & '\SternBewertung.ini' ; Pfad und Dateiname der Inidatei

    [/autoit] [autoit][/autoit] [autoit]

    Global $aidStars[5] ; Array für die IDs der Gui-Icons erstellen (hier für 5 Sterne)

    [/autoit] [autoit][/autoit] [autoit]

    Global $iShowStars = IniRead($sIniFile, 'Config', 'Bewertung', 0) ; Variable zum speichern der Bewertung (Wert aus der Inidatei lesen)
    If $iShowStars < 0 Or $iShowStars > UBound($aidStars) - 1 Then $iShowStars = 0 ; wenn der gespeicherte Wert nicht im Wertebereich des Arrays liegt, dann auf 0 setzen

    [/autoit] [autoit][/autoit] [autoit]

    Global $iStars = -1 ; Variable zum speichern der temporären (MouseOver) Bewertung

    [/autoit] [autoit][/autoit] [autoit]

    ; Die beiden folgenden Code-Zeilen erstellen die Icons, anhand der Binär-Daten, die mit Hilfe
    ; vom "'File to Base64 String' Code Generator" von UEZ in das Script integriert wurden.
    If Not FileExists($sIconPath & 'star0.ico') Then _star0ico(True, $sIconPath) ; falls das Icon "star0.ico" nicht existiert, dieses erstellen
    If Not FileExists($sIconPath & 'star1.ico') Then _star1ico(True, $sIconPath) ; falls das Icon "star1.ico" nicht existiert, dieses erstellen

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aidStars) - 1 ; entsprechend der Größe des Arrays werden hier die Anzahl der Sterne erstellt
    $aidStars[$i] = GUICtrlCreateIcon($sIconPath & 'star0.ico', 0, 170 + $i * 36, 20, 32, 32) ; die Sternicons erstellen
    GUICtrlSetOnEvent(-1, '_SetStars') ; Funktion, die aufgerufen wird, wenn man das Sternicon anklickt
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ChangeStars($iShowStars) ; einmal die Funktion "_ChangeStars" aufrufen, um die Anzahl der gespeicherten Sterne farbig anzuzeigen
    GUISetState(@SW_SHOW, $hGui) ; die GUI anzeigen lassen

    [/autoit] [autoit][/autoit] [autoit]

    WinWaitClose($hGui) ; warten, bis die GUI geschlossen wird
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func CloseGui()
    GUIDelete($hGui) ; die GUI schließen
    EndFunc ;==>CloseGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetStars()
    ToolTip('Das ist die' & @CRLF & 'gespeicherte Bewertung') ; Tooltip anzeigen
    $iShowStars = $iStars ; die "Speicher"-Variable mit der temporären Variable füllen
    IniWrite($sIniFile, 'Config', 'Bewertung', $iShowStars) ; den Wert in die Inidatei speichern
    _ChangeStars($iShowStars) ; die Sterne entsprechend setzen
    EndFunc ;==>_SetStars

    [/autoit] [autoit][/autoit] [autoit]

    Func _MOUSEMOVE()
    Local $aCursorInfo = GUIGetCursorInfo($hGui) ; Informationen über die GUI abrufen
    Switch $aCursorInfo[4] ; entsprechend dem GUI-Element, über dem sich gerade die Maus befindet, verzweigen
    Case $aidStars[0] To $aidStars[UBound($aidStars) - 1] ; wenn sich die Maus über einen der Sterne befindet, dann...
    $iStars = $aCursorInfo[4] - $aidStars[0] ; ausrechnen, um welchen Stern es sich handelt (Wert = 0-4)
    If $iStars <> $iShowStars Then ; wenn der Stern ungleich dem gespeicherten ist, dann...
    ToolTip('Bewertung ändern' & @CRLF & 'auf ' & $iStars + 1 & StringLeft(' Sterne', 6 + ($iStars > 0))) ; Tooltip anzeigen
    Else ; ansonsten (der Stern unter der Maus ist der gespeicherte Stern)...
    ToolTip('Das ist die' & @CRLF & 'gespeicherte Bewertung') ; Tooltip anzeigen
    EndIf
    _ChangeStars($iStars) ; temporäre Sterne anzeigen
    Case Else ; wenn sich die Maus nicht über einen der Sterne befindet, dann...
    ToolTip('') ; Tooltip schließen
    _ChangeStars($iShowStars) ; gespeicherte Sterne anzeigen
    EndSwitch
    EndFunc ;==>_MOUSEMOVE

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeStars($iChange)
    For $i = 0 To UBound($aidStars) - 1 ; Schleife zum bearbeiten aller Sterne
    If $i > $iChange Then ; wenn der Wert größer als $iChange ist, dann..
    GUICtrlSetImage($aidStars[$i], $sIconPath & 'star0.ico', 0) ; den grauen Stern anzeigen
    Else ; ansonsten...
    GUICtrlSetImage($aidStars[$i], $sIconPath & 'star1.ico', 0) ; den farbigen Stern anzeigen
    EndIf
    Next
    EndFunc ;==>_ChangeStars

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Die folgenden Codezeilen wurden mit dem "'File to Base64 String' Code Generator v1.15 Build 2014-05-01" von UEZ erstellt
    ; Danke an UEZ (http://www.autoit.de) für diesen tollen Generator
    Func _star0ico($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $star0ico
    $star0ico &= '9rRIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVyhGQEeHh4BgAECgAECBIABB46OjlBYqFhYGoAFE4ABFoABqhmAARuAARyAAR+EAbYhjAGBCR2EE4EdF4ABAhSAARFsbGwhYKhgYBGABQWEMwGQPQGBDQ2FhYVZv79Av/+kpKT/gAWiUCoqKk6AC0+AAVRVgAFYgAFbgAFegAFgrYABYYQBwQJcwABZwAAKVcAAUcAATEZGRgBbiYmJoqioqAD/oqKi/0pKSvYYwTfAAAPFIMQfwQDBHwAMkpKSdc/PzwL/AQDT09P/o6MAo/+BgYGjJibuJsEUwQDBIVfEIsEbwQALwQPBHVLBKjo6OloAhoaGqKampv8I3d3dwhKenp7hDcAGDs0fzCADkJCQACKurq7/9vb2AP/m5ub/8vLyMP/Q0NDCL8AmhCl8KSnBVsExwQDBZcUCFwBEREQelZWVjoClpaX/2dnZwg6A7e3t/+jo6MEfDqfEHcpfEQChoaHJAcEN2tra/9jY2BD/5eXlwhLOzs4hwkOgoKByyQupqRSpBsAXfsEd1dXVAP/z8/P/4+PjAP/W1tb/5+fnoP/Jycn/wBRa5aONwAp4wR3BENLS0sJhA8EzwTHx8fH/zMxqzMEh0sBEacEK4Q7RPNHR4g5hJmEHYQbU1KLU4haqqqphFhI/DwMDAGALKra2tv/wPPDwYhjhCGEAYRvb2yDb/+rq6mIDysr8yv9hReEOYRPhJWEE5QW/4QHhBGEVvw4LAGAa0mEHGNzc3GIKaQDX19c/4kphHWEzYQThFO0E5OSg5P/f399haYc/DuMLAGEG4ODg4gvhDX8AAW8A7u7u/8DAwBr/YBk8Pw4LAKenp/Azvr6+4j1hP2E6fwADZwDhNPf39/+rq7yr/+FTPw4PAOBG4eFwj2EoYTl/AGcA4uLiYm/dYAi0Pw0TAGAXlmFg4TjHYTx/AGcA6enpYkJgCHZpPw1yDzzhkOFaYUDePN7efwBoAOEGYRetrTStlmAJHj8O6i4hr4ivr6XhJ+/v72Ip42FRaQDh4eFmAL0BMQDvsQexP7ETcAyWXwYPAHQPYA+wsLCWcScBAPlA+fn/+Pj4cgD7APv7//z8/P/9wP39//7+/joAMQHxsQH6+vo6AwEAMQgxBQPfBg8AsbGxluzs/uxyAzEFtQYPAA8ACQD1CG9xAAEAMSywBZAfBwcAs/izs5OxCg8ADwAPAA8AFw0AcTkwBo2fBwAAtfi1tY21cg8ADwAPAA8AbQ8A//JksAaBuQewXj//sQkPAA8ADwAPAA8ACwBxdBC3t7cqOQi6uroAjbi4uPa5ubnG/z8AMwC7u7vPBAwA+38DPgDqsAf6Dw8ADwABAH3wB3IxNQ8AAwBxWjACOT+fAw8ADwAPAA0AMBIPxQzFxY8HBAC8vLzPf18DDwAPAA8ADwADADBplv2fB/9yarAPv1YPAA8ADwAbDwA3GC1xXQ0AxsbG4P/CwsIMHwMPAA8Ahw8ADwAHAMHBwbr9B39wfv9NDwAPAA8ADwD/B1HvMZgFALF+cBktnwIPAA8ADw8ADwALAPA7A8TExPv2B/AIxl8CDwAPAA8ADwDDDwABAMPDw3XxXfE4/bAAXR8CDwAPAA8ADwAPAMcBALEm8a/IyMhxJ/+Vfw8ADwAPAA8ADwAGADAvCQDCwl2wKMIGADgA/wQAgAA0AAMAHAEBBgEW+AMggB/4AAABBj/84QgG/gAAfwEGARYBNgbwAEYAAw/gAAAHFsAANwA7AQEH/+AHgP//4A////AEA4T4HwQDP////AQDAP5//w=='
    $star0ico = _WinAPI_Base64Decode($star0ico)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($star0ico) & ']')
    DllStructSetData($tSource, 1, $star0ico)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    $tSource = 0
    Local $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
    Local $hFile = FileOpen($sSavePath & "\star0.ico", 18)
    FileWrite($hFile, $bString)
    FileClose($hFile)
    EndIf
    Return $bString
    EndFunc ;==>_star0ico

    [/autoit] [autoit][/autoit] [autoit]

    Func _star1ico($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $star1ico
    $star1ico &= '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'
    $star1ico &= 'sA0zBzEAsQAA1/v//0y84/99MAI5jwMPAA8ADwAOAJkA3Q8YqNr/2vpg/v/O+f8wGTMA0AHwCMv0+/8Bn9h+z08DDwAPAA8ADwA0MqLg2Jas5vXyDnEHMQAC2bAAhdXu/wCefta/Vg8ADwAPAA8ABAAGEJ/SLT5wNOH9/wz/1XAHMQDf+/7/ABSq3P8AqtUMPx8DDwAPAA8ADwAHAAOlANq6yPH5/9r8CP//3DAAsej2//gCpdr/TQ8ADwAPAA8AAQ0Ap9lRbM/r/wriMBDkMABDwOX/8Aaf3S2PAg8ADwAPAAMPAAwAqv8DCKrbAP/e+vz/1Pb74P8DptvGTwIPAA8ADw8ADwAPADMI2nWY4QDy/3/X7/8DqvzZXQ8CDwAPAA8ADwAPAAHzB9UMELDe/wz6rrBMqv+VDwAPAA8ADwADDwA5COMJAKpdsCjVBgA4AP8EAIAANAADABwBAQYBFvgDIIAf+AAAAQY//OEIBv4AAH8BBgEWATYG8ABGAAMP4AAABxbAADcAOwEBB//gB4D//+AP///wBAOE+B8EAz////wEAwD+f/8='
    $star1ico = _WinAPI_Base64Decode($star1ico)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($star1ico) & ']')
    DllStructSetData($tSource, 1, $star1ico)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
    $tSource = 0
    Local $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
    Local $hFile = FileOpen($sSavePath & "\star1.ico", 18)
    FileWrite($hFile, $bString)
    FileClose($hFile)
    EndIf
    Return $bString
    EndFunc ;==>_star1ico

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
    EndFunc ;==>_WinAPI_Base64Decode

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize)
    $tOutput = DllStructCreate("byte[" & $iBufferSize & "]")
    If @error Then Return SetError(1, 0, 0)
    Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
    If @error Then Return SetError(2, 0, 0)
    If $aRet[0] Then Return SetError(3, $aRet[0], 0)
    Return $aRet[6]
    EndFunc ;==>_WinAPI_LZNTDecompress

    [/autoit]

    Dateien

    _SternBewertung.au3 11,34 kB – 458 Downloads
  • Problem mit Event-Aufruf beim einklappen eines TreeViewItems

    • Oscar
    • 26. Mai 2014 um 16:19

    Das Problem läßt sich relativ einfach beheben, wenn man die Unterscheidung (auf-/zuklappen und Checkbox anhaken) hinbekommt.
    Dazu kann man eine Variable benutzen, die mittels WM_NOTIFY entsprechend gesetzt wird (das ist in dem Beispiel von mir, das Kanashius gepostet hat, noch schlechter gelöst):

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Debug_TV = False
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Form1_1 = GUICreate("Test Framework Build Tool", 500, 360, 382, 56, BitOR($GUI_SS_DEFAULT_GUI, $DS_MODALFRAME))
    $Group1 = GUICtrlCreateGroup("Build Steps", 8, 8, 481, 350)
    $TreeView1 = GUICtrlCreateTreeView(16, 24, 465, 326, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES))
    $TreeView1_4 = GUICtrlCreateTreeViewItem("Main", $TreeView1)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Item = GUICtrlCreateTreeViewItem("Main 1", $TreeView1_4)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub1Item = GUICtrlCreateTreeViewItem("Sub 1", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub2Item = GUICtrlCreateTreeViewItem("Sub 2", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub3Item = GUICtrlCreateTreeViewItem("Sub 3", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub4Item = GUICtrlCreateTreeViewItem("Sub 4", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub5Item = GUICtrlCreateTreeViewItem("Sub 5", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub6Item = GUICtrlCreateTreeViewItem("Sub 6", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main1Sub7Item = GUICtrlCreateTreeViewItem("Sub 7", $main1Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Item = GUICtrlCreateTreeViewItem("Main 2", $TreeView1_4)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub1Item = GUICtrlCreateTreeViewItem("Sub 1", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub2Item = GUICtrlCreateTreeViewItem("Sub 2", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub3Item = GUICtrlCreateTreeViewItem("Sub 3", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub4Item = GUICtrlCreateTreeViewItem("Sub 4", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub5Item = GUICtrlCreateTreeViewItem("Sub 5", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub6Item = GUICtrlCreateTreeViewItem("Sub 6", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")
    $main2Sub7Item = GUICtrlCreateTreeViewItem("Sub 7", $main2Item)
    GUICtrlSetOnEvent(-1, "SelectionChangedChildItem")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1_1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1_1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "Form1_1Restore")

    [/autoit] [autoit][/autoit] [autoit]

    $fExpanded = False
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = GUICtrlGetHandle($TreeView1)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndTreeview
    Switch $iCode
    Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
    $fExpanded = True
    Case $NM_CLICK
    $fExpanded = False
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit] [autoit][/autoit] [autoit]

    Func SelectionChangedChildItem()
    If $fExpanded Then Return
    SetCheckedForAllChildItems(@GUI_CtrlId)
    SetCheckedForParentItem(@GUI_CtrlId)
    EndFunc ;==>SelectionChangedChildItem

    [/autoit] [autoit][/autoit] [autoit]

    Func SetCheckedForParentItem($hChildItem)
    Local $hParent = _GUICtrlTreeView_GetParentHandle($TreeView1, $hChildItem)

    [/autoit] [autoit][/autoit] [autoit]

    If $hParent <> 0 Then
    If _GUICtrlTreeView_GetChecked($TreeView1, $hChildItem) Then
    _GUICtrlTreeView_SetChecked($TreeView1, $hParent)
    ;SetTreeViewItemCheckedState($TreeView1, $hParent, True)
    Else
    Local $hChild
    Local $childCount = _GUICtrlTreeView_GetChildCount($TreeView1, $hParent)
    If $childCount > 0 Then
    Local $isAnyChildChecked = False
    For $i = 1 To $childCount
    If $i = 1 Then
    $hChild = _GUICtrlTreeView_GetFirstChild($TreeView1, $hParent)
    Else
    $hChild = _GUICtrlTreeView_GetNextSibling($TreeView1, $hChild)
    EndIf
    $isAnyChildChecked = BitOR($isAnyChildChecked, _GUICtrlTreeView_GetChecked($TreeView1, $hChild))
    Next
    _GUICtrlTreeView_SetChecked($TreeView1, $hParent, $isAnyChildChecked)
    ;SetTreeViewItemCheckedState($TreeView1, $hParent, $isAnyChildChecked)
    EndIf
    EndIf
    SetCheckedForParentItem($hParent)
    EndIf
    EndFunc ;==>SetCheckedForParentItem

    [/autoit] [autoit][/autoit] [autoit]

    Func SetTreeViewItemCheckedState($treeViewCtrl, $treeViewItem, $isChecked)
    If _GUICtrlTreeView_GetChecked($treeViewCtrl, $treeViewItem) <> $isChecked Then
    _GUICtrlTreeView_SetChecked($treeViewCtrl, $treeViewItem, $isChecked)
    EndIf
    EndFunc ;==>SetTreeViewItemCheckedState

    [/autoit] [autoit][/autoit] [autoit]

    Func SetCheckedForAllChildItems($hParentItem)
    Local $hChild
    Local $childCount = _GUICtrlTreeView_GetChildCount($TreeView1, $hParentItem)
    Local $isChecked = _GUICtrlTreeView_GetChecked($TreeView1, $hParentItem)

    [/autoit] [autoit][/autoit] [autoit]

    If $childCount > 0 Then
    For $i = 1 To $childCount
    If $i = 1 Then
    $hChild = _GUICtrlTreeView_GetFirstChild($TreeView1, $hParentItem)
    Else
    $hChild = _GUICtrlTreeView_GetNextSibling($TreeView1, $hChild)
    EndIf
    _GUICtrlTreeView_SetChecked($TreeView1, $hChild, $isChecked)
    ;SetTreeViewItemCheckedState($TreeView1, $hChild, $isChecked)
    SetCheckedForAllChildItems($hChild)
    Next
    EndIf
    EndFunc ;==>SetCheckedForAllChildItems

    [/autoit] [autoit][/autoit] [autoit]

    Func OnCloseSecondary()
    EndFunc ;==>OnCloseSecondary

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Close()
    Exit
    EndFunc ;==>Form1_1Close

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Maximize()
    EndFunc ;==>Form1_1Maximize

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Minimize()
    EndFunc ;==>Form1_1Minimize

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Restore()
    EndFunc ;==>Form1_1Restore

    [/autoit] [autoit][/autoit] [autoit]

    Func Input1Change()
    EndFunc ;==>Input1Change

    [/autoit] [autoit][/autoit] [autoit]

    Func TreeView1Click()
    EndFunc ;==>TreeView1Click

    [/autoit]
  • Checkboxes, Drivemapping, Filecopy

    • Oscar
    • 17. Mai 2014 um 14:35
    Zitat von mid

    Kann mir einer bei der GUI-Checkbox-Variablenzuweisung helfen?


    Wir könnten Dir sicher helfen! Vorausgesetzt Du postest mal Dein Script. :rolleyes:

  • Desktopsperre per USB-Stick

    • Oscar
    • 11. Mai 2014 um 12:47

    Oh, ist die GUI dann nicht OnTop? :huh:
    Hmm...muss ich mal schauen, wie man die erkennen kann.

  • Desktopsperre per USB-Stick

    • Oscar
    • 11. Mai 2014 um 11:49

    Danke, für das Lob! Naja, komplett erklären ist schwierig. Als Neuling solltest Du Dich vielleicht erstmal an den Beispielen in der Hilfe versuchen. Dabei lernt man sehr viel.

    Es gibt aber auch schon wieder eine neue Version. Man kann jetzt auch mehrere USB-Sticks registrieren.
    Alles weitere in Post #1.

  • ComboBox manuelle Eingabe verhindern

    • Oscar
    • 11. Mai 2014 um 10:43

    Hier ein Beispiel, wie misterspeed und James es gemeint haben:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('Test', 240, 100)
    Global $idCombo = GUICtrlCreateCombo('', 10, 10, 220, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetData(-1, 'Test1|Test2|Test3|Test4|Test5|Test6|Test7', 'Test4')
    Global $idEdit = GUICtrlCreateInput('', 10, 60, 220, 20)
    GUICtrlSetData(-1, GUICtrlRead($idCombo))
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idCombo
    GUICtrlSetData($idEdit, GUICtrlRead($idCombo))
    EndSwitch
    WEnd

    [/autoit]
  • Verlassen einer UDF mit Return funktioniert nicht

    • Oscar
    • 11. Mai 2014 um 10:29

    Ich würde @error anstatt einer globalen Variablen benutzen. Außerdem muss man nicht mehr FileGetAttrib benutzen, um die Unterscheidung "Datei/Ordner" zu treffen. Das Makro @extended wird bei einem Ordner gesetzt.
    Das ganze würde dann so aussehen:

    Spoiler anzeigen
    [autoit]


    $Path = Search(".exe", "C:")
    MsgBox(0, "$Path", $Path)

    [/autoit] [autoit][/autoit] [autoit]

    Func Search($app, $Dir) ;ohne GUI
    Local $Search, $File, $FullFilePath
    $Search = FileFindFirstFile($Dir & '\*.*')
    While 1
    If $Search = -1 Then ExitLoop
    $File = FileFindNextFile($Search)
    If @error Then ExitLoop
    $FullFilePath = $Dir & '\' & $File
    If @extended Then ;ordner gefunden
    $FullFilePath = Search($app, $FullFilePath)
    If @error Then
    FileClose($Search)
    Return SetError(1, 0, $FullFilePath)
    EndIf
    Else ;datei gefunden
    If StringRight($FullFilePath, 4) = ".exe" Then
    If StringInStr($FullFilePath, $app, 2) Then
    Switch MsgBox(3, "Objekt gefunden", "Soll folgendes Objekt verwendet werden?" & @LF & $FullFilePath)
    Case "6"
    Return SetError(1, 0, $FullFilePath)
    Case "2"
    MsgBox(0, "Abbruch", "Suche durch den Benutzer abgebrochen")
    Return SetError(2, 0, '')
    EndSwitch
    EndIf
    EndIf
    EndIf
    WEnd
    FileClose($Search)
    Return SetError(0, 0, $FullFilePath)
    EndFunc ;==>Search

    [/autoit]
  • Töne ausgeben (Beep) ?

    • Oscar
    • 10. Mai 2014 um 19:44

    Hast Du es hiermit schonmal versucht: _PlaySystemSound()

  • Desktopsperre per USB-Stick

    • Oscar
    • 10. Mai 2014 um 18:42

    Verdammt, das war ein blöder Bug! Sorry, an alle die davon betroffen waren.
    Habe den Bug beseitigt und Deine Vorschläge eingebaut. Danke!
    Neue Version in Post #1.

  • ListVIew Reihe löschen

    • Oscar
    • 10. Mai 2014 um 17:16

    Schau Dir mal das Script an: Listview-Datenbank-Beispiel

  • ListVIew Reihe löschen

    • Oscar
    • 10. Mai 2014 um 16:31

    Also erstmal: FileOpen gibt ein Handle zurück und dieses benutzt man dann bei FileWrite bzw. FileRead (siehe auch das Beispiel in der Hilfe).
    Jede Datei, die Du mit FileOpen öffnest musst Du unbedingt mit FileClose wieder schließen, sonst liegt ein Lock auf der Datei.

    Nun zu Deinem Problem: Wenn Du die Zeilen gelöscht hast, schreibst Du einfach den gesamten Datenbestand aus dem Listview in die Datei. So sind alle Änderungen abgespeichert.
    Eventuell vorher noch ein Backup von der Datei erstellen, dann kann man auch zu einem alten Bestand zurückkehren.

  • Desktopsperre per USB-Stick

    • Oscar
    • 10. Mai 2014 um 16:16

    Noch ein paar kleine Änderungen, damit das Programm jetzt auch mit mehreren Monitoren funktioniert.
    Neue Version in Post #1.

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™