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

Beiträge von Zeitriss

  • Merkwürdiges Verhalten von Tooltips (ANFÄNGER)

    • Zeitriss
    • 14. Oktober 2020 um 14:47

    Hi,

    sieh mal hier:

    https://www.autoitscript.com/forum/topic/20…position-issue/

    Folgendes klappt bei mir:

    AutoIt
    ToolTip(" Macht er auch ... ", @DesktopWidth/2, @DesktopHeight/2, _
    " Dieser Tooltip soll Bildschirmmittig erscheinen ",2,2)
    
    Sleep(5000)
    
    ToolTip("", Default, Default, Default, Default, -1)
    
    Sleep(500)
    
    ToolTip(" Macht er nur korrekt, wenn vorher der mittige NICHT aufgerufen wurde ", 4, @DesktopHeight - 60, _
    " Dieser Tooltip soll unten links erscheinen ",2,Default)
    
    Sleep(5000)
    Alles anzeigen

    mfg

    Zeitriss

  • Button in Programmschleife richtig abfragen !?!?

    • Zeitriss
    • 1. Oktober 2020 um 18:58

    Hi,

    Deine Funktion Example() aktiviert den OnEventModus, dieser deaktiviert GUIGetMsg():

    Zitat von https://autoit.de/onlinehilfe/online/html/functions/GUIGetMsg.htm

    Wenn die GUIOnEventMode-Option auf 1 gesetzt ist, ist der Rückgabewert von GUIGetMsg immer 0, und @error wurde auf 1 gesetzt.

    Generell ist es ratsam entweder mit OnEventMode oder mit GetMsg zu arbeiten, nicht aber beide zu kombinieren.

    Hier mal ein kleines Beispiel wie ein Grundgerüst, welches Arbeitet und gleichzeitig auf Knopfdrücke reagieren soll, im OnEventMode aussehen könnte.

    In diesem Fall wird eine Funktion alle 250ms per AdlibRegister aufgerufen und schreibt etwas Text in ein Edit-Control.

    Vielleicht bringt es dich etwas weiter.

    AutoIt
    #include<GUIConstants.au3>
    Opt("GUIOnEventMode", 1)
    
    #Region MainGUI
       Global $g_hGUI = GUICreate("Example", 500, 500)
       Global $g_idButton_Start = GUICtrlCreateButton("Start", 5, 5, 80, 22)
       Global $g_idButton_Stop = GUICtrlCreateButton("Stop", 90, 5, 80, 22)
       Global $g_idInput_Line = GUICtrlCreateInput("Dies ist eine Zeile", 175, 6, 320, 20)
       Global $g_idEdit_Result = GUICtrlCreateEdit("", 5, 30, 490, 465)
    
       GUICtrlSetState($g_idButton_Stop, $GUI_DISABLE)
       GUICtrlSetOnEvent($g_idButton_Start, "GUI_Button_Start")
       GUICtrlSetOnEvent($g_idButton_Stop, "GUI_Button_Stop")
       GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Close")
    #EndRegion
    
    Global $g_bWork = False ; Arbeitet das Programm grade
    Global $g_sLine = "" ; Zeile welche geschrieben werden soll wird hier später zwischengespeichert
    
    
    GUISetState(@SW_SHOW, $g_hGUI)
    
    While 1
       sleep(1000)
    WEnd
    
    
    #Region GUIEvents
    
       ; Hier wird die Loop Funktion mit AdlibRegister registiert.
       ; Ebenso werden hier alle benötigen Informationen in
       ; globale Variablen gespeichert, damit diese in der Funktion
       ; Loop() verfügbar sind. In deinem Fall wäre das z.B der
       ; Rückgabewert von TCPConnect.
       Func GUI_Button_Start()
    
          ;Speichere benötigte Daten in globale Variablen
          $g_sLine = GUICtrlRead($g_idInput_Line)
    
          $g_bWork = True
    
          ;Führe die Funktion Loop() alle 250ms durch
          AdlibRegister("Loop", 250)
    
          ; De/aktiviere GUIElemente
          GUICtrlSetState($g_idButton_Start, $GUI_DISABLE)
          GUICtrlSetState($g_idInput_Line, $GUI_DISABLE)
          GUICtrlSetState($g_idButton_Stop, $GUI_ENABLE)
       EndFunc
    
       ; Hier wird die Loop Funktion mit AdlibUnRegister unregistiert.
       ; In deinem Fall sollte hier z.B. der Socket freigegeben werden.
       Func GUI_Button_Stop()
          $g_bWork = False
    
          ;Führe die Funktion Loop() nicht mehr aus
          AdlibUnRegister("Loop")
    
          ; De/aktiviere GUIElemente
          GUICtrlSetState($g_idButton_Start, $GUI_ENABLE)
          GUICtrlSetState($g_idInput_Line, $GUI_ENABLE)
          GUICtrlSetState($g_idButton_Stop, $GUI_DISABLE)
       EndFunc
    
       Func GUI_Close()
          Exit
       EndFunc
    
    #EndRegion
    
    
    ; Diese Funktion verrichtet die eingentliche Arbeit, sie würde in deinem
    ; Fall den Inhalt deiner Do/Until Schleife in der Funktion Example() enthalten.
    ; Diese Funktion darf keine Dauerschleife enthalten. Da sie alle 250ms aufgerufen wird fungiert sie ohnehin als solche.
    Func Loop()
       Local $sText = GUICtrlRead($g_idEdit_Result)
       GUICtrlSetData($g_idEdit_Result, $sText & $g_sLine & @crlf)
    EndFunc
    Alles anzeigen

    mfg

    Zeitriss

  • MsgBox verlangsamt den Skriptablauf unter Win 10

    • Zeitriss
    • 6. April 2020 um 22:51

    Andy

    Ja, in diesem Fall bekommt das Fenster warscheinlich den Fokus. Dass dieses Problem irgendwas damit zu tun haben könnte war eigentlich auch schon alles was ich damit sagen wollte.

    Ich wollte nur ein Szenario produzieren bei dem der Fokus nicht auf das Fenster fällt. Anscheinend ist mir das misslungen.:/

    Etwas OT aber könntest du mir noch sagen welchen Rand du meinst?

    Ich habe grade folgende Punkte getestet, scheint bei mir aber keinen Unterschied zu machen.

    AutoIt_Version: 3.3.14.5
    OS: WIN_10

  • MsgBox verlangsamt den Skriptablauf unter Win 10

    • Zeitriss
    • 6. April 2020 um 19:06

    Hi,

    interessanterweise passiert das bei mir nicht, wenn verhindert wird, dass die GUI den Fokus bekommt.
    Wenn ich z.B. ein Toolwindow als Child vom DesktopWindow erstelle kann ich dieses sogar benützen.
    Hatt jetzt nicht wirklich viel praktischen Nützen, fand ich aber recht spannend.

    Habe hier mal das Script aus dem Startpost entsprechend abgeändert:

    Beispiel

    GUI erscheint immer im Hindergrund!

    AutoIt: Abgeändertes Startpost Script (ursprünglich von Musashi)
    #AutoIt3Wrapper_UseX64 = N
    #AutoIt3Wrapper_UseUpx = N
    #AutoIt3Wrapper_Res_SaveSource = N
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 6 -w 7
    #include<winapi.au3>
    #include<windowsconstants.au3>
    #include<guiconstants.au3>
    
    ; Variante : beliebige Messagebox anzeigen :
    ConsoleWrite("> ------------------------------------------" & @CRLF)
    ConsoleWrite("> >>>>> Check 1.1 - Calc() vor MsgBox <<<<< " & @CRLF)
    _Calc() ; vor Aufruf einer MsgBox
    
    GUITest() ;Fenster ohne Fokus
    
    ConsoleWrite("> >>>>> Check 1.2 - Calc() nach MsgBox <<<<<" & @CRLF)
    _Calc() ; nach Aufruf einer MsgBox
    ConsoleWrite("> ------------------------------------------" & @CRLF)
    
    ; ---------- Testfunktion(en) ----------------
    Func _Calc()
        Local $iTime, $iValue = 0
        $iTime = TimerInit()
        For $i = 1 to 5000000
            $iValue += 1
        Next
        $iTime = TimerDiff($iTime)
        ConsoleWrite("! " & StringFormat("% 15s: %4.3f ms", "Elapsed time = ", $iTime) & @CRLF)
    EndFunc   ;==>_Calc
    
    ; ----------- Fenster ohne Fokus -------------
    Func GUITest()
       Local $hGUI = GUICreate("Test", 300, 200, -1, -1,  BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_CHILD, $WS_SYSMENU), $WS_EX_TOOLWINDOW, _WinAPI_GetDesktopWindow())
       Local $idButton = GUICtrlCreateButton("Weiter", 10, 10, 280, 50)
       GUISetState(@SW_SHOWNOACTIVATE, $hGUI)
       While 1
          $msg = GUIGetMsg()
          Switch $msg
          Case $GUI_EVENT_CLOSE
             exit
          Case $idButton
             exitloop
          EndSwitch
       WEnd
       GUIDelete($hGUI)
    EndFunc
    Alles anzeigen
  • GDIPlus Kreisbogen ( G02 und G03 )

    • Zeitriss
    • 26. September 2018 um 21:15

    Hi,


    hier ein kleiner Denkanstoß.


    Siehe im Tabellenbuch nach "Kreisabschnitt" (oder im Internet, wenn kein Tabellenbuch verfügbar ist).
    Zudem brauchst du die Winkelfunktionen ein paar mal (offensichtlich).

    Sobald du den Mittelpunkt errechnet hast, sollte der Rest ziemlich einfach sein.

    Ist etwas unsauber sollte aber für die erste Situation funktionieren:

    AutoIt
    Func f($hGraphics, $aP1, $aP2, $iR, $bClockwise)
       Local Const $PI = ACos(-1)
       Local Const $fDegToRad = $PI / 180, $fRadToDeg = 180 / $PI
       Local $aLen[2] = [$aP1[0] - $aP2[0], $aP1[1] - $aP2[1]]; Distanz zwischen P1 & P2 in der X u. Y Achse
       Local $iLen = Sqrt($aLen[0]^2 + $aLen[1]^2); Distanz der Strecke P1-P2 (satz des pythagoras)
       Local $iDir = Mod($fRadToDeg * ASin(($aP2[0]-$aP1[0]) / $iLen), 360); Winkel der Strecke P1-P2 (Winkelfunktionen)
       If $aLen[1] > 0 Then $iDir = 180 - $iDir
       Local $iA = ASin($iLen /2 /$iR) * $fRadToDeg * 2 ;Mittelpunktswinkel  siehe Kreisabschnitt (ggf. im Tabellenbuch)
       Local $iAng = $iA / 2 - 90 + $iDir ;Winkel von P1 zum Kreismittelpunkt
       If Not $bClockwise Then
          $iAng = ($iAng-$iDir) *-1 + $iDir
          $iA *= -1
       EndIf
       Local $aCenter[2] = [$aP1[0] + Sin($iAng   * $fDegToRad) * $iR , $aP1[1] + Cos($iAng * $fDegToRad) * $iR]
       ; Gegenkatete(Abstand in der X Achse von P1-Center) = Sin a * Hypotenuse(Radius)
       ; Ankatete(Abstand in der Y Achse von P1-Center) = Cos a * Hypotenuse(Radius)
       Local $iX = $aCenter[0] - $iR
       Local $iY = $aCenter[1] - $iR
       Local $iW = $iR*2
       Local $iH = $iR*2
       Local $iStartAng = 270- $iAng
       Local $iSweepAng = $iA
       _GDIPlus_GraphicsDrawArc($hGraphics, $iX, $iY, $iW, $iH,$iStartAng, $iSweepAng)
       _GDIPlus_GraphicsDrawLine($hGraphics, $aP1[0], $aP1[1], $aP2[0], $aP2[1])
    EndFunc 
    Alles anzeigen

    mfg

    Zeitriss

  • GUICtrlCreateCombo spielt verrückt

    • Zeitriss
    • 5. September 2018 um 11:57

    Hi,

    möglicherweise wird in deinem Script/oder einer UDF der "GUIDataSeparatorChar" verstellt.

    Du könntest dir direkt vor dem neubefüllen der ComboBox das anzeigen lassen.

    AutoIt: z.B.
    ;~ #include <Date.au3>
    
    ...
    
    ConsoleWrite(_Now() & ' Opt("GUIDataSeparatorChar") = ' & Opt("GUIDataSeparatorChar") & @crlf)
    ;GUICtrlSetData ...

    Ansonsten könntest du komplett auf die _GUICtrlComboBox_... umsteigen, da sollte dieses Problem nicht auftreten können.

    Sollte der SeparatorChar verstellt sein, könnte es allerdings auch an anderen Stellen in deinem Script Probleme geben.

    AutoIt: _GUICtrlComboBox_...
    _GUICtrlComboBox_Create()
    _GUICtrlComboBox_AddString()
    _GUICtrlComboBox_ResetContent(); (Nicht _GUICtrlComboBox_SetCurSel)

    Es wäre etwas zielführender wenn wir das Script hätten:|

    mfg

    Zeitriss

  • CSV-Extractor

    • Zeitriss
    • 29. März 2018 um 20:25

    Hi,

    Sehr gut zu bedienen, vor allem die über CMD aufrufbaren Profile sind denke ich eine gute Idee.

    Hier noch ein paar Dinge die mir aufgefallen sind:

    Spoiler anzeigen

    Hier sollte "$idB_DeleteProfile" stehen.

    AutoIt
    GUICtrlSetTip($g_idB_Transfer, "Das ausgewählte Profil löschen")

    $iCount ergibt dort keinen Sinn (Zeilen: 733, 745, 756, 768).

    Da die maximale Anzahl an Spalten allerdings kleiner ist als $iMaxIndex braucht man das eigentlich nicht.

    AutoIt
    If $iCount = $iMaxIndex Then
        $iMaxIndex += $iMaxIndex
        ReDim $aIndices[$iCount]
    EndIf


    "$cmdline[]"?:P

    AutoIt
    Local $aSplit = StringSplit($cmdlineraw, '" "', 1) ; Aufrufmuster: "Profilname" "1.Datei" "2.Datei" "3.Datei" ...
        If $aSplit[0] < 2 Then Exit MsgBox($MB_ICONERROR, $g_sScriptName, "Zu wenige Parameter.")
        For $i = 1 To $aSplit[0]
            If $i = 1 Then
                $aSplit[$i] = StringTrimLeft($aSplit[$i], 1)
            ElseIf $i = $aSplit[0] Then
                $aSplit[$i] = StringTrimRight($aSplit[$i], 1)
            EndIf
        Next

    mfg

    Zeitriss

  • PixelChecksum lässt sich nicht vergleich?

    • Zeitriss
    • 1. März 2018 um 16:05

    Hi,

    Das Problem liegt bei deiner If-Bedingung.

    Siehe mal hier:

    Zitat von https://www.autoitscript.com/autoit3/docs/intro/lang_operators.htm

    From highest precedence to lowest:

    Not

    ^
    * /
    + -
    &
    < > <= >= = <> ==

    And Or

    mfg

    Zeitriss

  • Rekursiv Dateien per Explorer Kontextmenü drucken

    • Zeitriss
    • 3. November 2017 um 18:14

    Hi,

    - Deine Funktion _FileListToDict wird Ordner im Rekursiven nicht korrekt ausgeben.

    Wenn der erste Teil der If-Abfrage erfolgreich ist, wird der Else-Teil (hier würde der Ordner in das Dict übernommen werden) nie ausgefürt.

    Spoiler anzeigen
    AutoIt: Benutzerdefiniertes Drucken.au3
    If @extended And $bRec And $iDepth < $iMaxDepth Then ; Wenn es sich um ein Ordner handelt wird in diesem weiter gesucht - solange max. Rekursionstiefe nicht erreicht.
                    $iDepth += 1
                    $sFolder &= "\" & $sFile
                    $aSearchFile[$iDepth] = FileFindFirstFile($sFolder & "\*")
                ElseIf @error Then ; Wenn keine Dateien mehr im Ordner vorhanden sind wird das "Handle" Freigegeben
                    FileClose($aSearchFile[$iDepth])
                    $iDepth -= 1
                    $sFolder = StringRegExpReplace($sFolder, "\\[^\\]*$", "")
                Else
                    If $iFilesOrFolders <> 0 Then
                        If $iFilesOrFolders = 1 And StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then ContinueLoop
                        If $iFilesOrFolders = 2 And Not StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then ContinueLoop
                    EndIf
                    If $iFileInformation <> -1 Then
                        $iInfo = ""
                        Switch $iFileInformation
                            Case 0, 1, 2
                                $iInfo = FileGetTime($sFolder & "\" & $sFile, $iFileInformation, $FT_STRING)
                            Case -2
                                If Not StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then $iInfo = FileGetSize($sFolder & "\" & $sFile)
                            Case -3
                                If Not StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then $iInfo = __FileListToDict_ByteSuffix(FileGetSize($sFolder & "\" & $sFile))
                        EndSwitch
                        If @error Then ContinueLoop
                        If Not $bRelative Then
                            $oFiles($sFolder & "\" & $sFile) = $iInfo
                        Else
                            $oFiles(StringReplace($sFolder, $sStartFolder, "") & "\" & $sFile) = $iInfo
                        EndIf
                    Else
                        If Not $bRelative Then
                            $oFiles($sFolder & "\" & $sFile) = True
                        Else
                            $oFiles(StringReplace($sFolder, $sStartFolder, "") & "\" & $sFile) = True
                        EndIf
                    EndIf
                EndIf
    Alles anzeigen

    Er kann also nur Order ausgeben die er nicht durchsucht.

    Sorgt natürlich für keinen Fehler, da in diesem Script keine Ordner gesucht werden.

    - Die Stärken der Dictionary Objekte werden, in dem gegebenen Script, eigentlich garnicht genützt/gebraucht.

    Vielleicht stattdessen Array/List/... benützen.

    - Sieh dir mal die Hilfe zu "GUICtrlCreateUpdown" an, das passt denke ich etwas besser.

    AutoIt
    Local $idComboBox = GUICtrlCreateCombo("", 72, 48, 40, 25, 0x0003)
    GUICtrlSetData($idComboBox, "0|1|2|3|4|5", "0") ; Hier in der Combobox ist die Rekursionstiefe eingeschränkt. Soll es tiefer gehen, müssen die Werte nur ergänzt werden.

    mfg

    Zeitriss

  • GDI+ Transparenz Problem bei Bildüberlappung

    • Zeitriss
    • 26. Oktober 2017 um 19:37

    Hi,

    Aus der AutoIt-Hilfe:

    Zitat von https://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreatePic.htm

    To have a transparent picture create the GUI with the WS_EX_LAYERED extended style. The left-top pixel will be used as the transparency color. If several pictures are created the last picture defines the transparent color. See example 2.

    Zitat von UserIsGrateful

    Ich möchte nicht unbedingt ein Buffer System zur Darstellung einsetzen oder muss ich dies?

    Was spricht dagegen? Ich denke GDIPlus + Buffer sind hier eine gute Lösung.

    Dein Script enthält übrigens viele Stellen die mit Arrays viel einfacher und übersichtlicher laufen würden.

    Sieh dir hierzu mal das Tutorial von Bugfix an.

    mfg

    Zeitriss

  • Werte zuweisung beim Array, Index wird doppelt ausgeführt

    • Zeitriss
    • 24. Oktober 2017 um 16:13
    Zitat von AspirinJunkie

    Hast du zufällig Au3Check ausgeschaltet?

    Ähm...ja. :Face:

    Völlig vergessen.

    mfg

    Zeitriss

  • Werte zuweisung beim Array, Index wird doppelt ausgeführt

    • Zeitriss
    • 24. Oktober 2017 um 15:38

    Hi,

    Ich bin nicht besonders scharf darauf das Problem auf Englisch zu beschreiben, als Legastheniker habe ich genug mit der deutschen Sprache zu kämpfen.

    Wenn also jemand willig ist kann er gerne den Report schreiben. [Edit:Danke AspirinJunkie]

    Ich würde mich ansonsten frühstens am Wochenende damit befassen.


    autoiter:

    Verwendest du vielleicht eine ältere Version? Bei mir klappt das. [Edit: Mein Fehler siehe Beitrag #7)

    mfg

    Zeitriss

  • Werte zuweisung beim Array, Index wird doppelt ausgeführt

    • Zeitriss
    • 23. Oktober 2017 um 22:43

    Hi,

    ich hatte heute ein ziemlich seltsamen Fehler, den ich recht lange suchen musste.

    Der "Ausdruck" für den Index bei einem Array (nur bei der Werte zuweisung) scheint doppelt ausgeführt zu werden.

    AutoIt
    #include<Array.au3>
    Global $aArray[10]
    Global $oStack = ObjCreate("System.Collections.Stack")
    $oStack.Push(0)
    $oStack.Push(1)
    $oStack.Push(2)
    $aArray[$oStack.Pop()] = "test"
    ;( .Pop gibt den zuletzt gespeicherten Wert aus, dieser wird dann gelöscht und es kann auf den nächsten wert zugegriffen werden. Siehe https://autoit.de/index.php?thread/3407-alternativen-zum-array/)
    _ArrayDisplay($aArray)

    Hier würde ich jetzt erwarten, dass Index 2 den String "Test" enthält.

    Dieser befindet sich aber in Index 1!

    Hier nochmal eine Varriante bei der die doppelte Ausführung etwas auffälliger ist:

    AutoIt
    #include<Array.au3>
    Global $aArray[10], $var
    $aArray[MsgBox(0,"Zuweisung", "Hi, ich erscheine zweimal.")] = Null
    
    $var = $aArray[MsgBox(0,"Abruf", "Ich hingegen nur einmal ;(")]

    Die Zweite Msgbox ist in keiner Zuweisung, sie wird nur einmal ausgeführt.

    Da die doppelte Ausführung normalerweise folgenlos bleibt,( z.b. bei einer Varriable oder einer Zahl) ist es nicht sichtbar.

    Relevant wird es nur wenn man Funktionen (z.B. Random in kombination mit SRandom oder .Pop usw.) direkt einsetzt.

    Natürlich ist das einfach zu umgehen, denoch finde ich das recht kurios.

    @AutoItVersion: 3.3.14.2

    @OSVersion: WIN_10

    [Edit]

    Ticket wurde abgelehnt, vor 3 Jahren ist wohl schon jemand über das Problem gestolpert und hatte ein Ticket erstellt.

    https://www.autoitscript.com/trac/autoit/ticket/3003

    mfg

    Zeitriss

  • GuiCtrlBusy - wie ToolTip, nur anders ;-) - Final [v1.0]

    • Zeitriss
    • 20. Oktober 2017 um 16:29

    Schriftart: "Consolas"

    Links: _WinAPI_DrawText

    Rechts: _GDIPlus_GraphicsDrawString

    Ich habe willkürlich ein paar Schriftarten getestet, das Ergebniss von FontGetHeight schien eigentlich immer zu stimmen.

    mfg

    Zeitriss

  • GuiCtrlBusy - wie ToolTip, nur anders ;-) - Final [v1.0]

    • Zeitriss
    • 20. Oktober 2017 um 15:19

    Hi,

    Mehrere Busy's offen zu haben kann die Geschwindigkeit (zumindest bei mir) drastisch reduzieren (Ergebiss variiert stark bei jedem Durchlauf):

    Spoiler anzeigen
    AutoIt
    #include "GuiCtrlBusy[0.9].au3"
    For $iRound = 0 to 7
        If $iRound > 0 Then _GuiCtrlBusy_Create('Nr ' & $iRound, 'Test', 2, 420, 50, 0, 2, 'silver')
       Global $hTimer = TimerInit()
       For $i = 1 to 100
          ToolTip($i)
       Next
       ConsoleWrite(StringFormat("Busy: %i - ( %8.2fms )", $iRound, TimerDiff($hTimer)) & @crlf)
    Next
    _GuiCtrlBusy_Close(-1)
    ConsoleWrite("@OSVersion: " & @OSVersion & @crlf)
    ConsoleWrite("@AutoItVersion: " & @AutoItVersion & @crlf)
    Alles anzeigen

    Busy: 0 - ( 278.89ms )

    Busy: 1 - ( 380.03ms )

    Busy: 2 - ( 393.87ms )

    Busy: 3 - ( 540.40ms )

    Busy: 4 - ( 626.66ms )

    Busy: 5 - ( 1233.96ms )

    Busy: 6 - ( 3582.21ms )

    Busy: 7 - ( 8110.07ms )

    @OSVersion: WIN_10

    @AutoItVersion: 3.3.15.0

    >Exit code: 0 Time: 15.66

    Scheint nur bei $_iTimeCounter = 2 so extrem aufzutreten.

    (PC war recht ausgelastet wärend des Tests, unausgelastet kommt der Effekt vermutlich etwas später)

    AutoIt
    ; The default font size value needs to calculate for using in API funcs
    Global Const $giCALCFONTFACTOR = 1.67

    Gibt es dafür nicht _GDIPlus_FontGetHeight?

    mfg,

    Zeitriss

  • Erkennen wann der Button im Installer aktiv ist und dann den Button klicken

    • Zeitriss
    • 12. Oktober 2017 um 15:32

    Hi,

    ControlCommand() sollte dir eigentlich helfen können, sieh dir mal die Hilfe dazu an.

    mfg

    Zeitriss

  • GuiCtrlBusy - wie ToolTip, nur anders ;-) - Final [v1.0]

    • Zeitriss
    • 28. September 2017 um 16:53
    Zitat von Tuxedo

    deiner Korrektur

    Welcher Korrektur?:P

    Ich habe nur auf eine Stelle verwiesen die ich für Falsch halte.

    So müsste man das Memory-Problem Lösen können:

    AutoIt
    _WinAPI_DeleteObject(_WinAPI_SelectObject($hDestDC, $hFont))

    oder eben:

    Code
    Local $hTempFont = _WinAPI_SelectObject($hDestDC, $hFont)
    ...
       _WinAPI_DeleteObject($hTempFont)

    Dies dürfte eigentlich zu keinem Fehler führen.

    Edit: Sinnvoller wäre es warscheinlich $hFont in $hFontTitle bzw $hFontText (oder ähnlich) umzubenennen.

    Hift aber wie gesagt nicht bei dem eigentlichem Problem.

    PS:

    Zitat von BugFix

    [EDIT] ACHTUNG: Möglichen Fehler entdeckt. Bitte

    _WinAPI_DeleteDC($hDC)

    einfügen in Zeile #718.

    Sollte das nicht _WinAPI_ReleaseDC($hWnd, $hDC) sein?

    Zitat von https://www.autoitscript.com/autoit3/docs/libfunctions/_WinAPI_GetDC.htm

    After painting with a common device context, the _WinAPI_ReleaseDC() function must be called to release the DC


    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    BugFix , Tuxedo

    So scheint der Grafikfehler nicht mehr aufzutreten.

    GuiCtrlBusy.au3

    mfg

    Zeitriss

  • GuiCtrlBusy - wie ToolTip, nur anders ;-) - Final [v1.0]

    • Zeitriss
    • 28. September 2017 um 16:23

    Hi,

    Hier hast du ein _WinAPI_DeleteObject() vergessen:

    AutoIt
    Local $hFont = _WinAPI_CreateFont(16, 0, 0, 0, 600, False, False, False, $DEFAULT_CHARSET, _
                $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Microsoft Sans Serif')
    Code
    $hFont = _WinAPI_CreateFont(19, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
                $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Microsoft Sans Serif')

    Du erstellst zweimal mal $hFont, löscht es aber nur einmal.

    €: Löst aber nicht das Problem mit der Darstellung.

    mfg

    Zeitriss

  • Forenupdate - September 2017 - Probleme / Anregungen / Feedback - Sammelthread

    • Zeitriss
    • 1. September 2017 um 21:23

    Benützerkonto>Avatar:

    Zitat

    Eigene Avatare dürfen die Dateiendungen gif, jpg, jpeg, png, au3, zip und maximal eine Dateigröße von 150 kB besitzen.

  • Kopierhilfe

    • Zeitriss
    • 10. August 2017 um 16:30

    Hi,

    Spoiler anzeigen
    AutoIt
    Opt("GUIOnEventMode", 1)
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    
    
    Global $g_sPath_Ini = @scriptdir & "\Settings.ini"
    
    
    Global $g_sPath_Source = IniRead($g_sPath_Ini, "Path", "Source", "E:\Daten")
    Global $g_sPath_Dest = IniRead($g_sPath_Ini, "Path", "Dest", "F:\Dokumente\Aussendienst")
    
    
    Global $g_aLV_Folder[0][2]
    
    
    Global $g_hGUI = GUICreate("Projekt Kopieren", 500, 500, -1, -1, $WS_SIZEBOX)
    
    
    Opt("GUIResizeMode", BitOR($GUI_DOCKTOP, $GUI_DOCKLEFT, $GUI_DOCKSIZE))
    GUICtrlCreateLabel("Quellordner:", 0, 23, 70, 19, $SS_RIGHT)
    Global $g_idInput_Path_Source = GUICtrlCreateInput($g_sPath_Source, 80, 20, 350, 20)
    GUICtrlSetResizing($g_idInput_Path_Source, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT, $GUI_DOCKRIGHT))
    GUICtrlSetState($g_idInput_Path_Source, $GUI_DISABLE)
    Global $g_idButton_Path_Source = GUICtrlCreateButton("...", 435, 20, 30, 20)
    GUICtrlSetResizing($g_idButton_Path_Source, BitOR($GUI_DOCKTOP, $GUI_DOCKRIGHT, $GUI_DOCKSIZE))
    GUICtrlCreateLabel("Zielordner:", 0, 53, 70, 19, $SS_RIGHT)
    Global $g_idInput_Path_Dest = GUICtrlCreateInput($g_sPath_Dest, 80, 50, 350, 20)
    GUICtrlSetResizing($g_idInput_Path_Dest, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT, $GUI_DOCKRIGHT))
    GUICtrlSetState($g_idInput_Path_Dest, $GUI_DISABLE)
    Global $g_idButton_Path_Dest = GUICtrlCreateButton("...", 435, 50, 30, 20)
    GUICtrlSetResizing($g_idButton_Path_Dest, BitOR($GUI_DOCKTOP, $GUI_DOCKRIGHT, $GUI_DOCKSIZE))
    
    
    Opt("GUIResizeMode", $GUI_DOCKBORDERS)
    Global $g_idLV_SelectFolder = GUICtrlCreateListView("Projekt", 5, 100, 490, 340, $LVS_LIST, $LVS_EX_CHECKBOXES)
    
    
    Opt("GUIResizeMode", BitOR($GUI_DOCKRIGHT, $GUI_DOCKBOTTOM, $GUI_DOCKSIZE))
    Global $g_idButton_ResetColor = GUICtrlCreateButton("Färbung entf.", 10, 450, 90, 22)
    Global $g_idButton_SelectInv = GUICtrlCreateButton("Auswahl umkehren", 110, 450, 110, 22)
    Global $g_idButton_Save = GUICtrlCreateButton("Pfade Speichern", 230, 450, 150, 22)
    GUICtrlSetState($g_idButton_Save, $GUI_DISABLE)
    Global $g_idButton_Start = GUICtrlCreateButton("Kopieren", 390, 450, 100, 22)
    
    
    GUICtrlSetOnEvent($g_idButton_Path_Source, "Event_Button_Source")
    GUICtrlSetOnEvent($g_idButton_Path_Dest, "Event_Button_Dest")
    GUICtrlSetOnEvent($g_idButton_ResetColor, "Event_Button_ResetColor")
    GUICtrlSetOnEvent($g_idButton_SelectInv, "Event_Button_SelectInv")
    GUICtrlSetOnEvent($g_idButton_Save, "Event_Button_Save")
    GUICtrlSetOnEvent($g_idButton_Start, "Event_Button_Start")
    GUISetOnEvent($GUI_EVENT_CLOSE, "Event_Close")
    
    
    LoadFolderInListView($g_sPath_Source)
    GUISetState(1,$g_hGUI)
    CheckFolder()
    
    
    While 1
       sleep(1000)
    WEnd
    
    
    Func CopyProject($aFolder, $sPathSource, $sPathTarget); Übernimmt die eigentliche Kopierarbeit
       Local $sFolderSource, $sFolderTarget, $sFilesFail = ""
       For $i = 0 to UBound($aFolder) -1
    	  GUICtrlSetColor($aFolder[$i][1], 0x0000FF)
    	  $sFolderSource = $sPathSource & "\" & $aFolder[$i][0] & "\Dokument-Explorer\Berechnungen"
    	  $sFolderTarget = $sPathTarget & "\" & StringLeft($aFolder[$i][0], 4) & "\" & StringTrimLeft($aFolder[$i][0], 2) & "\Berechnungen"
    	  ConsoleWrite($sFolderSource & " --> COPY --> " & $sFolderTarget & @crlf)
    	  DirCreate($sFolderTarget)
    	  If DirCopy($sFolderSource,  $sFolderTarget, $FC_OVERWRITE) Then
    		 GUICtrlSetColor($aFolder[$i][1], 0x00FF00)
    		 GUICtrlSetState($aFolder[$i][1], $GUI_UNCHECKED)
    	  Else
    		 $sFilesFail &= $sFolderSource & @crlf & @crlf
    		 GUICtrlSetColor($aFolder[$i][1], 0xFF0000)
    	  EndIf
       Next
       If $sFilesFail <> "" Then MsgBox(16, "Fehler", "Folge Dateien konnten nicht kopiert werden: " & @crlf & @crlf & $sFilesFail)
    EndFunc
    
    
    Func CheckFolder(); Überprüft ob die Ordner ereichbar sind
       Local $bReady = True
       If Not FileExists($g_sPath_Source) Then
    	  $bReady = False
    	  MsgBox(16,"Fehler", "Quell-Ordner konnte nicht gefunden werden!")
       EndIf
       If Not FileExists($g_sPath_Dest) Then
    	  $bReady = False
    	  MsgBox(16,"Fehler", "Ziel-Ordner konnte nicht gefunden werden!")
       EndIf
       Return $bReady
    EndFunc
    
    
    Func Event_Button_Dest(); Auswählen des Zielordners über den Benützer
       Local $sNewPath = FileSelectFolder("Bitte den Projekt-Ordner wählen", $g_sPath_Dest)
       If @error Then Return
       $g_sPath_Dest = $sNewPath
       GUICtrlSetData($g_idInput_Path_Dest, $sNewPath)
       GUICtrlSetState($g_idButton_Save, $GUI_ENABLE)
    EndFunc
    
    
    Func Event_Button_ResetColor(); Setzt die Einfärbug zurück
       GUICtrlSetState($g_idLV_SelectFolder, $GUI_HIDE)
       For $i = 0 to UBound($g_aLV_Folder) -1
    		 GUICtrlSetColor($g_aLV_Folder[$i][1], 0x000000)
       Next
       GUICtrlSetState($g_idLV_SelectFolder, $GUI_SHOW)
    EndFunc
    
    
    Func Event_Button_Save(); Speichert die Pfade in einer Inidatei
       Local $iWrite = 0
       $iWrite += IniWrite($g_sPath_Ini, "Path", "Source", $g_sPath_Source)
       $iWrite += IniWrite($g_sPath_Ini, "Path", "Dest", $g_sPath_Dest)
       If $iWrite < 2 Then
    	  MsgBox(16, "Error", "Speichern in Ini-Datei nicht möglich!")
    	  Return
       EndIf
       GUICtrlSetState($g_idButton_Save, $GUI_DISABLE)
    EndFunc
    
    
    Func Event_Button_SelectInv(); Invertiert die Auswahl des ListView
       Local $iState
       GUICtrlSetState($g_idLV_SelectFolder, $GUI_HIDE)
       For $i = 0 to UBound($g_aLV_Folder) -1
    	  $iState = GUICtrlRead($g_aLV_Folder[$i][1], 1)
    	  If BitAND($iState, $GUI_CHECKED) Then
    		 GUICtrlSetState($g_aLV_Folder[$i][1], $GUI_UNCHECKED)
    	  Else
    		 GUICtrlSetState($g_aLV_Folder[$i][1], $GUI_CHECKED)
    	  EndIf
       Next
       GUICtrlSetState($g_idLV_SelectFolder, $GUI_SHOW)
    EndFunc
    
    
    Func Event_Button_Start(); Listet die ausgewählten Projekte auf und ruft CopyProject() auf
       If Not CheckFolder() Then Return
       GUICtrlSetState($g_idButton_Start, $GUI_DISABLE)
       GUICtrlSetData($g_idButton_Start, "Arbeitet")
       Local $aFolderList[UBound($g_aLV_Folder)][2]
       Local $iCounter = 0
       For $i = 0 to UBound($g_aLV_Folder) -1
    	  If BitAND(GUICtrlRead($g_aLV_Folder[$i][1], 1), $GUI_CHECKED) Then
    	  $aFolderList[$iCounter][0] = $g_aLV_Folder[$i][0]
    	  $aFolderList[$iCounter][1] = $g_aLV_Folder[$i][1]
    	  $iCounter += 1
    	  EndIf
       Next
       ReDim  $aFolderList[$iCounter][2]
       CopyProject($aFolderList, $g_sPath_Source, $g_sPath_Dest)
       GUICtrlSetState($g_idButton_Start, $GUI_ENABLE)
       GUICtrlSetData($g_idButton_Start, "Kopieren")
    EndFunc
    
    
    Func Event_Button_Source(); Auswählen des Quellordners über den Benützer
       Local $sNewPath = FileSelectFolder("Bitte den Projekt-Ordner wählen", $g_sPath_Source)
       If @error Then Return
       $g_sPath_Source = $sNewPath
       GUICtrlSetData($g_idInput_Path_Source, $sNewPath)
       LoadFolderInListView($g_sPath_Source)
       GUICtrlSetState($g_idButton_Save, $GUI_ENABLE)
    EndFunc
    
    
    Func Event_Close()
       Exit
    EndFunc
    
    
    Func LoadFolderInListView($sPath); Listet die Projekte aus dem Quellordner auf, wenn sie dem Schema entsprechenden.
       For $i = 0 to UBound($g_aLV_Folder) -1
    	  $g_aLV_Folder[$i][0] = ""
    	  GUICtrlDelete($g_aLV_Folder[$i][1])
       Next
       Local $aFolder = _FileListToArray($sPath, "*", $FLTA_FOLDERS, False)
       If Not IsArray($aFolder) Then
    	  ReDim $g_aLV_Folder[0][2]
    	  Return
       EndIf
       Local $iCounter = 0
       ReDim $g_aLV_Folder[ $aFolder[0] ][2]
       For $i = 1 to $aFolder[0]
    	  If StringRegExp($aFolder[$i], "\d\d\d\d....") Then
    		 $g_aLV_Folder[$iCounter][0] = $aFolder[$i]
    		 $g_aLV_Folder[$iCounter][1] = GUICtrlCreateListViewItem($aFolder[$i], $g_idLV_SelectFolder)
    		 $iCounter += 1
    	  EndIf
       Next
       ReDim $g_aLV_Folder[ $iCounter ][2]
    EndFunc
    Alles anzeigen

    Die Inputboxen sind nun nicht mehr Zentriert sondern an den Kanten ausgerichtet, zuvor war das Resizing echt unglücklich.

    Fertig Kopierte Elemente werden Grün gefärbt.

    Es wird nun überprüft ob Ziel/Quell Ordner existieren.

    mfg
    Zeitriss

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™