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

Beiträge von Bitnugger

  • GUI an Bildschirm Rand andocken

    • Bitnugger
    • 11. Juli 2018 um 21:11

    Simpel

    Deine Links führen beide zu deinem Post... richtig wäre:

    Link 1: https://www.autoitscript.com/forum/topic/129196-winsnap-automatic-window-alignment-udf/

    Link 2: https://www.autoitscript.com/forum/topic/129196-winsnap-automatic-window-alignment-udf/?do=findComment&comment=1317890

  • WindowDocking

    • Bitnugger
    • 11. Juli 2018 um 20:45

    Hm, wozu soll denn Zeile 137 gut sein, wenn doch direkt in der darauf folgenden Zeile 138 das Fenster bewegt wird?

    AutoIt
        _WinAPI_SetWindowPos($hWnd, 0, $iWinX, $iWinY, 0, 0, BitOR($SWP_NOSIZE, $SWP_NOSENDCHANGING)) ; ohne Nachricht an WM_WINDOWPOSCHANGING bewegen
        _WinAPI_SetWindowPlacement($hWnd, $tWinPlmnt) ; jetzt erst die neuen Werte dem Fenster zuweisen

    Edit: Ah, ok, um es nach vorne zu holen...

    In Zeile 144 hast du ein 'c' vergessen...

    ; Description ...: Die neue WindowProc, die dem Dockingfenster bei "_WindowDocking_Add" zugewiesen wird.

  • GUI an Bildschirm Rand andocken

    • Bitnugger
    • 11. Juli 2018 um 20:10

    Ich habe dafür mal eine kleine Demo geschrieben...

    Was mich allerdings wundert: Auf dem primären Monitor werden alle (maximierten) Fenster nach Entfernen der AppBar automatisch wieder auf die korrekte Größe gebracht und auch die MonitorWorArea wird wieder auf die ursprüngliche Größe zurückgesetzt, auf meinem sekundären Monitor aber nicht!?

    Dateien

    _ShAppBarMessage.au3 9,8 kB – 432 Downloads
  • GUI an Bildschirm Rand andocken

    • Bitnugger
    • 11. Juli 2018 um 07:28

    Ich denke nicht, dass es das ist, was er sucht... denn er schreibt ja...

    Zitat von mcbaldrian

    so dass sich die alle anderen Programme ( also immer on top )daran anpassen.

    Dateien

    _ShAppBarMessage.au3 9,8 kB – 408 Downloads
  • Skalierende Message Box

    • Bitnugger
    • 9. Juli 2018 um 04:36
    Zitat von xTcisloVe

    Wenn ich button 1 drücke wie bekomme ich den return code 1?

    AutoIt
    Case $Btn_Start To $Btn_End
            Return $Msg - $Btn_Start + 1
  • WindowDocking

    • Bitnugger
    • 8. Juli 2018 um 16:50

    Die Tasten-Methode zwingt den User aber, eine Taste zu drücken, damit es funktioniert... guck mal, so geht es auch ohne...

    Dateien

    WindowDocking.au3 4,66 kB – 332 Downloads
  • WindowDocking

    • Bitnugger
    • 8. Juli 2018 um 14:57
    Zitat von Oscar

    - Wegen $WM_WINDOWPOSCHANGING funktioniert jetzt das "weiterziehen" mit der Maus nicht mehr, um auf einen anderen Bildschirm zu kommen.

    Deswegen habe ich jetzt einen Hotkey: <CTRL> eingebaut. Wird die CTRL-Taste während des ziehens gedrückt gehalten, so kann man das Fenster auf den anderen Bildschirm ziehen.

    Du kannst aber auch einfach abfragen, ob sich die linke obere bzw. rechte untere Ecke auf demselben Monitor befindet.

    Zudem sind mir noch zwei Sachen aufgefallen.

    1.) Du erzeugst eine Dummy-GUI und setzt die WinProc-Funktion dann bei _WindowDocking_Remove auf $__g_hDocking_ProcOld. Was passiert, wenn die WinProc-Funktion im Script vor Aufruf von _WindowDocking_Add bereits geändert wurde?

    2.) Du entfernst bei _WindowDocking_Remove immer das zuletzt hinzugefügt Fenster, das kann doch unmöglich richtig sein?!

    Den Wert für den MagneticBorder könntest du auch als optionalen Parameter bei _WindowDocking_Add einbauen und mit in $__g_ahDocking_Gui speichern.

  • WindowDocking

    • Bitnugger
    • 8. Juli 2018 um 07:11

    Ab Windows 7 gibt es dafür doch bereits das Feature Aero Snap... hier die zugehörigen Registry-Keys.

    AutoIt
    Local $iDockMoving = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop', 'DockMoving'); 1
    Local $iDragHeight = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop', 'DragHeight') ; 4
    Local $iDragWidth  = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop', 'DragWidth') ; 4
    ConsoleWrite('$iDockMoving = ' & $iDockMoving & @CRLF)
    ConsoleWrite('$iDragHeight = ' & $iDragHeight & @CRLF)
    ConsoleWrite('$iDragWidth  = ' & $iDragWidth & @CRLF)
    Zitat von Oscar

    Allerdings flackert es noch ein wenig, wenn man versucht das Fenster am Bildschirmrand noch weiter zu bewegen.

    Werte besser die Message $WM_WINDOWPOSCHANGING aus und verschiebe das Window nicht selbst, sondern trage bei Bedarf einfach nur die neuen Werte für X und Y in die $tagWINDOWPOS-Struktur ein, denn diese werden im nächsten Schritt verwendet. CX und CY musst du dann natürlich auch anpassen.

    PS: Die Taskleiste muss nicht unbedingt unten sein.

  • Ergebnisse in ein Array speichern, erweitern und Information wieder finden.

    • Bitnugger
    • 7. Juli 2018 um 21:30
    Zitat von tubsids

    das Problem ist

    1. Die Blätter sind unterschiedlich befüllt (unterschiedliche Zeilen- und Spaltenzahlen mit Inhalten)

    Das hat mich wohl zu dem Gedanken gebracht...

  • AutoIt Package/Module Manager

    • Bitnugger
    • 7. Juli 2018 um 02:16
    Zitat von Mars

    Wir können ja einen Forenabschnitt "UDF" einführen, weil aktuell landen alle UDFs im "Skripte" Forum.

    Super Idee!

    Zitat von Mars

    Dazu noch einen Standadisierten Header:

    Wenn du damit ein Forum interenen Header meinst, ist das ok, anderfalls sollte der Header aber ohne jedwede Vorgabe sein.

  • Ergebnisse in ein Array speichern, erweitern und Information wieder finden.

    • Bitnugger
    • 7. Juli 2018 um 02:08
    Zitat von autoiter

    Wie kommst du darauf, dass der bisherige Inhalt verloren ginge?

    Ich hatte das hier im Sinn...

    AutoIt
    Local $aArray = [111111111,222222222,333333333]
    _ArrayDisplay($aArray, '$aArray - Before ReDim')
    ReDim $aArray[UBound($aArray)][2]
    $aArray[0][1] = 44444444
    _ArrayDisplay($aArray, '$aArray- After ReDim')
  • Ergebnisse in ein Array speichern, erweitern und Information wieder finden.

    • Bitnugger
    • 6. Juli 2018 um 21:00
    Zitat von autoiter

    und in diesem Fall das bisherige Array ($aResultGesamt) per ReDim auf die notwendige Größe zu erweitern

    Dabei geht aber doch der Inhalt des Arrays verloren... mit _ArrayColInsert($aArray, UBound($aArray, 2) + 1) aber nicht...

  • Frage zum Ergebnisfenster von msg.exe

    • Bitnugger
    • 5. Juli 2018 um 17:23

    Ich habe noch etwas in meinem Archiv dazu gefunden...

    AutoIt
    ;-- TIME_STAMP   2017-11-17 23:12:04   v 0.1
    
    #include <MsgBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    
    ;~ Modal MsgBox Styles
    
    ;~ MsgBox is a blocking function which means that a script pauses until a button on the MsgBox is pressed at which point the function terminates with a return value which you can use in a decision structure of some kind. Your main GUI appears unresponsive until the MsgBox is cleared. However, things are not quite that simple because the MsgBox can be set as Application, System or Task Modal. Although the values needed to set these styles are given in the Helpfile, it does not actually explain the difference between them.
    
    ;~ Application
    ;~ This is the default setting. In this case your GUI will react to mouse clicks and will even retake focus from the MsgBox, but will not act on the clicks until the MsgBox is cleared. Try closing the main GUI while the MsgBox is displayed - it will not close unless you clear the Msgbox first:
    
    Opt('GUIOnEventMode', 1)
    
    $hGUI = GUICreate("Test", 500, 100, -1, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Close')
    $idBut = GUICtrlCreateButton('Click this Button and than close the MsgBox!', 5, 10, 490, 80)
    GUICtrlSetOnEvent(-1, '_But')
    GUISetState()
    
    $sMsgBoxType = '$MB_APPLMODAL - '
    MsgBox($MB_APPLMODAL, "Blocking", "MsgBox $MB_APPLMODAL - Press me to continue")
    
    ;~ System Modal
    ;~ Now the MsgBox remains in view even if the main GUI regains focus although the main GUI appears inactive the GUI. However if the main GUI is closed this will again occur as soon as the MsgBox is cleared.
    
    $sMsgBoxType = '$MB_SYSTEMMODAL - '
    MsgBox($MB_SYSTEMMODAL, "Blocking", "MsgBox $MB_SYSTEMMODAL - Press me to continue")
    
    ;~ Task Modal
    ;~ Now we get to the real deal - you cannot action anything on the main GUI until the MsgBox is cleared. So you cannot close the main GUI - or do anything else with it at all!
    
    $sMsgBoxType = '$MB_TASKMODAL - '
    MsgBox($MB_TASKMODAL, "Blocking", "MsgBox $MB_TASKMODAL - Press me to continue")
    
    ;~ Now all you have to do is choose which type best suits your needs!
    
    ;~ An Added Extra
    ;~ Another way to prevent the GUI from being actioned while the MsgBox is present is to set the "parent" parameter like this:
    
    $sMsgBoxType = '$MB_APPLMODAL and parent - '
    MsgBox($MB_APPLMODAL, "Blocking", "MsgBox $MB_APPLMODAL and parent - Press me to continue", 0, $hGUI)
    
    $sMsgBoxType = ''
    GUICtrlSetData($idBut, 'Close the GUI!')
    WinWaitClose($hGUI)
    
    Func _But()
        ConsoleWrite($sMsgBoxType & 'Button was pressed!' & @CRLF)
    EndFunc
    
    Func _Close()
        Exit
    EndFunc
    Alles anzeigen
  • Frage zum Ergebnisfenster von msg.exe

    • Bitnugger
    • 5. Juli 2018 um 15:25

    Oscar , also ehrlich, du bist ja voll krass... hättest die Maus zumindest innerhalb des Meldungsfensters frei laufen lassen können... :rofl:

  • Frage zum Ergebnisfenster von msg.exe

    • Bitnugger
    • 5. Juli 2018 um 12:46

    Hier mal ne kleine Demo...

    AutoIt: _LockMsg.au3
    ;-- TIME_STAMP   2018-07-05 12:44:11   v 0.1
    
    #Region    ;************ Includes ************
    #include-once
    #Include <Array.au3>
    #include <BlockInputEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIGdi.au3>
    #Include <WinAPISysInternals.au3>
    #EndRegion ;************ Includes ************
    
    _Example()
    
    Func _Example()
        #Region - GUI Create
    
        Local $aWinPos = _GetMaxPos()
        Local $hGUI = GUICreate('', $aWinPos[2], $aWinPos[3], $aWinPos[0], $aWinPos[1], $WS_POPUPWINDOW, $WS_EX_TOPMOST)
        GUISetBkColor(0x282828)
        WinSetTrans($hGUI, '', 192)
    
        GUISetState()
        #EndRegion
    
        $aWinPos = _GetMaxPos()
        ;~ _BlockInputEx( [iBlockMode [, sExclude [, sInclude [, hWindows [, $iBlockAllInput]]]]] )
        If Not _BlockInputEx(3) Then Exit 11 ; alle Tasten blockieren
    
        ;~ MsgBox ( flag, "title", "text" [, timeout = 0 [, hwnd]] )
        MsgBox($MB_OK, 'This is a Message from H. Hasenmueller', 'Thist ist a test.', BitOR($MB_ICONINFORMATION, $MB_DEFBUTTON1, $MB_SYSTEMMODAL, $MB_TOPMOST), $hGUI)
    
        _BlockInputEx(0) ; unblock all
    
        Return True
    EndFunc
    
    ; Fenstergröße auf alle Monitore ausdehnen!
    Func _GetMaxPos()
        Local $iScreenX = _WinAPI_GetSystemMetrics($SM_CXVIRTUALSCREEN)
        Local $iScreenY = _WinAPI_GetSystemMetrics($SM_CYVIRTUALSCREEN)
        ConsoleWrite("> $iScreenX --> " & $iScreenX & @CRLF)
        ConsoleWrite("> $iScreenY --> " & $iScreenY & @CRLF)
    
        Local $tPoint = _WinAPI_CreatePoint(- $iScreenX, - $iScreenY)
        Local $hMonitor = _WinAPI_MonitorFromPoint($tPoint, $MONITOR_DEFAULTTONEAREST) ; (Default)
        Local $aData = _WinAPI_GetMonitorInfo($hMonitor)
        If Not IsArray($aData) Then Exit 22
        Local $tRect = $aData[1]
        Local $aRect = _WinAPI_GetPosFromRect($tRect)
        Local $aWinPos[4] = [$aRect[0], $aRect[1], $iScreenX, $iScreenY]
    
        ConsoleWrite('! $aWinPos  --> ' & _ArrayToString($aWinPos, ', ') & @CRLF)
    
        Return $aWinPos
    EndFunc
    Alles anzeigen

    Dateien

    BlockInputEx.rar 6,11 kB – 424 Downloads
  • Frage zum Ergebnisfenster von msg.exe

    • Bitnugger
    • 5. Juli 2018 um 11:20

    1.) MessageBox, wie der Name der Exe bereits andeutet.

    2.) Hier z.B.: https://www.autoitscript.com/forum/topic/11…roved-tcp-chat/

  • Skalierende Message Box

    • Bitnugger
    • 5. Juli 2018 um 11:00

    Du solltest dir mal die UDF _ExtMsgBox anschauen, denn aus dem Code kannst du sicher einiges für dein Projekt extrahieren, vor allem die Übergabe der Parameter.

    Hier mal ein Script (inkl. Demo) von @Yashied, dass ich an einigen Stellen korrigiert habe und mit dem die benötigte Breite und Höhe von Texten (auch mehrzeilige und auch mit Tabs) in Pixeln ermitteln werden kann.

    AutoIt: _GetTabbedStringSizeEx.au3
    ;-- TIME_STAMP   2018-07-05 11:07:22   v 1.1
    
    #Region ;************ Includes ************
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    ;~ By Yashied, May 29, 2012 in AutoIt Example Scripts
    ;~ PRESS Ctrl+Shift+O --> https://www.autoitscript.com/forum/topic/140975-gettabbedstringsizeex/
    ;~ Modified by Bitnugger
    
    Opt('MouseCoordMode', 2)
    
    Global $aFont = [6.0, 6.8, 7.5, 8.3, 9.0, 9.8, 10.5, 11.3, 12.0, 12.8, 13.5, 14.3, 15.0, 15.8]
    
    Global $sText = '#1' & @TAB & '0B7' & @TAB & '#2' & @TAB & '01F' & @TAB & '#3' & @TAB & '2FF' & @TAB & '#4' & @TAB & '077' & @CRLF & _
            'COMPRESS_COPY' & @TAB & '+' & @TAB & 'PREFIX_PLATFORM' & @TAB & '+' & @TAB & 'TEST' & @TAB & '+' & @TAB & 'WIN7_PROGRESSBAR' & @TAB & '+' & @CRLF & _
            'COMPRESS_BCJ' & @TAB & '+' & @TAB & 'PREFIX_WAITALL' & @TAB & '+' & @TAB & 'LANG' & @TAB & '+' & @TAB & 'RTF_CONTROL' & @TAB & '+' & @CRLF & _
            'COMPRESS_BCJ2' & @TAB & '+' & @TAB & 'PREFIX_HIDCON' & @TAB & '+' & @TAB & 'ELEVATION' & @TAB & '+' & @TAB & 'IMAGES' & @TAB & '+' & @CRLF & _
            'COMPRESS_DEFLATE' & @TAB & '-' & @TAB & 'PREFIX_NOWAIT' & @TAB & '+' & @TAB & 'CHECK_RAM' & @TAB & '+' & @CRLF & _
            'COMPRESS_LZMA' & @TAB & '+' & @TAB & 'PREFIX_FORCENOWAIT' & @TAB & '+' & @TAB & 'CHECK_FREE_SPACE' & @TAB & '+' & @CRLF & _
            'COMPRESS_LZMA2' & @TAB & '+' & @TAB & '' & @TAB & '' & @TAB & 'BEGINPROMPTTIMEOUT' & @TAB & '+' & @CRLF & _
            'COMPRESS_PPMD' & @TAB & '-' & @TAB & '' & @TAB & '' & @TAB & 'CONFIG_PLATFORM' & @TAB & '+' & @CRLF & _
            'CRYPTO' & @TAB & '+' & @TAB & '' & @TAB & '' & @TAB & 'EARLY_PASSWORD' & @TAB & '+' & @CRLF & _
            'VOLUMES' & @TAB & '-' & @TAB & '' & @TAB & '' & @TAB & 'VOLUME_NAME_STYLE' & @TAB & '-' & @CRLF & _
            'PROTECT' & @TAB & '-' & @TAB & '' & @TAB & '' & @TAB & 'ENVIRONMENT_VARS' & @TAB & '+'
    
    Global $aNoAlignText = [ _
            'A not very long string string' & @TAB & 'with' & @TAB & 'tab' & @TAB & 'characters' & @CRLF & 'in' & @TAB & 'two lines!', _
            'A not very long string WITHOUT tab characters' & @CRLF & 'in two lines!', _
            'A NOT VERY LONG STRING STRING WITHOUT TAB CHARACTERS IN ONE LINE!']
    
    ; Align text
    For $i = 0 To UBound($aFont) - 1
        _Form($sText, 'Segoe UI', $aFont[$i])
    Next
    
    ; No align text
    For $i = 0 To UBound($aNoAlignText) - 1
        $sText = $aNoAlignText[$i]
        For $j = 0 To UBound($aFont) - 1
            _Form($sText, 'Segoe UI', $aFont[$j], False)
        Next
    Next
    
    Func _Form($sText, $sFontName, $nFontSize, $bAlignment = True)
        Local $hForm, $idButton_OK, $aPos, $aSize
    
        $hForm = GUICreate(StringFormat('%s - %.1f', $sFontName, $nFontSize), 0, 0)
        GUISetFont(9.0, 400, 0, 'Segoe UI')
        GUISetBkColor(0x008B8B)
        GUICtrlCreateLabel('', 10, 10)
        GUICtrlSetFont(-1, $nFontSize, 400, 0, $sFontName)
        GUICtrlSetColor(-1, 0x5CE8DF)
        GUICtrlSetBkColor(-1, 0x668B8B)
    
        $aSize = _GetTabbedStringSizeEx(-1, $sText, $bAlignment)
        If Not @error Then
            GUICtrlSetPos(-1, -1, -1, $aSize[0], $aSize[1])
            GUICtrlSetData(-1, $sText)
        EndIf
        $aPos = WinGetPos($hForm)
        WinMove($hForm, '', (@DesktopWidth - ($aPos[2] + $aSize[0] + 20)) / 2, (@DesktopHeight - ($aPos[3] + $aSize[1] + 70)) / 2, $aPos[2] + $aSize[0] + 20, $aPos[3] + $aSize[1] + 70)
        GUICtrlCreateGraphic(0, 0, $aSize[0] + 20, $aSize[1] + 20)
        GUICtrlSetBkColor(-1, 0x00ABAB)
        GUICtrlSetState(-1, $GUI_DISABLE)
        GUICtrlCreateGraphic(0, $aSize[1] + 20, $aSize[0] + 20, 1)
        GUICtrlSetBkColor(-1, 0x00DBDB)
        GUICtrlSetState(-1, $GUI_DISABLE)
        $idButton_OK = GUICtrlCreateButton('OK', ($aSize[0] + 20) / 2 - 37, $aSize[1] + 32, 88, 27)
        GUICtrlSetState(-1, BitOR($GUI_DEFBUTTON, $GUI_FOCUS))
        GUISetState()
    
        MouseMove(($aSize[0] + 20) / 2 + 7, $aSize[1] + 46, 0)
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $idButton_OK
                    ExitLoop
            EndSwitch
        WEnd
    
        GUIDelete($hForm)
    EndFunc   ;==>_Form
    
    Func _GetTabbedStringSizeEx($idCtrl, ByRef $sString, $bAlignment = True)
        Local $iW = 0, $iH, $tTM, $pTM, $hDC = 0, $hSv = 0, $aTemp, $aSize, $aData, $aTabs, $aText, $sText = '', $iError, $iTabStops, $vRet
    
        #cs
            Global Const $tagTEXTMETRIC = "long tmHeight;long tmAscent;long tmDescent;long tmInternalLeading;long tmExternalLeading;" & _
            "long tmAveCharWidth;long tmMaxCharWidth;long tmWeight;long tmOverhang;long tmDigitizedAspectX;long tmDigitizedAspectY;" & _
            "wchar tmFirstChar;wchar tmLastChar;wchar tmDefaultChar;wchar tmBreakChar;byte tmItalic;byte tmUnderlined;byte tmStruckOut;" & _
            "byte tmPitchAndFamily;byte tmCharSet"
        #ce
    
    ;~  Local $tTM = DllStructCreate($tagTEXTMETRIC)
        Local $tTM = DllStructCreate('long;long;long;long;long;long;long;long;long;long;long;wchar;wchar;wchar;wchar;byte;byte;byte;byte;byte')
        Local $pTM = DllStructGetPtr($tTM)
        Local $tData = DllStructCreate('long;long')
        Local $pData = DllStructGetPtr($tData)
        Local $aResult[2] = [0, 0]
    
        If Not IsHWnd($idCtrl) Then $idCtrl = GUICtrlGetHandle($idCtrl)
        If Not $idCtrl Then Return SetError(1, 0, 0)
    
        Do
            $iError = 1
            $vRet = DllCall('user32.dll', 'ptr', 'GetDC', 'hwnd', $idCtrl)
            If (@error) Or (Not $vRet[0]) Then ExitLoop
            $hDC = $vRet[0]
            $vRet = DllCall('user32.dll', 'ptr', 'SendMessageW', 'hwnd', $idCtrl, 'uint', 0x0031, 'wparam', 0, 'lparam', 0)
            If (@error) Or (Not $vRet[0]) Then ExitLoop
            $vRet = DllCall('gdi32.dll', 'ptr', 'SelectObject', 'hwnd', $hDC, 'ptr', $vRet[0])
            If (@error) Or (Not $vRet[0]) Then ExitLoop
            $hSv = $vRet[0]
            $vRet = DllCall('gdi32.dll', 'int', 'GetTextMetricsW', 'hwnd', $hDC, 'ptr', $pTM)
            If (@error) Or (Not $vRet[0]) Then
                ExitLoop
            EndIf
            $iTabStops = 8 * DllStructGetData($tTM, 6) ; tmAveCharWidth
            If Not $iTabStops Then ExitLoop
            $aData = StringRegExp($sString, '(?m).+[^\R]', 3)
            If @error Then Return SetError(2, 0, 0)
    
            $iH = UBound($aData)
            If ($iH > 0) And ($bAlignment) Then
                For $i = 0 To $iH - 1
                    $aTemp = StringSplit($aData[$i], @TAB)
                    If $iW < $aTemp[0] Then $iW = $aTemp[0]
                Next
                Dim $aText[$iH][$iW]
                Dim $aSize[$iH][$iW]
                For $i = 0 To $iH - 1
                    $aTemp = StringSplit($aData[$i], @TAB)
                    For $j = 0 To $iW - 1
                        Select
                            Case $aTemp[0] < $j + 1
                                $aText[$i][$j] = 0
                                $aSize[$i][$j] = -1
                            Case $aTemp[0] = $j + 1
                                $aText[$i][$j] = $aTemp[$j + 1]
                                $aSize[$i][$j] = -1
                            Case Else
                                $aText[$i][$j] = $aTemp[$j + 1]
                                $vRet = DllCall('gdi32.dll', 'int', 'GetTextExtentPoint32W', 'hwnd', $hDC, 'wstr', $aTemp[$j + 1], 'int', StringLen($aTemp[$j + 1]), 'ptr', $pData)
                                If (Not @error) And ($vRet[0]) Then
                                    $aSize[$i][$j] = DllStructGetData($tData, 1)
                                Else
                                    $aSize[$i][$j] = 0
                                EndIf
                        EndSelect
                    Next
                Next
                Dim $aTabs[$iW]
                For $j = 0 To $iW - 1
                    $aTabs[$j] = 1
                    For $i = 0 To $iH - 1
                        If $aSize[$i][$j] <> -1 Then
                            If $aSize[$i][$j] < $iTabStops Then
                                $aSize[$i][$j] = 1
                            Else
                                $aSize[$i][$j] = Floor($aSize[$i][$j] / $iTabStops) + 1
                                If $aTabs[$j] < $aSize[$i][$j] Then $aTabs[$j] = $aSize[$i][$j]
                            EndIf
                        EndIf
                    Next
                Next
                Dim $aData[$iH]
                For $i = 0 To $iH - 1
                    $aData[$i] = ''
                    For $j = 0 To $iW - 1
                        If IsString($aText[$i][$j]) Then
                            $aData[$i] &= $aText[$i][$j]
                            If $aSize[$i][$j] <> -1 Then $aSize[$i][$j] = $aTabs[$j] - $aSize[$i][$j]
                            For $k = 1 To $aSize[$i][$j] + 1
                                $aData[$i] &= @TAB
                            Next
                        Else
                            ExitLoop
                        EndIf
                    Next
                    $sText &= $aData[$i] & @CRLF
                Next
            EndIf
    
            $iError = 1
            DllStructSetData($tData, 1, $iTabStops)
            For $i = 0 To $iH - 1
                $vRet = DllCall('user32.dll', 'dword', 'GetTabbedTextExtentW', 'hwnd', $hDC, 'wstr', $aData[$i], 'int', StringLen($aData[$i]), 'int', 1, 'ptr', $pData)
                If (Not @error) And ($vRet[0]) Then
                    $aResult[1] += BitShift($vRet[0], 16)
                    $vRet = BitAND($vRet[0], 0xFFFF)
                    If $aResult[0] < $vRet Then $aResult[0] = $vRet
                Else
                    ExitLoop 2
                EndIf
            Next
            $iError = 0
        Until 1
        If $hSv Then DllCall('gdi32.dll', 'ptr', 'SelectObject', 'hwnd', $hDC, 'ptr', $hSv)
        If $hDC Then DllCall('user32.dll', 'int', 'ReleaseDC', 'hwnd', $idCtrl, 'hwnd', $hDC)
        If $iError Then Return SetError(1, 0, 0)
        If $bAlignment Then $sString = StringTrimRight($sText, 2)
    
        Return $aResult
    EndFunc   ;==>_GetTabbedStringSizeEx
    Alles anzeigen
  • Skalierende Message Box

    • Bitnugger
    • 2. Juli 2018 um 22:52
    Zitat von autoiter

    Benutzt du SciTE als Entwicklungsumgebung?

    Solange ein User nichts anderes sagt, gehen wir einfach davon aus... und du meintest wohl treffender SciTE4AutoIt3. ;)

  • Skalierende Message Box

    • Bitnugger
    • 2. Juli 2018 um 22:50
    Zitat von xTcisloVe

    switch $msgcase $hGUIButton1, $hGUIButton2, $hGUIButton3, $hGUIButton4, $hGUIButton5, $GUI_EVENT_CLOSE
    Return 1, 2, 3, 4, 5, 6
    EndSwitch

    Damit bist du schon mal knapp auf halbem Wege richtig...

    Wichtig ist es, zu wissen, dass die Controls (Button, Label, ...) bei der Erstellung immer mit einer aufsteigenden ID durchnummeriert werden. Um ein Return in ähnlicher Art zu realisieren, wie du es im Sinn hattest, kannst du die IDs in einem Array speichern und dann einfach mit Return $aArray[$iIndex] die Funktion verlassen.

    Hier mal eine kleine Hilfe für den Start...

    AutoIt
    ; So wäre es von der Syntax her richtig...
    Switch $msgcase
        Case $hGUIButton1, $hGUIButton2, $hGUIButton3, $hGUIButton4, $hGUIButton5, $GUI_EVENT_CLOSE
        Return 1
    EndSwitch
    ;~ Aber das würde ja nicht wie gewollt funktionieren...
    
    ;~ So ginge es wie gewünscht... wäre aber uncool...
    Switch $msgcase
            Case $GUI_EVENT_CLOSE
                Return 0 ; oder Exit
            Case $hGUIButton1
                Return 1
            Case $hGUIButton2
                Return 2
            Case $hGUIButton3
                Return 3
            Case $hGUIButton4
                Return 4
            Case $hGUIButton5
                Return 5
    EndSwitch
    
    ;~ Etwas eleganter geht es so...
    
    #include <Array.au3> ; Brauchen wir für die Funktion _ArraySearch... ginge aber auch mit einer For..To..Next-Schleife 
    
    Local $iIndex, $aArray = [[$hGUIButton1, 1], [$hGUIButton2, 2], [$hGUIButton3, 3], [$hGUIButton4, 4], [$hGUIButton5, 5]]
    Switch $msgcase
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hGUIButton1, $hGUIButton2, $hGUIButton3, $hGUIButton4, $hGUIButton5
            $iIndex = _ArraySearch($aArray, $msgcase) ; $aArray[$iIndex][0] = ID des Controls
            Return $aArray[$iIndex][1] ; Gewünschter Rückgabewert
    EndSwitch
    
    ;~ Wenn die Controls alle in direkter Folge erstellt wurden, was bei $hGUIButton1 bis $hGUIButton5 anzunehmen ist, geht es so viel kürzer.
    
    Switch $msgcase
        Case $GUI_EVENT_CLOSE
            Exit
        Case $msgcase, $hGUIButton1 $hGUIButton2, $hGUIButton3, $hGUIButton4, $hGUIButton5
            Return $msgcase - $hGUIButton1 + 1 ; Gewünschter Rückgabewert
    EndSwitch
    Alles anzeigen
  • Progressbar

    • Bitnugger
    • 2. Juli 2018 um 21:01

    Guck dir mal diese Scripts an, ob da was Schönes für dich bei ist: _GDIPlus Animated Wait Loading Screens (coded by @UEZ)

    Wenn du keine Prozente ermitteln kannst, dann wären die hier sicher erste Wahl:

    _GDIPlus_AnotherText.au3

    _GDIPlus_GearsAnim.au3

    _GDIPlus_GlowingText.au3

    _GDIPlus_HypnoticLoader.au3

    _GDIPlus_LEDAnim.au3

    _GDIPlus_LoadingSpinner.au3

    _GDIPlus_LoadingTextAnim.au3

    _GDIPlus_MultiColorLoader.au3

    _GDIPlus_RingProgressbar.au3

    _GDIPlus_RotatingBokeh Example 2.au3

    _GDIPlus_SimpleLoadingAnim.au3

    _GDIPlus_SpinningAndGlowing.au3

    In dem Archiv im Anhang habe ich bei _GDIPlus_RotatingBokeh Example 2.au3 zwei Includes für @AutoItVersion > 3.3.14.2 hinzufügen müssen, ansonsten sind sie identisch mit denen, die ich oben verlinkt habe.

    Zitat von claushendrik

    Die ausführende Datei ist eine konvertierte Batch to EXE!

    Hast du die Batch-Datei denn noch? Denn dann könnte man das auch mit AutoIt machen und hätte so höchstwahrscheinlich die Möglichkeit, an die benötigten Prozentwerte zu kommen.

    Dateien

    _GDIPlus Animated Wait Loading Screens.rar 102,09 kB – 9 Downloads

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™