1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Nützliche Keybindings

    • BugFix
    • 12. April 2023 um 11:50

    (Editor: VSCode / VSCodium)

    Ich habe mir einige wiederkehrende Befehle mal auf Hotkeys gelegt.

    Die keybindings.json öffnen ("CTRL+SHIFT+P" und als Text "Tastenkombinationen" in die Suchmaske eingeben) und dort entsprechend ergänzen.

    JSON
    // Terminal auf das Verzeichnis der geöffneten Datei setzen
      {
        "key": "alt+t",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "cd /d \"${fileDirname}\"\u000D"},
        "when": "editorTextFocus"
      },
       
      // Kompilieren geöffnete Datei: 64bit, DLL
      {
        "key": "ctrl+numpad5",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "nim c -d:release --app:lib \"${file}\"\u000D"},
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 64bit, CUI
      {
        "key": "ctrl+numpad6",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "nim c \"${file}\"\u000D"},
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 64bit, GUI
      {
        "key": "ctrl+numpad7",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "nim c --app:gui \"${file}\"\u000D"},
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 32bit, CUI
      {
        "key": "ctrl+numpad8",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "nim c --cpu:i386 \"${file}\"\u000D"},
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 32bit, GUI
      {
        "key": "ctrl+numpad9",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "nim c --cpu:i386 --app:gui \"${file}\"\u000D"},
        "when": "resourceExtname == .nim"
      }
    Alles anzeigen

    Im Argumentebereich "text" können auch andere/weitere Parameter hinterlegt werden.

    Natürlich können auch andere Hotkeys verwendet werden. Eine Übersicht findet man mit "CTRL+K CTRL+S".


    EDIT:

    Etwas eleganter kann man das mit Macros lösen, um gleich mehrere Aktionen auf einmal auszuführen.

    Ich verwende macro-commander (Command Runner).

    EDIT 2:

    Da die Keybindings und Settings (Dateien) nicht direkt geöffnet werden über das Menü (nur eine Bedienoberfläche dafür), habe ich noch ergänzt um diese Dateien direkt öffnen zu können.

    In der settings.json habe ich entsprechend ergänzt:

    JSON
    // macro-commander:
        "macros": {
            "clearAll":[
                "workbench.output.action.clearOutput",  // Ausgabe löschen
                "workbench.action.terminal.clear"       // Terminal löschen
            ],
            "setTerminalCurrentDir":[
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "cd /d \"${fileDirname}\"\u000D"}
                }
            ],
            "prepareTerminalToBuild":[
                "macros.clearAll",
                "macros.setTerminalCurrentDir",
                "workbench.action.terminal.focus"
            ],
            "createDLL64bit":[
                 "macros.prepareTerminalToBuild",
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "nim c -d:release --app:lib \"${file}\"\u000D"}
                }
            ],
            "compileCUI64bit":[
                "macros.prepareTerminalToBuild",
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "nim c \"${file}\"\u000D"}
                }
            ],
            "compileCUI32bit":[
                "macros.prepareTerminalToBuild",
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "nim c --cpu:i386 \"${file}\"\u000D"}
                }
            ],
            "compileGUI64bit":[
                "macros.prepareTerminalToBuild",
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "nim c --app:gui \"${file}\"\u000D"}
                }
            ],
            "compileGUI32bit":[
                "macros.prepareTerminalToBuild",
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "nim c --cpu:i386 --app:gui \"${file}\"\u000D"}
                }
            ],
            "openKeybindings":[
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "codium -g \"C:\\Users\\BugFix\\scoop\\apps\\vscodium\\current\\data\\user-data\\User\\keybindings.json\":1\u000D"}
                }
            ],
            "openSettings":[
                {
                    "command": "workbench.action.terminal.sendSequence",
                    "args": {"text": "codium -g \"C:\\Users\\BugFix\\scoop\\apps\\vscodium\\current\\data\\user-data\\User\\settings.json\":1\u000D"}
                }
            ]         
        }
    Alles anzeigen

    Die Pfade bei "openKeybindings" und "openSettings" müsst ihr an eure Installation anpassen! ACHTUNG, unterschiedliche Befehle: VSCodium = codium  / VSCode = code


    Und die keybindings.json sieht jetzt so aus:

    JSON
    // Terminal auf das Verzeichnis der geöffneten Datei setzen
      {
        "key": "alt+t",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "cd /d \"${fileDirname}\"\u000D"},
        "when": "editorTextFocus"
      },
       
      // Kompilieren geöffnete Datei: 64bit, DLL
      {
        "key": "ctrl+numpad5",
        "command": "macros.createDLL64bit",
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 64bit, CUI
      {
        "key": "ctrl+numpad6",
        "command": "macros.compileCUI64bit",
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 64bit, GUI
      {
        "key": "ctrl+numpad7",
        "command": "macros.compileGUI64bit",
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 32bit, CUI
      {
        "key": "ctrl+numpad8",
        "command": "macros.compileCUI32bit",
        "when": "resourceExtname == .nim"
      },
      // Kompilieren geöffnete Datei: 32bit, GUI
      {
        "key": "ctrl+numpad9",
        "command": "macros.compileGUI32bit",
        "when": "resourceExtname == .nim"
      },
    
      // Öffnen keybindings.json
      {
        "key": "ctrl+f11",
        "command": "macros.openKeybindings",
        "when": "editorTextFocus"
      },
    
      // Öffnen settings.json
      {
        "key": "ctrl+f12",
        "command": "macros.openSettings",
        "when": "editorTextFocus"
      } 
    Alles anzeigen
  • Endlosschleife funktioniert nicht mehr ab gewisser Zeit

    • BugFix
    • 12. April 2023 um 09:05
    Zitat von casi4712

    Ich werde erst mal mit der (100) versuchen

    Warum so minimalistisch? ;)

    Selbst ein Abfrageintervall von 10 Sekunden würde doch deinen Anforderungen gerecht werden.

    Begrenzung für das Intervall ist doch wahrscheinlich der zeitliche Abstand zu einer (möglichen) neuen Session. Daran würde ich den Pollwert festmachen.

  • RegEx - mein Kampf

    • BugFix
    • 8. April 2023 um 10:39
    Zitat von GML

    Ist eh fad über Ostern 😉 da hab ich Zeit zu lesen.

    Und immer eine gute Wahl zum Testen: regular expressons 101

  • Cosole Write

    • BugFix
    • 31. März 2023 um 14:39

    Gibt es mehrere Lösungen.

    z. B. hier: https://www.autoitscript.com/forum/topic/126569-consoleau3-udf/

  • Programm läuft-Anzeige

    • BugFix
    • 27. März 2023 um 14:41
    Zitat von entsel

    Aber wenn man beispielsweise einen Rechner nach Bildern durchsucht, ist die Anzahl bzw. Datenmenge nicht bekannt.

    Da kann man aber z.B. den aktuellen Transfer anzeigen.

  • nächste Quadratzahl

    • BugFix
    • 23. März 2023 um 10:44
    Zitat von Moombas

    Und ich weiß gerade nicht, wie Andy darauf kommt, das dein Script auch auf 10 kommt

    Das bezog sich auf funkey 's Überlegung, wenn die gegebene Zahl ein Quadrat ohne Rest ist (81).

  • nächste Quadratzahl

    • BugFix
    • 23. März 2023 um 10:28
    Zitat von Alina

    Nächst höhere

    UNGLEICH zu:

    Zitat von Moombas

    Alina sucht die nächst mögliche

    Aber ich sehe da keine Mißverständlichkeit.

    "Nächsthöhere" includiert, dass der aktuelle Wert bereits ein Quadrat sein kann. Somit kann die Bildungsformel nur lauten:

    Integer der Wurzel(ZAHL) +1

    Wieso du meinst, dass bei 31 "6" und bei 30 "5" das Ergebnis sein sollte, verstehe ich nicht. Quadrat von "5" ist 25, aktuelle Zahl ist aber >25, also ist nächstes Quadrat 36 -- Ergebnis "6".

    EDIT: Deine Variante zielt eher auf die "in irgendeine Richtung nächste", das ist dann aber nicht, wie gefordert, immer die "höhere".

    Aber letztlich muss Alina das klären.

  • SciTE - Farbig hervorheben: Aktuelles Tab Item

    • BugFix
    • 23. März 2023 um 10:18

    [NEU v 0.4]

    Code
        v 0.4   [added] Beenden über CMDLine mit Parameter "/Exit"
                [added] Wahlweise über INI [appearance] einstellbar:
                        - Markierung aktives Item: rect_highlight=true/false
                        - Position der Markierung für "Inaktives Item ungespeichert": idlepos=top/bottom/none
  • nächste Quadratzahl

    • BugFix
    • 22. März 2023 um 21:48

    Soll das ein Battle um den besten Algorithmus sein ?

    AutoIt
    ConsoleWrite(_NextSquare(78) & @CRLF)
    
    Func _NextSquare($_x)
        Local $sqrt = Int(Sqrt($_x))
        Return $sqrt +1
    EndFunc
  • _MapNew

    • BugFix
    • 22. März 2023 um 10:32

    Was mir bei Map fehlt:

    • Map als Wert einer Variablen - Deklaration während der Zuweisung
    • Deklaration einer Map mit gleichzeitiger Wertzuweisung

    Zu diesem Zweck habe ich mir jetzt eine Funktion erstellt, die 10 Key-Value-Paare während der Deklaration zuweisen kann.

    Hier mal der Vergleich

    ohne Funktion:

    AutoIt
    Global $m[]
    $m.Eins = 1
    $m.Zwei = 2
    Global $mTmp[]
    $m.Zwanzig = $mTmp      ; schön wäre ja: $m.Zwanzig = []
    $m.Zwanzig.Eins = 21
    $m.Zwanzig.Zwei = 22

    mit Funktion nur noch eine Zeile:

    AutoIt
    Global $m = _MapNew("Eins", 1, "Zwei", 2, "Zwanzig", _MapNew("Eins", 21 ,"Zwei", 22))
    
    ConsoleWrite($m.Eins & @CRLF)
    ConsoleWrite($m.Zwei & @CRLF)
    ConsoleWrite($m.Zwanzig.Eins & @CRLF)
    ConsoleWrite($m.Zwanzig.Zwei & @CRLF)
    
    
    Func _MapNew($k0=Null,$v0='',$k1=Null,$v1='',$k2=Null,$v2='',$k3=Null,$v3='',$k4=Null,$v4='', _
                 $k5=Null,$v5='',$k6=Null,$v6='',$k7=Null,$v7='',$k8=Null,$v8='',$k9=Null,$v9='')
        Local $aKV[10][2] = [[$k0,$v0],[$k1,$v1],[$k2,$v2],[$k3,$v3],[$k4,$v4],[$k5,$v5],[$k6,$v6], _
                            [$k7,$v7],[$k8,$v8],[$k9,$v9]]
        Local $m[]
        For $i = 0 To 9
            If $aKV[$i][0] = Null Then ExitLoop
            $m[$aKV[$i][0]] = $aKV[$i][1]
        Next
        Return $m
    EndFunc
    Alles anzeigen

    In vielen Fällen ist es sicher besser und übersichtlicher die Zuweisungen zeilenweise vorzunehmen.

    Für die Zuweisung einer Map an eine bestehende Variable oder als Element einer Map oder eines Array ist es m.M.n. vorteilhafter mit der Funktion, als erst temporär eine Map zu erstellen und diese dann zuzuweisen.

  • Button / Icons aus DB bzw. Array erstellen

    • BugFix
    • 21. März 2023 um 15:36

    Ich hatte gerade mal erstellt: Maus über Button - Label darunter wird Text vergrößert:

    AutoIt
    Global $aButtonLabel[5][3] = [ _
        [0,0,'Text 1'],[0,0,'Text 2'],[0,0,'Text 3'],[0,0,'Text 4'],[0,0,'Text 5']]
    Global $diff = 40, $y = 10, $w = 30, $h = 30, $iFontSize = 12
    
    $hGui = GUICreate('Test')
    
    For $i = 0 To UBound($aButtonLabel) -1
        $aButtonLabel[$i][0] = GUICtrlCreateButton('', 40 + $i*$diff + $i*$w, $y, $w, $h)
        $aButtonLabel[$i][1] = GUICtrlCreateLabel($aButtonLabel[$i][2], 20 + $i*$diff + $i*($w), $y+$h+10, $w+40, 17, 0x01) ; $SS_CENTER
    Next
    
    GUISetState()
    
    While True
        _Hover(GUIGetCursorInfo()[4])
        Switch GUIGetMsg()
            Case -3
                Exit
        EndSwitch
    WEnd
    
    
    Func _Hover($_ID)
        Local Static $iLastHover = -1
        Local $iHover = -1
        If ($iLastHover > -1) And $aButtonLabel[$iLastHover][0] = $_ID Then Return
        For $i = 0 To UBound($aButtonLabel) -1
            If $_ID = $aButtonLabel[$i][0] Then ; Maus über Button
                $iHover = $i
                ExitLoop
            EndIf
        Next
        If $iHover > -1 Then
            If $iLastHover <> $iHover Then
                If $iLastHover > -1 Then GUICtrlSetFont($aButtonLabel[$iLastHover][1], Default)
                GUICtrlSetFont($aButtonLabel[$iHover][1], $iFontSize)
                $iLastHover = $iHover
            EndIf
        Else
            If $iLastHover > -1 Then
                GUICtrlSetFont($aButtonLabel[$iLastHover][1], Default)
                $iLastHover = -1
            EndIf
        EndIf
    EndFunc
    Alles anzeigen
  • Button / Icons aus DB bzw. Array erstellen

    • BugFix
    • 21. März 2023 um 11:57
    Zitat von gmmg

    Habe aber noch eine ToDo. Ist es möglich die Schriftgröße zu ändern, wenn ich die Maus über das Icon oder Label bewege?

    Der einfachste Weg:

    Erstelle zwei Label übereinander, mit jeweils unterschiedlicher Schriftgröße. Das zm Hovern setzt du auf HIDE.

    GUIGetCursorInfo liefert die ID des Ctrl über dem die Maus ist, damit kannst du zwischen den Ctrl SHOW/HIDE switchen.

  • SciTE - Farbig hervorheben: Aktuelles Tab Item

    • BugFix
    • 21. März 2023 um 10:26

    [NEU] Markierung inaktiver Tabitem mit ungespeicherten Dateien

  • gmp.dll - Random Functions

    • BugFix
    • 20. März 2023 um 08:01

    :?:

    Was möchtest du mit diesem Beitrag sagen?

  • SciTE - Farbig hervorheben: Aktuelles Tab Item

    • BugFix
    • 17. März 2023 um 22:07
    Zitat von bazii

    Ich habe es noch nie bewußt erlebt, dass anstatt beim "drüberfahren" beim "verlassen" eines Buttons oder eines Tabs das Mousehover wirksam wirkt.

    Das war aber keine primäre Absicht von mir. Hintergrund ist, dass SciTE intern bereits ein MouseHover nutzt (wird für das Tab bezogene Kontextmenü wirksam). Dadurch wird das TabItem durch SciTE im Moment des Hoverns neu gezeichnet - wodurch meine vorhergehende Änderung hinfällig ist. Deshalb muss diese bei Verlassen des Tab erneut vorgenommen werden.

  • SciTE - Farbig hervorheben: Aktuelles Tab Item

    • BugFix
    • 16. März 2023 um 21:24
    Zitat von Alina

    Habt ihr so viele Scriptfenster auf, das sich das Tab hervorheben muss das man bereits ausgewählt habe oder ist es einfach nur aus Spaß?

    Es ging darum, dass unter Windows 11 das aktive TabItem nicht oder kaum hervorgehoben wird.

  • SciTE - Farbig hervorheben: Aktuelles Tab Item

    • BugFix
    • 15. März 2023 um 20:44
    • Hervorheben des aktiven Tab-Item in SciTE
    • Individuell:
      • Rahmenfarbe
      • Textfarbe
      • Hintergrundfarbe
      • Textfarbe bei nicht gespeichert
      • [NEU v0.3] Markierung "Inaktives Item ungespeichert"
      • [NEU v0.4] Markierung "Inaktives Item ungespeichert" wahlweise 'top' / 'bottom' / 'none'
      • [NEU v0.4] Markierung Aktives Item kann deaktiviert werden (falls nur Markierung ungespeichert gewollt)
        Das aktive Item erhält dann bei "ungespeichert" dieselbe Markierung, wie inaktive Item.
    • Farben als Scheme über INI ladbar
    • [NEU v0.4] Das kompilierte Skript kann mit CMDLine-Parameter "/Exit" beendet werden
    • [v0.5] Gefixed: Flickern der Markierung
      [v0.5] Gefixed: Markierung hat nicht gewechselt bei Nutzung der Tastatur zur Auswahl der Tabs

      

        

      

      


    Das Skript z.B. über Autostart laden.

    SciTE_DrawTabItem.au3 v 0.5
    AutoIt
    ;-- TIME_STAMP   2023-03-23 10:16:34   v 0.5
    
    
    #cs
        v 0.5   [fixed] Flickering, a variable assignment was incorrect
                [fixed] Marking has failed by using keys ("F6", "Shift+F6") to change the buffer selection
        v 0.4   [added] Exit via CMDLine with parameter "/Exit"
                [added] Optionally adjustable via INI [appearance]:
                        - Mark active item: rect_highlight=true/false
                        - Position of the marker for "Inactive item unsaved": idlepos=top/bottom/none
        v 0.3   [added] Separate marker (colored line top) for "Inactive item unsaved".
        v 0.2   [added] Separate marking (text color) for unsaved files.
                [added] Loading of colors from an INI (color schemes) possible
    #ce
    
    
    #include <FontConstants.au3>
    #include <GuiTab.au3>
    #include <Misc.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPISys.au3>
    #include <WinAPIMisc.au3>
    #include <WindowsConstants.au3>
    
    Opt('TrayIconHide', 1)
    
    If $CMDLINE[0] And $CMDLINE[1] = '/Exit' Then   ; CMD-Line: "@ScriptName.exe /Exit"
        Local $aProcessList = ProcessList(@ScriptName)
        For $i = 1 To $aProcessList[0][0] Step 1
            If $aProcessList[$i][1] <> @AutoItPID Then ProcessClose($aProcessList[$i][1])
        Next
    EndIf
    
    _Singleton(@ScriptName)
    
    
    ;~ HotKeySet("!{F8}", _End)            ; <Alt><F8> Beenden
    OnAutoItExitRegister(_End)
    
    Global $sINI = StringFormat("%s\%s.ini", @ScriptDir, StringTrimRight(@ScriptName, 4))
    Global $gm_SciTE[]
    $gm_SciTE.ExistsLast = 0
    $gm_SciTE.ExistsCurr = 0
    
    #cs
    The colors can be defined in an INI file in the script folder.
    If INI is not available, default colors are loaded.
    INI-Name = Name_of_the_Exe.ini
    
    [appearance]
    ; rect_highlight=true/false  "false" does NOT highlight the active item, default: "true".
    rect_highlight=true
    
    ; idlepos=top/bottom/none    "none" does NOT mark unsaved inactive files, default: "top".
    idlepos=top
    
    
    [scheme]
    current=default
    
    [default]
    rect=0xCC483F
    text=0x800020
    bg=0xFFFFFF
    unsaved=0x3030FF
    idle=0x3030FF
    
    [blue_invers]
    rect=0xCC483F
    text=0xFFF0F0
    bg=0x800020
    unsaved=0xA9A5F7
    idle=0xA9A5F7
    
    [green_invers]
    rect=0x005F00
    text=0xEDFFED
    bg=0x409340
    unsaved=0x1DE6B5
    idle=0x1DE6B5
    
    #ce
    
    ; appearance
    $gm_SciTE.bHighlight       = (_IniOrDefault($sINI, 'rect_highlight', 'true', 'appearance') = 'true')
    $gm_SciTE.IdlePos          = _IniOrDefault($sINI, 'idlepos', 'top', 'appearance')
    
    ; scheme: default (blau):
    $gm_SciTE.RectColor        = _IniOrDefault($sINI, 'rect'   , 0xCC483F) ; BGR
    $gm_SciTE.TextColor        = _IniOrDefault($sINI, 'text'   , 0x800020) ; BGR
    $gm_SciTE.BGColor          = _IniOrDefault($sINI, 'bg'     , 0xFFFFFF) ; BGR
    $gm_SciTE.TextColorUnsaved = _IniOrDefault($sINI, 'unsaved', 0x3030FF) ; BGR
    $gm_SciTE.IdleUnsaved      = _IniOrDefault($sINI, 'idle'   , 0x3030FF) ; BGR
    
    _CheckSciTE()   ; the effect takes place immediately
    AdlibRegister(_CheckSciTE, 750)
    
    While True
        Sleep(5000)
    WEnd
    
    
    Func _End()
        AdlibUnRegister(_CheckSciTE)
    ;~     MsgBox(0, 'SciTE TabItem', 'Beendet!')
        Exit
    EndFunc
    
    
    Func _CheckSciTE()
        If ProcessExists("SciTE.exe") Then
            $gm_SciTE.ExistsCurr = 1
            If $gm_SciTE.ExistsLast = 0 Then $gm_SciTE.ExistsLast = 1
            If $gm_SciTE.bHighlight Then
                _DrawTabItem()
                AdlibRegister(_MouseHoversTab, 150)
            EndIf
            _MarkUnsavedIdleTab()
        Else
            $gm_SciTE.ExistsCurr = 0
            If $gm_SciTE.ExistsLast = 1 Then
                $gm_SciTE.ExistsLast = 0
                If $gm_SciTE.bHighlight Then AdlibUnRegister(_MouseHoversTab)
            EndIf
        EndIf
    EndFunc
    
    
    Func _MouseHoversTab()
        Local Static $iHoverLast = 1    ; when starting the program, exit from the item must be simulated
        Local $mTab = _SciTE_GetActiveTabInfo()
        If @error Then Return
        Local $tPoint = _WinAPI_GetMousePos(True, $mTab.hTab)
        Local $tRect = $mTab.RectItem
        Local $isHover = _WinAPI_PtInRect($tRect, $tPoint)
        If $isHover = 1 And $iHoverLast = 0 Then
            $iHoverLast = 1
        ElseIf $isHover = 0 And $iHoverLast = 1 Then
            $iHoverLast = 0
            Return _DrawTabItem()
        EndIf
    EndFunc
    
    
    Func _MarkUnsavedIdleTab()
        If $gm_SciTE.IdlePos = 'none' Then Return
        Local $hTab = __GetHwnd_SciTeTabCtrl()
        If @error Then Return SetError(1)
        Local $iActive = _GUICtrlTab_GetCurFocus($hTab)
        For $i = 0 To _GUICtrlTab_GetItemCount($hTab) -1
            If $i = $iActive And $gm_SciTE.bHighlight Then ContinueLoop
            If StringRight(_GUICtrlTab_GetItemText($hTab, $i), 1) = '*' Then
                _DrawMarkerUnsaved($hTab, $i)
            EndIf
        Next
    EndFunc
    
    
    Func _DrawMarkerUnsaved($_hTab, $_iItem)
        Local $tRect = _GUICtrlTab_GetItemRectEx($_hTab, $_iItem)
        Local $tRectDraw = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct")
        If $gm_SciTE.IdlePos = 'top' Then
            $tRectDraw.Left   = $tRect.Left
            $tRectDraw.Top    = $tRect.Top -1
            $tRectDraw.Right  = $tRect.Right
            $tRectDraw.Bottom = $tRect.Top
        Else
            $tRectDraw.Left   = $tRect.Left
            $tRectDraw.Top    = $tRect.Bottom +2
            $tRectDraw.Right  = $tRect.Right
            $tRectDraw.Bottom = $tRect.Bottom +3
        EndIf
        Local $hDC = _WinAPI_GetDC($_hTab)
        Local $hPen = _WinAPI_CreatePen($PS_SOLID, 2, $gm_SciTE.IdleUnsaved)
        Local $hOldPen = _WinAPI_SelectObject($hDC, $hPen)
        _WinAPI_Rectangle($hDC, $tRectDraw)
        _WinAPI_SelectObject($hDC, $hOldPen)
        _WinAPI_DeleteObject($hPen)
        _WinAPI_ReleaseDC(0, $hDC)
    EndFunc
    
    
    Func _DrawTabItem()
        Local $mTab = _SciTE_GetActiveTabInfo()
        If @error Then Return
        Local $hDC = _WinAPI_GetDC($mTab.hTab)
        Local $hFont = _WinAPI_CreateFont(14.5, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
            $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Sans Unicode Standard')
        Local $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
        Local $tRect = $mTab.RectItem       ; extract to variable - otherwise no ByRef access possible
        Local $dY = (@OSVersion = "Win_7" ? 2 : 1)
        _WinAPI_InflateRect($tRect, 2, $dY) ; enlarge rectangle
        _WinAPI_OffsetRect($tRect, 0, 1)    ; move rectangle down by 1px
    
        ; draw and fill rect
        Local $hPen = _WinAPI_CreatePen($PS_SOLID, 2, $gm_SciTE.RectColor)
        Local $hBrush = _WinAPI_CreateSolidBrush($gm_SciTE.BGColor)
        Local $hOldPen = _WinAPI_SelectObject($hDC, $hPen)
        Local $hOldBrush = _WinAPI_SelectObject($hDC, $hBrush)
        _WinAPI_Rectangle($hDC, $tRECT)
    
        ; draw text
        If StringRight($mTab.Item, 1) = '*' Then
            _WinAPI_SetTextColor($hDC, $gm_SciTE.TextColorUnsaved)
        Else
            _WinAPI_SetTextColor($hDC, $gm_SciTE.TextColor)
        EndIf
        _WinAPI_SetBkColor($hDC, $gm_SciTE.BGColor)
        ; move the text down a bit more
        _WinAPI_OffsetRect($tRect, 0, 3)
        _WinAPI_DrawText($hDC, $mTab.Item, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
    
        ; clear ressources
        _WinAPI_SelectObject($hDC, $hOldFont)
        _WinAPI_DeleteObject($hFont)
        _WinAPI_SelectObject($hDC, $hOldPen)
        _WinAPI_DeleteObject($hPen)
        _WinAPI_SelectObject($hDC, $hOldBrush)
        _WinAPI_DeleteObject($hBrush)
        _WinAPI_ReleaseDC(0, $hDC)
    EndFunc
    
    
    Func _SciTE_GetActiveTabInfo()
        Local $mResult[], $hTab = __GetHwnd_SciTeTabCtrl()
        If @error Then Return SetError(1)
        $mResult.hTab     = $hTab
        $mResult.Index    = _GUICtrlTab_GetCurFocus($hTab)
        $mResult.Item     = _GUICtrlTab_GetItemText($hTab, $mResult.Index)
        $mResult.RectItem = _GUICtrlTab_GetItemRectEx($hTab, $mResult.Index)
        Return $mResult
    EndFunc
    
    
    Func __GetHwnd_SciTE()
        Local $hScite = WinGetHandle('[ACTIVE]')
        If _WinAPI_GetClassName($hScite) = 'SciTEWindow' Then
            Return $hScite
        Else
            Return SetError(1, 0, Null)
        EndIf
    EndFunc
    
    
    Func __GetHwnd_SciTeTabCtrl()
        Local $hScite = __GetHwnd_SciTE()
        If @error Then Return SetError(1, 0, Null)
        Local $aChild, $hWndTab = Null
        $aChild = _WinAPI_EnumChildWindows($hScite) ; only visible
        If Not @error Then
            For $i = 1 To $aChild[0][0]
                If $aChild[$i][1] = "SciTeTabCtrl" Then
                    $hWndTab = $aChild[$i][0]
                    ExitLoop
                EndIf
            Next
        EndIf
        Return SetError(($hWndTab = Null ? 1 : 0), 0, $hWndTab)
    EndFunc
    
    
    ; read from INI if exists
    Func _IniOrDefault($_sINI, $_sKey, $_sDefault, $_sec=Null)
        Local $sVal = $_sDefault, $sSec = $_sec = Null ? 'scheme' : $_sec
        If FileExists($_sINI) Then
            If $sSec = 'scheme' Then $sSec = IniRead($_sINI, 'scheme', 'current', 'default')
            $sVal = IniRead($_sINI, $sSec, $_sKey, $_sDefault)
        EndIf
        Return $sVal
    EndFunc
    Alles anzeigen

    DL bisher: 85

    Dateien

    SciTE_DrawTabItem.au3 8,86 kB – 267 Downloads
  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 15. März 2023 um 13:44
    Zitat von Moombas

    Wäre es nicht besser, anstatt es in autostart zu packen, man eine art "starting exe" für autoit baut

    Das kann und soll ja jeder so handhaben, wie er möchte.

    Bei mir dümpeln etliche Skripts im Hintergrund und überprüfen, ob etwas gestartet, weggeklickt etc. pp. werden muss. Das frisst kaum Ressourcen (dieses Skript erreicht max. 1% CPU Last bei mir).

    Letztlich ist das ja keine Anweisung, sondern eine Empfehlung. :rofl:

  • Diskussions-Posts aus Umfrage zum Thema "Wie informiert Ihr Eure User in einer Domain..."

    • BugFix
    • 15. März 2023 um 13:42
    Zitat von Peter S. Taler

    Weitere Ausführungen spare ich mir hier sonst schreibe ich 200 Seiten

    Diese Absurditäten glaube ich dir gerne.

    Aber:

    Was bringt es dir, mal umgangssprachlich gesagt, dich hier im Forum darüber auszukotzen?

    Ich würde es wertschätzen, wenn nicht jeder gute Beitrag von dir, durch sehr rigide Äußerungen an Wert verliert. Du solltest auch die Außenwirkung deiner Worte nicht unterschätzen. Wenn du dich da nicht etwas einbremst, bleibt dann vielleicht nur hängen: Ach der, der motzt doch bloß.

    Ganz ehrlich, wenn dich das alles so sehr belastet, suche dir eine guten Kumpel, bei dem du dir das mal alles von der Seele reden kannst. Hier im Forum ist dafür nicht der richtige Platz.

    Danke für dein Verständnis.

  • FAQ - SciTE Editor

    • BugFix
    • 15. März 2023 um 12:56

    Wie kann das aktive Tab-Item hervorgehoben werden?

    Beitrag

    SciTE - Farbig hervorheben: Aktuelles Tab Item

    • Hervorheben des aktiven Tab-Item in SciTE
    • Individuell:
      • Rahmenfarbe
      • Textfarbe
      • Hintergrundfarbe
      • Textfarbe bei nicht gespeichert
      • [NEU v0.3] Markierung "Inaktives Item ungespeichert"
      • [NEU v0.4] Markierung "Inaktives Item ungespeichert" wahlweise 'top' / 'bottom' / 'none'
      • [NEU v0.4] Markierung Aktives Item kann deaktiviert werden (falls nur Markierung ungespeichert gewollt)
        Das aktive Item erhält dann bei "ungespeichert" dieselbe Markierung, wie inaktive Item.
    • Farben als Scheme über INI ladbar
    • [NEU v0.4] Das
    …
    BugFix
    15. März 2023 um 20:44

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™