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

  • Zeile löschen mit _FileWriteToLine funktioniert nicht mehr

    • Bitnugger
    • 3. Dezember 2018 um 22:37
    Zitat von water

    Es gibt unterschiedliche Sichtweisen, ob eine Funktion, die Daten in eine Datei schreibt, auch Daten löschen soll.

    Überschreiben ist auch schreiben... der vierte Parameter dieser Funktion ($bOverWrite) ist ja wohl genau dafür gedacht... und der Inhalt der angegebenen Zeile wird ja auch gelöscht... aber das @CRLF bleibt stehen, und das ist falsch, denke ich.

    Edit: Hier der Grund...

    Code
    In dieser Zeile (in der Funktion _FileWriteToLine) wird "" in das Array eingefügt, wenn $bOverWrite = True und $sText = "" ist...
    $aArray[$iLine - 1] = ($bOverWrite ? $sText : $sText & @CRLF & $aArray[$iLine - 1])
    ;                                    ^^^^^^
    
    ; ...aber hier wird dann an allen Zeilen ein @CRLF angehangen... und das ist falsch... die gelöschte Zeile dürfte in diesem Fall gar nicht mehr im Array sein.
    
    For $i = 0 To $iUBound
        $sData &= $aArray[$i] & @CRLF
    ;                           ^^^^^
    Next
  • [Anfrage] Möchte Stoppuhr mit USB Button und Eingabeformular programmieren

    • Bitnugger
    • 3. Dezember 2018 um 20:00
    Zitat von Oscar

    Ich habe das jetzt nicht komplett verfolgt, aber hattet ihr nicht Stringformat für die Ausgabe benutzt?

    Ja, das ist schon richtig, aber wenn ich die Stunden, Minuten und Sekunden ganzzahlig speichere, warum sollte ich es bei den Millisekunden dann anders haben wollen?

  • [Anfrage] Möchte Stoppuhr mit USB Button und Eingabeformular programmieren

    • Bitnugger
    • 3. Dezember 2018 um 19:30

    @Musashi

    Arrrg... ok, habe mich soeben klug gemacht!

    Die Stellen bei $g_iTicks hinter dem Punkt sind Mikrosekunden - was wir brauchen, sind aber die Millisekunden... und ja, die stehen vor dem Punkt. Tja, irren ist menschlich!

    Dann kann man das natürlich besser so machen...

    $g_iMilliSecs = Int(Mod($g_iTicks, 1000)) ; 29 Sekunden für 1000000 Durchläufe

    Oscar

    Int() ist nötig, weil wir ja keine Zahl mit Nachkommastellen wollen.

    Zitat von autoiter

    Return StringLeft($sTest, StringInStr($sTest, ".") + $iNachkommastellen)

    Die Nachkommastellen sollten in der Funktion _GetTime() nicht direkt in $g_iMilliSecs gespeichert werden, da sie evtl. noch für andere Berechnungen gebraucht werden könnten.

    Um sie 3-stellig im Label darzustellen, würde ich es wie gehabt vorziehen:

    GUICtrlSetData($idLabelMilli, StringFormat('%03i', StringLeft($g_iMilliSecs, 3)))

  • [Anfrage] Möchte Stoppuhr mit USB Button und Eingabeformular programmieren

    • Bitnugger
    • 3. Dezember 2018 um 18:53
    Zitat von Musashi

    Ersetzt im Originalskript von Bitnugger diese Zeile mal durch :

    $g_iMilliSecs = StringRight(Int($g_iTicks),3)

    Hihi... echt jetzt?

    Das funktioniert so aber mal gar nicht... denn mit Int() bekommst du ja nur die Ziffern vor dem Punkt... gebraucht werden aber die hinter dem Punkt?!

    $g_iTicks = 0.009

    $g_iTicks = 221.8233

    $g_iTicks = 805.0881

    $g_iTicks = 1029.0668

    $g_iTicks = 1077.171

    $g_iTicks = 1130.1266

    ...

    Das Problem dabei ist, dass die Stellen vor dem Punkt variieren... wenn nicht mit StringRegExpReplace(), dann fallen mir nur zwei Lösungen ein, wie man das gescheit lösen könnte... doch einen Gewinn bringen die nicht!

    Code
    Benötigte Zeit, um die Funktion _GetTime() 1000000 mal aufzurufen:
    
    $g_iMilliSecs = StringRegExpReplace($g_iTicks, '.+\.(.+)', '\1')           ; 33 Sekunden - so wie es aktuell im Script verwendet wird!
    $g_iMilliSecs = StringMid($g_iTicks, StringInStr($g_iTicks, '.') +1, 3)    ; 36 Sekunden
    $g_iMilliSecs = StringMid($g_iTicks, StringInStr($g_iTicks, '.') +1)       ; 35 Sekunden
    $g_iMilliSecs = StringTrimLeft($g_iTicks, StringInStr($g_iTicks, '.'))     ; 34 Sekunden
    Zitat von Tuxedo

    Ich denke doch Bitnugger hat damit auch kein Problem, hoffe ich zumindest.

    Warum sollte ich? Bin ja schließlich nicht aus Watte... 8)

  • [Anfrage] Möchte Stoppuhr mit USB Button und Eingabeformular programmieren

    • Bitnugger
    • 3. Dezember 2018 um 09:51
    Zitat von Tuxedo

    Ohne TicksToTime Funktion ist das Ergebnis auf jeden Fall besser.

    Hilf mir mal bitte auf die Sprünge... denn ich stehe gerade auf dem Schlauch!

    _TicksToTime wird doch auf jeden Fall benötigt, um die Ticks in Stunden, Minuten, Sekunden und Millisekunden umzurechnen... wobei die Millisekunden optional sind.

    Was also soll an einem Ergebnis ohne _TicksToTime besser sein, wenn dann keine Stunden, Minuten, Sekunden und Millisekunden mehr berechnet werden, um sie anzuzeigen?

    Zitat von Tuxedo

    Ebenso die Vermutung von Bitnugger , daß es vom Aktualisierungsinterval (das 44ms Sleep) stammt hat sich bei mir nicht bestätigt.

    Das ist keine Vermutung, sondern einfache Mathematik...

    • Wenn ich nur alle 44 ms aktualisiere, kann ich nicht gleichzeitig eine "Anzeige der Millisekunden in Echtzeit" erwarten!
    • Wenn ich alle 1 ms aktualisiere, ist die Anzeige der Millisekunden nicht mehr lesbar, weil das menschliche Auge (und womöglich auch der Monitor) zu träge dafür ist.

    Ich hatte doch geschrieben, dass die Funktion _GetTime(), die ohne _TicksToTime keinen Sinn macht, pro Durchlauf ca. 0.505 ms benötigt... daran kann es also keinesfalls liegen, wenn irgendwas mit der Anzeige nicht stimmt!

  • Windows Display driver/manager??

    • Bitnugger
    • 2. Dezember 2018 um 21:56
    Zitat von Musashi

    Ich wollte mit meinem Beitrag #18 nur darauf hinweisen, nichts beanstanden ;) .

    Selbstverständlich...

    Ich habe dies aber nun als Anlass genommen und das Script in Post #14 so umgeschrieben, dass es jetzt auch auf Windows XP und älteren AutoIt-Versionen (>= 3.3.14.0) laufen sollte.

    Als Wert für $g_iNumberOfEnabledCore wird dann einfach -1 übergeben...

    $aWMI[3] = @OSVersion = 'WIN_10' ? $objItem.NumberOfEnabledCore : -1

    und anstelle...

    #include <WinAPIProc.au3> ; Windows 10

    nun mit...

    #include <WinAPI.au3> ; Windows XP to Windows 8.1

    ...und alle sind zufrieden. :saint:

  • Windows Display driver/manager??

    • Bitnugger
    • 2. Dezember 2018 um 20:17

    $g_iNumberOfCores, $g_iNumberOfEnabledCore und $g_iNumberOfProcessors habe ich nur drin gelassen, falls diese Werte später mal benötigt werden. Aktuell wird nur $g_iNumberOfLogicalProcessors verwendet.

  • [Anfrage] Möchte Stoppuhr mit USB Button und Eingabeformular programmieren

    • Bitnugger
    • 2. Dezember 2018 um 19:38

    Weil 1000 Millisekunden einer Sekunde entsprechen, sollte die Anzeige der Millisekunden von 000 bis 999 gehen, denn bei 1000 ist ja schon die nächste Sekunde erreicht.

    Bei mir dauert es etwa 33 Sekunden, um die Funktion _GetTime() 1000000 mal aufzurufen - das sind pro Durchlauf ca. 0.505 ms

    Code
    #Include <Date.au3>
    
    Global $g_hTimer = TimerInit(), $g_sTime, $g_iHours, $g_iMins, $g_iSecs, $g_iMiliSecs, $g_dTicks
    
    Global $g_sStartTime = _NowCalc()
    For $i = 1 To 1000000 Step 1
        _GetTime()
    Next
    Global $g_sEndTime = _NowCalc(), $g_iDiffSecs = _DateDiff('s', $g_sStartTime, $g_sEndTime)
    
    ConsoleWrite('> Bei mir dauert es etwa ' & $g_iDiffSecs & ' Sekunden, um die Funktion _GetTime() 1000000 mal aufzurufen - das sind pro Durchlauf ca. ' & StringFormat('%.3f', 1000000 / ($g_iDiffSecs * 60 * 1000)) & ' ms' & @CRLF)
    Alles anzeigen

    Das merkwürdige Verhalten der Millisekunden in der Zeitanzeige ist bedingt durch den Aktualisierungsinterval. Wenn dieser größer als 1 ms ist, werden einige Werte dadurch einfach übersprungen.

    Setzt man den Aktualisierungsinterval auf <= 1 ms, wäre die Zeitanzeige für die Millisekunden zwar immer korrekt, aber nicht mehr lesbar und würde dann keinen Sinn mehr machen.

    Es gibt also zwei Möglichkeiten: Entweder findet sich einen zufriedenstellenden Wert für den Aktualisierungsinterval (Lesbarkeit/Flackern), oder man lässt die Millisekunden komplett weg, wie es Tuxedo es bereits vorgeschlagen hat.

  • Windows Display driver/manager??

    • Bitnugger
    • 1. Dezember 2018 um 22:54
    Zitat von Ovik

    Irgendwas ist mit der Mask nicht gut?

    In der Tat... war gestern wohl doch schon zu müde. ;)

    In der AutoIt-Hilfe zu _WinAPI_SetProcessAffinityMask steht bei Remarks:

    An affinity mask is a bit mask in which each bit represents a processor on which the threads of the process

    are allowed to run. For example, if you pass a mask of 0x05, processors 1 and 3 are allowed to run.

    In deiner Funktion solltest du das Handle von _WinAPI_OpenProcess aber auch wieder entsorgen und überprüfen, ob $g_useCore im Limit ist!

    Übrigens... mit $g_useCore gibst du nicht die zu verwendenden "Cores" an, sondern die "Logical Processors".

    Hier habe ich noch mal was gebastelt... schau es dir an!

    C
    ;-- TIME_STAMP   2018-12-01 22:47:02   v 0.1
    
    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
    
    #Region ;************ Includes ************
    #include <ProcessConstants.au3>
    #include <Array.au3>
    #include <WinAPI.au3>           ; Windows XP to Windows 8.1
    ;~ #include <WinAPIProc.au3>    ; Windows 10
    #EndRegion ;************ Includes ************
    
    ConsoleWrite('> @AutoItPID = ' & @AutoItPID & @CRLF & @CRLF)
    
    Global Const $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20
    
    ;~ ConsoleWrite('CurrentThread = ' & _WinAPI_GetCurrentThread() & @CRLF)
    
    Global Const $iLogicalProcessor01 = 2 ^ 0, $iLogicalProcessor02 = 2 ^ 1, $iLogicalProcessor03 = 2 ^ 2, $iLogicalProcessor04 = 2 ^ 3, $iLogicalProcessor05 = 2 ^ 4, $iLogicalProcessor06 = 2 ^ 5, $iLogicalProcessor07 = 2 ^ 6, $iLogicalProcessor08 = 2 ^ 7, $iLogicalProcessor09 = 2 ^ 8, $iLogicalProcessor10 = 2 ^ 9, $iLogicalProcessor11 = 2 ^ 10, $iLogicalProcessor12 = 2 ^ 11, $iLogicalProcessor13 = 2 ^ 12, $iLogicalProcessor14 = 2 ^ 13, $iLogicalProcessor15 = 2 ^ 14, $iLogicalProcessor16 = 2 ^ 15, $iLogicalProcessor17 = 2 ^ 16, $iLogicalProcessor18 = 2 ^ 17
    
    Global $g_aDefaultAffinityMasks, $g_iNumberOfCores, $g_iNumberOfEnabledCore, $g_iNumberOfProcessors, $g_iNumberOfLogicalProcessors ; EnvGet('NUMBER_OF_PROCESSORS')
    
    _Example()
    
    Func _Example()
        Local $aProcessors = _GetProcessors()
        $g_iNumberOfProcessors        = $aProcessors[0]
        $g_iNumberOfLogicalProcessors = $aProcessors[1]
        $g_iNumberOfCores             = $aProcessors[2]
        $g_iNumberOfEnabledCore       = $aProcessors[3]
        ConsoleWrite('> $g_iNumberOfProcessors        = ' & $g_iNumberOfProcessors & @CRLF)
        ConsoleWrite('> $g_iNumberOfLogicalProcessors = ' & $g_iNumberOfLogicalProcessors & @CRLF)
        ConsoleWrite('> $g_iNumberOfCores             = ' & $g_iNumberOfCores & @CRLF)
        ConsoleWrite('> $g_iNumberOfEnabledCore       = ' & $g_iNumberOfEnabledCore & @CRLF & @CRLF)
    
        $g_aDefaultAffinityMasks = _GetProcessAffinityMasks(@AutoItPID)
    
        _SetProcessAffinityMask(@AutoItPID, $iLogicalProcessor02)
        _SetProcessAffinityMask(@AutoItPID, $iLogicalProcessor03)
        _SetProcessAffinityMask(@AutoItPID, BitOR($iLogicalProcessor02, $iLogicalProcessor03))
        _SetProcessAffinityMask(@AutoItPID, BitOR($iLogicalProcessor04, $iLogicalProcessor05))
        _SetProcessAffinityMask(@AutoItPID, BitOR($iLogicalProcessor06, $iLogicalProcessor07, $iLogicalProcessor08))
        _SetProcessAffinityMask(@AutoItPID, BitOR($iLogicalProcessor11, $iLogicalProcessor12, $iLogicalProcessor13))
    
        ; Restore ProcessAffinityMask to default
        If $g_aDefaultAffinityMasks[0] Then _SetProcessAffinityMask(@AutoItPID, $g_aDefaultAffinityMasks[1])
    EndFunc
    
    Func _GetProcessAffinityMasks($iPID)
        Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPID, True) ; Returns a handle of an existing process object
        Local $aAffinityMask = _WinAPI_GetProcessAffinityMask($hProcess)
        ConsoleWrite('- Default AffinityMask' & @CRLF)
        _PrintProcessInfo($hProcess)
        _WinAPI_CloseHandle($hProcess) ; Closes an open object handle
        Return $aAffinityMask
    EndFunc   ;==>_GetProcessAffinityMasks
    
    Func _SetProcessAffinityMask($iPID, $iMask)
        If $iMask < 1 Or $iMask > 2 ^ $g_iNumberOfLogicalProcessors - 1 Then
            ConsoleWrite('! $iMask (' & $iMask & ') ist zu ' & ($iMask < 1 ? 'klein' : 'gross') & '! (1 to ' & 2 ^ $g_iNumberOfLogicalProcessors - 1 & ' for ' & $g_iNumberOfLogicalProcessors & ' Logical Processors)' & @CRLF & @CRLF)
            Return False
        EndIf
    
        Local $hProcess, $iSetMask = 0
        $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPID, True) ; Returns a handle of an existing process object
        If IsPtr($hProcess) Then
            $iSetMask = _WinAPI_SetProcessAffinityMask($hProcess, $iMask) ; Sets a processor affinity mask for the threads of a specified process
            ConsoleWrite('- New AffinityMask ($iMask = ' & $iMask & ')' & @CRLF)
            _PrintProcessInfo($hProcess)
            _WinAPI_CloseHandle($hProcess) ; Closes an open object handle
        EndIf
        Return $iSetMask
    EndFunc   ;==>_SetProcessAffinityMask
    
    Func _PrintProcessInfo($hProcess)
        Local $aAffinityMask = _WinAPI_GetProcessAffinityMask($hProcess) ; Obtains the affinity masks for the process and the system
        If UBound($aAffinityMask) Then
            ConsoleWrite('+ Used ProcessorNumber = ' & DllCall('Kernel32.dll', 'dword', 'GetCurrentProcessorNumber')[0] & ' (ProcessorNumber 0 = $iLogicalProcessor01)' & @CRLF)
            ConsoleWrite('> $aAffinityMask[0]    = ' & $aAffinityMask[0] & @TAB & 'True on success, otherwise False' & @CRLF)
            ConsoleWrite('> $aAffinityMask[1]    = ' & $aAffinityMask[1] & @TAB & 'Process affinity mask' & @CRLF)
            ConsoleWrite('> $aAffinityMask[2]    = ' & $aAffinityMask[2] & @TAB & 'System affinity mask' & @CRLF & @CRLF)
        EndIf
    EndFunc   ;==>_PrintProcessInfo
    
    Func _GetProcessors()
        Local $aWMI[4], $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\"), $oColItems, $aClasses = ['Win32_ComputerSystem', 'Win32_Processor']
    
        For $i = 0 To UBound($aClasses) -1 Step 1
            $oColItems = $objWMIService.ExecQuery("SELECT * FROM " & $aClasses[$i], "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
            If IsObj($oColItems) then
                For $objItem In $oColItems
                    Switch $aClasses[$i]
                        Case 'Win32_ComputerSystem'
                                $aWMI[0] = $objItem.NumberOfProcessors
                        Case 'Win32_Processor'
                                $aWMI[1] = $objItem.NumberOfLogicalProcessors
                                $aWMI[2] = $objItem.NumberOfCores
                                $aWMI[3] = @OSVersion = 'WIN_10' ? $objItem.NumberOfEnabledCore : -1
                    EndSwitch
                Next
            Else
                Msgbox(16, "_GetProcessors", "No WMI Objects found for Class: " & $aClasses[$i])
            Endif
        Next
        Return $aWMI
    EndFunc   ;==>_GetProcessors
    Alles anzeigen
  • Windows Display driver/manager??

    • Bitnugger
    • 1. Dezember 2018 um 02:53

    Schau mal hier, ob dir das hilft...

    C
    ;-- TIME_STAMP   2018-12-01 02:51:37   v 0.1
    
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>
    
    Global Const $iCore01 = 2^0, $iCore02 = 2^1, $iCore03 = 2^2, $iCore04 = 2^3, $iCore05 = 2^4, $iCore06 = 2^5, $iCore07 = 2^6, $iCore08 = 2^7, $iCore09 = 2^8, $iCore10 = 2^9, $iCore11 = 2^10, $iCore12 = 2^11, $iCore13 = 2^12, $iCore14 = 2^13, $iCore15 = 2^14, $iCore16 = 2^15, $iCore17 = 2^16, $iCore18 = 2^17
    
    Global $g_iNumberProcessors = 4, $g_iNumberCores = 18
    
    Global $g_bAffinityMask = _UsedCoresToAffinityMask($g_iNumberCores, $iCore01), $g_iUsedCores = @extended ; Nur Core 1 benutzen
    ;~ Global $g_bAffinityMask = _UsedCoresToAffinityMask($g_iNumberCores, BitOR($iCore01, $iCore03)), $g_iUsedCores = @extended ; Core 1 und Core 3 benutzen
    ;~ Global $g_bAffinityMask = _UsedCoresToAffinityMask($g_iNumberCores, BitOR($iCore02, $iCore04, $iCore08)), $g_iUsedCores = @extended ; $iCore02, $iCore04 und $iCore08 benutzen
    ConsoleWrite('! $g_bAffinityMask = ' & $g_bAffinityMask & @CRLF)
    ConsoleWrite(StringFormat('! $g_iUsedCores    = %' & $g_iNumberCores & 'i\r\n', $g_iUsedCores))
    
    Global $g_hCurrentProcess = _WinAPI_GetCurrentProcess() ; Returns the process handle of the calling process
    
    ;~ Syntax: _WinAPI_GetProcessAffinityMask ( $hProcess ) ; Obtains the affinity masks for the process and the system
    Global $g_aAffinityMasks = _WinAPI_GetProcessAffinityMask($g_hCurrentProcess)
    ConsoleWrite('> $g_aAffinityMasks[0] = ' & $g_aAffinityMasks[0] & @TAB & 'True on success, otherwise False' & @CRLF)
    ConsoleWrite('> $g_aAffinityMasks[1] = ' & $g_aAffinityMasks[1] & @TAB & 'Process affinity mask' & @CRLF)
    ConsoleWrite('> $g_aAffinityMasks[2] = ' & $g_aAffinityMasks[2] & @TAB & 'System affinity mask' & @CRLF)
    
    ;~ Syntax: _WinAPI_SetProcessAffinityMask ( $hProcess, $iMask ) ; Sets a processor affinity mask for the threads of a specified process
    Global $g_bNewAffinityMask = _WinAPI_SetProcessAffinityMask($g_hCurrentProcess, $g_iUsedCores)
    ConsoleWrite('- $g_bNewAffinityMask  = ' & $g_bNewAffinityMask & @CRLF)
    
    Global $g_aNewAffinityMasks = _WinAPI_GetProcessAffinityMask($g_hCurrentProcess)
    ConsoleWrite('> $g_aNewAffinityMasks[0] = ' & $g_aNewAffinityMasks[0] & @TAB & 'True on success, otherwise False' & @CRLF)
    ConsoleWrite('> $g_aNewAffinityMasks[1] = ' & $g_aNewAffinityMasks[1] & @TAB & 'Process affinity mask' & @CRLF)
    ConsoleWrite('> $g_aNewAffinityMasks[2] = ' & $g_aNewAffinityMasks[2] & @TAB & 'System affinity mask' & @CRLF)
    
    ; Restore AffinityMask
    If $g_bNewAffinityMask Then _WinAPI_SetProcessAffinityMask($g_hCurrentProcess, $g_aAffinityMasks[1])
    
    Func _UsedCoresToAffinityMask($iNumberCores, $iUsedCores)
        Local $bAffinityMask
        For $i = $iNumberCores -1 To 0 Step -1
            $bAffinityMask &= BitAND($iUsedCores, 2^$i) ? '1' : '0'
        Next
        Return SetExtended(Int($bAffinityMask), $bAffinityMask)
    EndFunc
    Alles anzeigen
  • Windows Display driver/manager??

    • Bitnugger
    • 30. November 2018 um 23:48
    Zitat von Ovik

    Die funktion erwartet aber schon eine Affinity Mask (glaube ich), von der ich nicht weiss, wie ich die korrekt erstellen soll =O

    Steht doch da, wie es geht...

    ;; Inputs:

    ;; iProcessID - the PID of the process to change affinity

    ;; iProcessor - the integer value of the binary affinity bitmask (see below)

    Code
    ; Beispiele:
    
    ; ProcessSetAffinity($iProcessID, $iProcessor)
    
    ;  4 Processors, 3. CPU: ProcessSetAffinity($iProcessID, Int('0100'))                 ; --> 100
    ;                                                             4321
    
    ;  8 Processors, 6. CPU: ProcessSetAffinity($iProcessID, Int('00100000'))             ; --> 100000
    ;                                                             87654321
    
    ; 18 Processors, 9. CPU: ProcessSetAffinity($iProcessID, Int('000000000100000000'))   ; --> 100000000
    ;                                                                      987654321
    Alles anzeigen
  • INI Datei Benutzerabhängig verändern

    • Bitnugger
    • 29. November 2018 um 23:56
    Zitat von Manuel.P

    Die werte LinesAccept=1022 und LineControl=1022 müssen für jeden Benutzer verändert werden.

    Wenn nur diese beiden Werte angepasst werden müssen, dann mach es doch so...

    Code: Inifile.ini
    [Browser]
    SearchModeCustomer=1
    SearchModeStreet=1
    SearchModeCity=1
    ResultLimit=50
    
    [CallManager]
    AcceptOnDisconnect=0
    KeyCallAccept=107
    KeyCallHangUp=109
    
    [Peter]
    LinesAccept=1022
    LineControl=1022
    
    [Gabi]
    LinesAccept=1023
    LineControl=1023
    Alles anzeigen

    Und Lesen kannst du sie dann so...

    Code
    Local $iLinesAccept = IniRead("Inifile.ini", @UserName, "LinesAccept", "")
    Local $iLineControl = IniRead("Inifile.ini", @UserName, "LineControl", "")
    If $iLinesAccept = '' Then MsgBox(64, @ScriptName, 'Für ' & @UserName & ' gibt es noch keinen Eintrag in der Datei Inifile.ini!')
  • Forenupdate - November 2018 - Probleme / Anregungen / Feedback - Sammelthread

    • Bitnugger
    • 29. November 2018 um 15:43

    Du kannst auch mit einem Doppelklick auf das Symbol des Threadstarters ein Thema als gelesen markieren.

  • File to Base64 String Code Generator mit *.txt

    • Bitnugger
    • 26. November 2018 um 18:51
    Zitat von Musashi

    Bist Du sicher, dass es nicht 21 Dosen Bier und 6 Zigaretten waren ?

    Hihi... nein, ist schon richtig so, wie ich es geschrieben hatte... der Grund für meine heutige zu Null tendierende Problemlösungsfähigkeit scheint wohl zu sein, das ich vorige Nacht nur 3,5 Std. geschlafen habe... wirklich schlimm wäre es ja erst geworden, wenn ich um Hilfe hätte fragen müssen... 8o

  • File to Base64 String Code Generator mit *.txt

    • Bitnugger
    • 26. November 2018 um 18:21

    Heute habe ich eine 256,51 KB große Textdatei, CmdControlOrg.txt, (Codepage = UCS-2 LE BOM) mit dem "File to Base64 String Code Generator" gepackt und das Ergebnis in mein Script eingebaut.

    Um die Daten zu entpacken, rufe ich nun einfach mal die dafür nötige Funktion auf:

    Global $g_bCmdControlOrgTxt = _cmdControl_txt()

    Ops, dann habe ich die Daten ja als Binary in der Variable $g_bCmdControlOrgTxt... ich brauche sie aber als String, der in ein Array konvertieren werden soll.

    Dann habe ich mir gedacht, machst du das jetzt einfach so:

    Global $g_aCmdControlOrgTxt = StringRegExp(BinaryToString(_cmdControl_txt()), '(.+)\R', $STR_REGEXPARRAYGLOBALMATCH)

    ...und fertig ist das Kind.

    Doch... hehe... ne, so einfach sollte es dann doch nicht werden!

    Denn heraus kam dabei folgendes:

    Ok, was stimmt da nicht?

    Ja klar, ich muss die Codepage bei BinaryToString() angeben... in meinem Fall also eine 2. ==> $SB_UTF16LE (2) = binary data is UTF16 Little Endian

    Global $g_aCmdControlOrgTxt = StringRegExp(BinaryToString(_cmdControl_txt(), 2), '(.+)\R', $STR_REGEXPARRAYGLOBALMATCH)

    Jetzt wieder testen, ob alles easy ist:

    ConsoleWrite(' erste Zeile: ' & $g_aCmdControlOrgTxt[0] & @CRLF)

    ConsoleWrite('letzte Zeile: ' & $g_aCmdControlOrgTxt[UBound($g_aCmdControlOrgTxt) -1] & @CRLF)

    _ArrayDisplay($g_aCmdControlOrgTxt, '$g_aCmdControlOrgTxt')

    Was _ArrayDisplay() anzeigt, sieht ja schon mal recht gut aus...

    Row_1.png

    ...aber halt, das erste ConsoleWrite() ...wieso ist da ein ? vor dem Text?

    6 Dosen Bier und 21 Zigaretten waren nötig, um auf die Lösung zu kommen... und nun, da ich sie kenne, überlege ich, ob es nicht doch besser wäre, wenn ich mich einschläfern lasse. 8o

    Es war der BOM!!!

    Folgende Zeile brachte dann endgültig das gewünschte Ergebnis:

    Global $g_aCmdControlOrgTxt = StringRegExp(BinaryToString(BinaryMid(_cmdControl_txt(), 3), 2), '(.+)\R', $STR_REGEXPARRAYGLOBALMATCH)

    So kann man sich den Abend auch totschlagen...

  • Zeit berechnen

    • Bitnugger
    • 26. November 2018 um 14:54

    Anstelle von _NowTime(), dass dir nur die Zeit (HH:MM:SS) liefert, nimmst du einfach _NowCalc(), denn damit bekommst du das Datum und die Zeit (YYYY/MM/DD HH:MM:SS), die du für _DateDiff() brauchst.

    Code
    ;-- TIME_STAMP   2018-11-26 14:46:24   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Date.au3>
    #EndRegion ;************ Includes ************
    
    _Example()
    
    Func _Example()
        Local $sStartTime = _NowCalc()
        Sleep(Random(1000, 3000, 1))
        Local $sEndTime = _NowCalc()
        Local $iDiffSecs = _DateDiff('s', $sStartTime, $sEndTime)
        ConsoleWrite("$ $sStartTime --> " & $sStartTime & @CRLF)
        ConsoleWrite("$ $sEndTime   --> " & $sEndTime & @CRLF)
        ConsoleWrite("> $iDiffSecs  --> " & $iDiffSecs & ' Sekunde' & ($iDiffSecs > 1 ? 'n' : '') & @CRLF)
    EndFunc
    Alles anzeigen
  • Sehr schnell in GUI schreiben

    • Bitnugger
    • 26. November 2018 um 02:28

    Hier hast du was zum Spielen...

    C
    ;-- TIME_STAMP   2018-11-26 02:25:30   v 0.1
    
    #Region ;************ Includes ************
    #include <FontConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #EndRegion ;************ Includes ************
    
    ; Außerhalb von Funktionen gibt es nur Globale Variablen, auch wenn du sie mit Local deklarierst!
    
    Global $g_hTimer, $g_sTime, $g_iHours, $g_iMins, $g_iSecs, $g_iMilliSecs, $g_iTicks
    Global $g_iOldHours, $g_iOldMins, $g_iOldSecs, $g_iOldMilliSecs
    
    HotKeySet("{ESC}", _OnHotKey) ; Programm beenden
    HotKeySet("{F1}", _OnHotKey) ; Sleep-Timer um 1 veringern
    HotKeySet("{F2}", _OnHotKey) ; Sleep-Timer um 1 erhöhen
    HotKeySet("{F3}", _OnHotKey) ; Sleep-Timer um 10 veringern
    HotKeySet("{F4}", _OnHotKey) ; Sleep-Timer um 10 erhöhen
    HotKeySet("{F5}", _OnHotKey) ; Sleep-Timer kurz anzeigen
    HotKeySet("{Pause}", _OnHotKey) ; Pause
    
    Global $hGUI = GUICreate("Sleep-Timer", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP) ; GUI erstellen
    Global $g_iGuiBkColor = 0x000000, $g_iLabelColor = 0xCDCDCD, $g_iLabelBkColor = $g_iGuiBkColor
    GUISetBkColor($g_iGuiBkColor) ; GUI Background Color
    GUISetFont(200, $FW_NORMAL, $GUI_FONTNORMAL, "Calibri") ; GUI Schriftgröße und Art Einstellen
    
    Global $idLabel = GUICtrlCreateLabel("00", 0, 0)
    Global $aPosNum = ControlGetPos($hGUI, '', $idLabel) ; so viel Platz brauchen wir für "00"
    GUICtrlDelete($idLabel)
    $idLabel = GUICtrlCreateLabel(" : ", 0, 0)
    Global $aPosSpc = ControlGetPos($hGUI, '', $idLabel) ; so viel Platz brauchen wir für " : " bzw. " . "
    GUICtrlDelete($idLabel)
    
    Global $ixPos = (@DesktopWidth / 2) - (($aPosNum[2] * 4.5) + ($aPosSpc[2] * 3)) / 2 ; X-Position des ersten Labels
    Global $iyPos = (@DesktopHeight / 2) - ($aPosNum[3] / 2) ; Y-Position des ersten Labels
    Global $iwNum = $aPosNum[2] ; Breite der Labels mit "00"
    Global $ihNum = $aPosNum[3] ; Höhe der Labels mit "00"
    Global $iwSpc = $aPosSpc[2] ; Breite der Labels mit " : " bzw. " . "
    Global $ihSpc = $aPosSpc[3] ; Höhe der Labels mit " : " bzw. " . "
    
    Global $idLabelHours = _CreateLabel("00", $ixPos, $iyPos, $iwNum, $ihNum)
    $ixPos += $iwNum + 1
    _CreateLabel(" : ", $ixPos, $iyPos, $iwSpc, $ihSpc)
    $ixPos += $iwSpc + 1
    Global $idLabelMins = _CreateLabel("00", $ixPos, $iyPos, $iwNum, $ihNum)
    $ixPos += $iwNum + 1
    _CreateLabel(" : ", $ixPos, $iyPos, $iwSpc, $ihSpc)
    $ixPos += $iwSpc + 1
    Global $idLabelSecs = _CreateLabel("00", $ixPos, $iyPos, $iwNum, $ihNum)
    $ixPos += $iwNum + 1
    _CreateLabel(" . ", $ixPos, $iyPos, $iwSpc, $ihSpc)
    $ixPos += $iwSpc + 1
    Global $idLabelMilli = _CreateLabel("000", $ixPos, $iyPos, $iwNum * 1.5, $ihNum)
    
    $g_hTimer = TimerInit() ; Startzeit merken
    _GetTime()
    $g_iOldHours = $g_iHours
    $g_iOldMins = $g_iMins
    $g_iOldSecs = $g_iSecs
    $g_iOldMilliSecs = $g_iMilliSecs
    
    Global $g_iSleep = 30, $g_iPause = 0
    
    GUISetState(@SW_SHOW) ; GUI anzeigen
    
    While 1
        Sleep($g_iSleep) ; Aktualisierungsinterval in ms
    
        If $g_iPause = 0 Then
            _GetTime() ; Aktuelle Zeit holen
    
            If $g_iMilliSecs <> $g_iOldMilliSecs Then
                $g_iOldMilliSecs = $g_iMilliSecs
                GUICtrlSetData($idLabelMilli, StringFormat('%03i', StringLeft($g_iMilliSecs, 3))) ; Millisekunden gibt man normal 3-stellig (999) aus
            EndIf
            If $g_iSecs <> $g_iOldSecs Then
                $g_iOldSecs = $g_iSecs
                GUICtrlSetData($idLabelSecs, StringFormat('%02i', $g_iSecs))
            EndIf
            If $g_iMins <> $g_iOldMins Then
                $g_iOldMins = $g_iMins
                GUICtrlSetData($idLabelMins, StringFormat('%02i', $g_iMins))
            EndIf
            If $g_iHours <> $g_iOldHours Then
                $g_iOldHours = $g_iHours
                GUICtrlSetData($idLabelHours, StringFormat('%02i', $g_iHours))
            EndIf
        EndIf
    WEnd
    
    Func _CreateLabel($sText, $x, $y, $w, $h)
        Local $idLabel = GUICtrlCreateLabel($sText, $x, $y, $w, $h)
        GUICtrlSetColor(-1, $g_iLabelColor)
        GUICtrlSetBkColor(-1, $g_iLabelBkColor)
        Return $idLabel
    EndFunc   ;==>_CreateLabel
    
    ; Convert Ticks to Hours : Mins : Secs . MilliSecs --> 00 : 01 : 02 . 345
    Func _GetTime()
        $g_iTicks = TimerDiff($g_hTimer)
        $g_iMilliSecs = StringRegExpReplace($g_iTicks, '.+\.(.+)', '\1')
        _TicksToTime(Int($g_iTicks), $g_iHours, $g_iMins, $g_iSecs)
        $g_sTime = StringFormat("%02i : %02i : %02i . %03i", $g_iHours, $g_iMins, $g_iSecs, StringLeft($g_iMilliSecs, 3))
    ;~     ConsoleWrite('$g_sTime = ' & $g_sTime & @CRLF)
    EndFunc   ;==>_GetTime
    
    Func _OnHotKey()
        Switch @HotKeyPressed ; The last hotkey pressed.
            Case '{F1}' ; -1
                $g_iSleep = $g_iSleep - 1 > 0 ? $g_iSleep - 1 : 1
            Case '{F2}' ; +1
                $g_iSleep += 1
            Case '{F3}' ; -10
                $g_iSleep = $g_iSleep - 10 > 0 ? $g_iSleep - 10 : 1
            Case '{F4}' ; +10
                $g_iSleep += 10
            Case '{F5}' ; Sleep-Timer kurz anzeigen
                ; Nope ;-)
            Case '{Pause}' ; Pause machen
                $g_iPause = BitXOR(1, $g_iPause)
                Return
            Case '{ESC}' ; Programm beenden
                Exit
            Case Else
                Return MsgBox(64, @ScriptName, '_OnHotKey() - unbekanntes HotKey: ' & @HotKeyPressed)
        EndSwitch
        ToolTip('$g_iSleep = ' & $g_iSleep, @DesktopWidth / 2 - 110, $iyPos + $ihNum + 10)
        AdlibRegister(_HideTip, 500)
    EndFunc   ;==>_OnHotKey
    
    Func _HideTip()
        AdlibUnRegister(_HideTip)
        ToolTip('')
    EndFunc   ;==>_HideTip
    Alles anzeigen
  • Den Namen der aktiven (oder aufrufenden) Function ermitteln

    • Bitnugger
    • 25. November 2018 um 22:11
    Zitat von Code-Jack

    Was mich wundert, ist wieso Ihr alle damit lebt, wie SciTE sich verhält?

    Ich lebe damit, weil es mir gefällt und ich damit umgehen kann.

    Zitat von Code-Jack

    Am Ende einer horizontal bestens positionierten Zeile drücke ich Enter. Dabei rückt DIESE Zeile ein Stück nach links!

    Kann ich nicht reproduzieren.


    Zitat von Code-Jack

    Der Cursor steht ganz links und ich drücke Enter, um eine Leerzeile einzufügen. Wieder verrückt die (bestens ausgerichtete) Zeile, in der der Cursor steht (stand).

    Dann stelle den Cursor an das Ende der Zeile und drücke Enter.

    Zitat von Code-Jack

    Und besonders ulkig: Es passiert nicht immer, nur fast immer.

    Das Auto-Indent arbeitet nach festgelegten Regeln... entweder greift eine oder mehrere dieser Regeln, oder eben nicht, aber keinesfalls fast immer!

    Ich glaube aber, ich verstehe deine Problematik... eine Hilfe könnte sein, wenn du bei aktiviertem Auto-Indent darauf achtest, dass du keine offenen "Verschachtelungen" hast... z.B. ein If ohne das zugehörige EndIf.

    Ich arbeite in SciTE sehr viel mit Abbrevs... damit diese "Verschachtelungen" automatisch komplett eingefügt werden... hier ein paar Beispiele:

    ifthen [Leertaste drücken] ...erzeugt folgenden Code

    If Then

    EndIf

    ifelseif [Leertaste drücken] ...erzeugt folgenden Code

    If Then

    ElseIf False Then

    Else

    EndIf

    for0ubnext [Leertaste drücken] ...erzeugt folgenden Code (User-Abbrev)

    For $i = 0 To UBound() -1 Step 1

    Next


    Zudem macht es wenig Sinn, die Zeilen selbst positionieren zu wollen, wenn Auto-Indent aktiviert ist.

  • Schriftgröße in Pixel umrechnen [GUISetFont]

    • Bitnugger
    • 25. November 2018 um 21:10
    Zitat von Muecke

    Text geben ich aktuell hiermit aus:

    GUICtrlSetBkColor(GUICtrlSetColor(GUICtrlCreateLabel( $sec, 950, 450),0x119944), 0x000000)

    Das funktioniert so nicht... denn GUICtrlSetColor gibt dir 1 oder 0 zurück, GUICtrlSetBkColor erwartet aber die ID eines Controls (>= 3) oder -1 für das zuletzt erstellte Control!

    So würde es funktionieren, aber nur wenn das Control erstellt werden konnte:

    GUICtrlSetBkColor(-GUICtrlSetColor(GUICtrlCreateLabel( $sec, 950, 450),0x119944), 0x000000)

    Zitat von Muecke

    auf dem Monitor soll das dann so ausschauen. 00 : 00 : 00.00

    hh : mm : ss:hss

    Erst schreibst du: 00 : 00 : 00.00, dann zur Erklärung hh : mm : ss:hss ...richtig wäre doch wohl hh : nn : ss.mm.

    h = hours

    n = minutes

    s = seconds

    m = milliseconds

  • GUICtrlCreateLabel (Box an TextGröße anpassen)

    • Bitnugger
    • 25. November 2018 um 20:15

    Hier noch mal dieselbe Demo ohne die UDF _StringSize.au3 von Melba23 ...nach der Art, wie alpines es gezeigt hat... Probleme sind gleich und das Ergebnis bei kursiven Schriften ist aber auch nicht besser.

    ReSizeLabel2.au3
    C
    ;-- TIME_STAMP   2018-11-25 19:32:10   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <Misc.au3>
    
    Global $g_idButton14, $g_idButton24, $g_idButton32, $g_idButton64, $g_idButton72, $g_idButtonRestore, $g_idLabelSize, $g_idLabelAttrib
    
    Example()
    
    Func Example()
        Local $hGUI = GUICreate("StringSize-Demo", 1010, 270)
    
        Local $sText = 'Ich bin ein Label'
        Local $iSize = 8.5, $iWeight = 800, $iAttrib = 0, $sName = 'Arial', $iWidth = 990
    
        Local $idLabel = GUICtrlCreateLabel($sText, 10, 30, 140, 22)
        GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
    
        $g_idButton14 = GUICtrlCreateButton("[F2] ReSize Label to 14", 10, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton24 = GUICtrlCreateButton("[F3] ReSize Label to 24", 176, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton32 = GUICtrlCreateButton("[F4] ReSize Label to 32", 342, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton64 = GUICtrlCreateButton("[F5] ReSize Label to 64", 508, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; Ab Schriftgröße 72 scheint AutoIt bei einigen Fonts arge Probleme zu bekommen - die Buttons reagieren dann mehrere Sekunden nicht mehr!
        ; Mit Schriftgröße 65 fängt es an (bei Arial z.B. nicht) und ab 71 wird es dann arge, doch mit den Accelerators geht es trotzdem... hm...
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $g_idButton72 = GUICtrlCreateButton("[F6] ReSize Label to 72", 674, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0xFF0000)
    
        $g_idButtonRestore = GUICtrlCreateButton("[F1] Restore Label Size", 840, 130, 156, 32)
    ;~     GUICtrlSetColor(-1, 0x00FF00)
        GUICtrlSetBkColor(-1, 0xB34EE9)
    
        Local $idChooseFont = GUICtrlCreateButton("Andere Schriftart auswählen...", 10, 170, 986, 32)
    
        GUICtrlCreateLabel('Aktuelle Schrifart', 10, 210, 220, 22)
        GUICtrlSetFont(-1, 14)
    
        $g_idLabelSize = GUICtrlCreateLabel('Size : ' & $iSize, 10, 240, 120, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
        Local $idLabelWeight = GUICtrlCreateLabel('Weight : ' & $iWeight, 140, 240, 120, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
    ;~     $bItalic (2), $bUnderline (4), $bStrikethru (8)
    
        $g_idLabelAttrib = GUICtrlCreateLabel('Attrib : ' & $iAttrib & _GetsAttribString($iAttrib), 270, 240, 420, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
        Local $idLabelName = GUICtrlCreateLabel('Name : ' & $sName, 690, 240, 220, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
    
        ; Set GUIAccelerators for the button controlIDs
        Local $aAccelKeys[6][2] = [["{F1}", $g_idButtonRestore], ["{F2}", $g_idButton14], ["{F3}", $g_idButton24], ["{F4}", $g_idButton32], ["{F5}", $g_idButton64], ["{F6}", $g_idButton72]]
        GUISetAccelerators($aAccelKeys)
    
        GUISetState(@SW_SHOW)
    
        ; Loop until the user exits.
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $g_idButton14
                    _SetLabel($idLabel, $sText, 14, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton24
                    _SetLabel($idLabel, $sText, 24, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton32
                    _SetLabel($idLabel, $sText, 32, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton64
                    _SetLabel($idLabel, $sText, 64, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton72
                    _SetLabel($idLabel, $sText, 72, $iWeight, $iAttrib, $sName, $iWidth) ; <<<<<<<< Buttons reagieren mehrere Sekunden nicht mehr!
                Case $g_idButtonRestore
                    _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
                Case $idChooseFont
                    ; _ChooseFont liefert ein Array zurück, in dem alle Werte als String gespeichert sind.
                    ; _StringSize prüft aber den Typ und will für: $iSize = Number, $iWeight & $iAttrib = Int, $sText = String
                    Local $a_vFont = _ChooseFont("Arial", 8)
                    If @error Then
                        MsgBox($MB_SYSTEMMODAL, "", "Error _ChooseFont: " & @error)
                    Else
    ;~                     $iSize   = Number($a_vFont[3]) ; dann funktioniert _SwitchButtonColor evtl. nicht mehr, weil die neue Schrifgröße nicht gefunden wird.
                        $iWeight = Int($a_vFont[4])
                        $iAttrib = Int($a_vFont[1])
                        $sName = $a_vFont[2]
                        GUICtrlSetData($g_idLabelSize, 'Size : ' & $iSize)
                        GUICtrlSetData($idLabelWeight, 'Weight : ' & $iWeight)
                        GUICtrlSetData($g_idLabelAttrib, 'Attrib : ' & $iAttrib & _GetsAttribString($iAttrib))
                        GUICtrlSetData($idLabelName, 'Name : ' & $sName)
                        _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
                    EndIf
            EndSwitch
        WEnd
    EndFunc   ;==>Example
    
    Func _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
        ConsoleWrite('Get StringSize ' & $iSize & ' ...')
        Local $iError = 0, $hGUI = GUICreate("Get StringSize", @DesktopWidth, @DesktopHeight)
        If Not GUISetFont($iSize, $iWeight, $iAttrib, $sName, $hGUI) Then
            $iError = 1
            ConsoleWrite(' Error!' & @CRLF)
        Else
            ConsoleWrite(' Ok!' & @CRLF)
            Local $idReSizeLabel = GUICtrlCreateLabel($sText, 0, 0)
            Local $aReSize = ControlGetPos(GUICtrlGetHandle($idReSizeLabel), '', '')
    
            _SwitchButtonColor($iSize)
            GUICtrlSetFont($idLabel, $iSize, $iWeight, $iAttrib, $sName)
            GUICtrlSetData($idLabel, GUICtrlRead($idReSizeLabel))
            GUICtrlSetData($g_idLabelSize, 'Size : ' & $iSize)
            Local $aPos = ControlGetPos(GUICtrlGetHandle($idLabel), '', '')
            ConsoleWrite('> $aPos        = ' & _ArrayToString($aPos, ', ') & @CRLF)
            GUICtrlSetPos($idLabel, $aPos[0], $aPos[1], $aReSize[2], $aReSize[3])
        EndIf
    
        GUIDelete($hGUI)
    
        Return SetError($iError, 0, ($iError = 0))
    EndFunc   ;==>_SetLabel
    
    Func _SwitchButtonColor($iSize)
        Local Static $iLastSize, $aButtonIDs = [[14, $g_idButton14], [24, $g_idButton24], [32, $g_idButton32], [64, $g_idButton64], [72, $g_idButton72]]
        Local $idButton = _ArraySearch($aButtonIDs, $iLastSize)
        GUICtrlSetColor($idButton > -1 ? $aButtonIDs[$idButton][1] : $g_idButtonRestore, 0x000000)
        $idButton = _ArraySearch($aButtonIDs, $iSize)
        GUICtrlSetColor($idButton > -1 ? $aButtonIDs[$idButton][1] : $g_idButtonRestore, 0x00FF00)
        $iLastSize = $iSize
    EndFunc   ;==>_SwitchButtonColor
    
    Func _GetsAttribString($iAttrib)
        Local $sAttrib
        If $iAttrib = 0 Then $sAttrib = ''
        If BitAND($iAttrib, 2) Then $sAttrib = 'Italic'
        If BitAND($iAttrib, 4) Then $sAttrib &= ', Underline'
        If BitAND($iAttrib, 8) Then $sAttrib &= ', Strikethru'
        If StringLeft($sAttrib, 2) = ', ' Then $sAttrib = StringTrimLeft($sAttrib, 2)
        If $sAttrib Then $sAttrib = ' (' & $sAttrib & ')'
        Return $sAttrib
    EndFunc   ;==>_GetsAttribString
    Alles anzeigen

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™