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

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 23. April 2021 um 07:03
    Zitat von Professor Bernd

    Zum anderen soll eine vorgesehene Reihenfolge in der Ini eingehalten werden.

    Was ist der Nutzen davon?

    Du solltest evtl. das Konzept überdenken. Ich finde die von SciTE gewählte Variante mit Global und User Properties sehr gut.

    Deine *Soll.ini* entspräche den Global Properties und wird zuerst geladen. Dann werden die Werte aus der *Ist.ini*, den User Properties, gelesen, welche Werte aus der Global überschreiben.

    Vorteil:

    Du brauchst die User Datei niemals bearbeiten, das macht ausschließlich der Anwender.

    Macht dieser keine individuellen Einträge, sind die globalen Werte gültig.

  • SciTE: Arbeiten mit Strips

    • BugFix
    • 21. April 2021 um 14:40

    Was ist ein Strip? - Strips sind (wie der Name erahnen lässt) Streifen, die am unteren Rand des Anwendungsfensters eingeblendet werden.

    Könnt ihr euch ansehen mit <Suchen> <Inkrementelle Suche..>

    Ich finde diese Menüform recht charmant, da sie anders als z.B. das "Suchen und Ersetzen" Fenster keinen Text im Editor überblendet.

    Sofern man damit seinen Editor etwas umgestalten möchte fällt auf: Es gibt nur eine einzige Funktion in SciTE, die aufrufbar ist, wenn ein Ereignis in diesem Strip-Menü stattfindet: scite.OnStrip.

    Deshalb habe ich Strip_Dialog.lua erstellt. Hier lassen sich verschiedene Strip-Dialoge mit entsprechenden Auswertefunktionen registrieren. Die Standardfunktion scite.StripShow('Definition') ist gecoverd in Strip:Show(Funktion). Anhand der Funktion wird die korrekte Definition ausgewählt und damit der Dialog angezeigt. Ohne Parameter wird mit dieser Funktion der Dialog beendet.

    Die Datei Strip_Dialog.lua mit der SciTEStartup.lua laden. Dann kann sie verwendet werden (SciTE neu starten).

    Code: Strip_Dialog.lua
    -- TIME_STAMP   2021-04-21 14:27:33   v 0.1
    -- coding:utf-8
    
    --[[
    Strips werden als Streifen am unteren Rand des Anwendungsfensters angezeigt.
    
    ----------------------------------------------------------------------------------------------------
    Definitionsstring:
        5 Elemente werden unterstützt und sind wie folgt zu markieren:
            Label:                'LABEL'
            Editierbarer Text:    [INPUT]
            Combo Boxen:          {COMBO}
            Button:               (BUTTON)
            Default Button:       ((DEF_BUTTON))        mittels <ENTER> aktivierbar
    
        Weiterhin können verwendet werden:
            Neue Zeile:           \n
            X-Button (Beenden):   !
    
        Button können Accelerator-Keys enthalten durch Verwendung des Präfix "&".
        Die Verwendung von Accelerator-Keys bei Labels führt dazu, dass der Fokus zum nächsten Element wandert, das den Fokus akzeptiert.
        Ein literales "&" muss mit sich selbst maskiert werden.
    ----------------------------------------------------------------------------------------------------
    
    Die Strip-Funktionen befinden sich alle im Kontext von "scite.".
        .StripShow("Strip-Definition")        Blendet den Strip ein.
        .StripShow("")                        Schließt den Strip.
        .StripValue(element)                  Fragt den Wert von "element" (Input oder Combo) ab.
        .StripSet(element, value)             Setzt den Wert für den editierbaren Bereich von "element" (Input oder Combo).
        .StripSetList(element, value)         Setzt die Liste einer Combo, Werte getrennt durch "\n".
    ----------------------------------------------------------------------------------------------------
    
    Ereignisse vom Benutzer werden über die Funktion:
    
        OnStrip(elementNum, changeType)
    
        an das Skript zurückgemeldet.
        Parameter:
        Elementnummer    beginnend bei 0 und einschließlich statischer Textelemente!
        Änderungstyp    1 = clicked        Drücken von Schaltflächen
                        2 = change         Änderungen an editierbarem Text oder dem editierbaren Textteil einer Combo
                        3 = focusIn        Wenn der Benutzer den Fokus zwischen Elementen verschiebt
                        4 = focusOut       - " -
    ----------------------------------------------------------------------------------------------------
    
    
    ]]
    
    -- management for several strips
    Strip = {}
    
    -- holds the registered functions
    Strip.registered = {}
    
    -- the function, that is to use in the body of "OnStrip"
    Strip.now = nil
    
    -- registers the function to call (uses the param ID & CHANGE) and the strip definition to use with this function
    Strip.Register = function(self, _f, _definition)
        if self.registered[_f] == nil then
            self.registered[_f] = _definition
        end
    end
    
    -- unregisters a strip function
    Strip.UnRegister = function(self, _f)
        if self.registered[_f] ~= nil then
            self.registered[_f] = nil
        end
    end
    
    -- covers the scite.StripShow call to select the right definition and function for it
    Strip.Show = function(self, _f)
        if _f == nil then return scite.StripShow('') end
        self.now = _f
        scite.StripShow(self.registered[_f])
    end
    
    
    -- The same SciTE function "OnStrip" will called for each Strip!
    -- Here i call the now selected Strip-function.
    OnStrip = function(_id, _change)
        Strip.now(_id, _change)
    end
    Alles anzeigen

    Und hier zwei Bsp. (die Aufrufe können nur einzeln auskommentiert verwendet werden, da ein Aufruf von Strip.Show das aktuelle Skript nicht unterbricht).

    Code: Bsp.
    ----------------------------------------------------------------------------------------- STRIP 1 --
    -- Meine "OnStrip" Function
    local myOnStrip_1 = function(_id, _change)
        local changes = {'unknown', 'clicked', 'change', 'focusIn', 'focusOut'}
        local id_names = {'Label "Frucht"', 'Combo', 'Button "Suche"', 'Label "Name"', 'Input "Name"', 'Button "OK"', 'Button "Cancel"'}
        if _id == 2 and _change == 1 then
            local search = scite.StripValue(1)
            print('Suche nach '..search)
        elseif _id == 6 then -- ESC
            print('Event: '..changes[_change+1], 'Control['.._id..']: '..id_names[_id+1])
            Strip:Show() -- ohne Parameter wird beendet
        else
            print('Event: '..changes[_change+1], 'Control['.._id..']: '..id_names[_id+1])
        end
    end
    
    -- Registrieren meiner Funktion und Strip-Definition
    -- "!'Frucht:'{}(&Suche)\n"    -- Zeile 1: Label - Combo - Button - X-Button
    -- "'Name:'[Name](OK)(Cancel)" -- Zeile 2: Label - Input - Button - Button
    
    Strip:Register(myOnStrip_1, "!'Frucht:'{}(&Suche)\n'Name:'[Name](OK)(Cancel)")
    
    
    -- Funktion zum Strip anzeigen Daten einfügen
    myShow_1 = function()
        Strip:Show(myOnStrip_1) -- muss als erstes passieren, sonst können keine Daten eingefügt werden!
        scite.StripSetList(1, "Apfel\nBanane\nZitrone\nOrange\nPfirsich")
        scite.StripSet(1, "<Wähle eine Frucht>")
        scite.StripSet(4, "Ein längerer Name")
    end
    ----------------------------------------------------------------------------------------------------
    
    
    ----------------------------------------------------------------------------------------- STRIP 2 --
    -- Meine "OnStrip" Function
    local myOnStrip_2 = function(_id, _change)
        local changes = {'unknown', 'clicked', 'change', 'focusIn', 'focusOut'}
        local id_names = {'Label "Zeile"', 'Input "Zeile"', 'Label "Spalte"', 'Input "Spalte"', 'Button "Gehe zu"'}
        if _id == 4 and _change == 1 then
            local line, col = scite.StripValue(1), scite.StripValue(3)
            print('Gehe zu', line, col)
        else
            print('Event: '..changes[_change+1], 'Control: '..id_names[_id])
        end
    end
    
    -- Registrieren meiner Funktion und Strip-Definition
    -- "!'Zeile:'[]'Spalte'[](Gehe zu)" -- Zeile 1: Label - Input - Label - Input - Button - X-Button
    
    Strip:Register(myOnStrip_2, "!'Zeile:'[]'Spalte'[](Gehe zu)")
    
    
    -- Funktion zum Strip anzeigen
    myShow_2 = function()
        Strip:Show(myOnStrip_2)
    end
    ----------------------------------------------------------------------------------------------------
    
    
    
    
    myShow_1()
    
    -- myShow_2() -- da keine Daten vorbelegt werden, reicht natürlich auch: Strip:Show(myOnStrip_2)
    Alles anzeigen

    Dateien

    Strip_Dialog.lua 3,01 kB – 556 Downloads
  • GUI erstellen mit mehreren Bereichen?

    • BugFix
    • 20. April 2021 um 16:41
    Zitat von UPIA

    animiere aber nur den mittleren Bereich.

    das macht die Animation extrem langsam, weil ich die statischen Ränder jeden Frame neu reinmale.

    Zeig das mal als Code. Aus deiner Beschreibung ist nicht klar wie das Zeichnen abläuft.

  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • BugFix
    • 20. April 2021 um 11:38
    Zitat von Bitnugger

    Schön... baue doch bitte noch eine zweite Property mit ein... für UTF8 ohne BOOM, das wäre dann z.B. für *.lua.

    Ich habe mal noch eine Alternative erstellt. Da SciTE in der Lage ist ein coding-cookie in den ersten 2 Zeilen zu erkennen, verwende ich das hierbei. Somit ist auch UTF8 ohne BOM sicher erkennbar.

    Dafür habe ich noch eine zusätzliche Property UTF8.Cookie.Line=. Braucht nur gesetzt werden, wenn das Cookie in die zweite Zeile soll ansonsten wird es standardmäßig in die erste Zeile geschrieben.

    Ich möchte aber gleich noch auf einen "Echo-Effekt" hinweisen. Ich verwende ja TimeStamp, der bei jedem Speichern gesetzt wird. Das beißt sich in dem Fall hiermit, wenn die erste Zeile gelöscht wird (Zeilenumbruch bleibt, Coding-Cookie steht in Zeile 2). Wenn jetzt automatisch der TimeStamp gesetzt wird, schiebt der den vorhandenen Inhalt eine Zeile weiter, somit steht das Cookie in Zeile #3 und ist ungültig - wird somit erneut gesetzt. Das ist aber ein absoluter Ausnahmefall. Ich werde mal die TimeStamp Funktion überarbeiten, dass sie das Cookie berücksichtigt, sofern vorhanden.

    Code: ForceEncoding.lua
    -- TIME_STAMP   2021-04-20 11:19:47
    -- coding:utf-8
    
    
    --[[
    PROPERTIES:
    # The only way to detect the UTF8 encoding is using a coding cookie in one of the 1st two lines.
    # line to insert the utf8-cookie (1 or 2), default: 1
    UTF8.Cookie.Line=
    
    # file types, that needs this codings
    # 'utf8' - as default declared: 'lua'
    # 'utf8bom' - as default declared: 'au3'
    UTF8.File.Types=ext_1 ext_2
    UTF8BOM.File.Types=ext_1 ext_2
    UTF16LE.File.Types=ext_1 ext_2
    UTF16BE.File.Types=ext_1 ext_2
    
    ]]
    
    ForceEncoding = EventClass:new(Common)
    
    ForceEncoding.OnSave = function(self, _file)
        local enc = self:NeedsEncoding(props['FileExt'])
        if enc == 'NONE' then return nil end
        if not (self:Get(_file) == enc) then  -- file has not the required encoding
            if enc == 'UTF8' then      -- IDM_ENCODING_UCOOKIE    154    UTF8  (not save without real text cookie!)
                self:InsertUTF8Cookie()
                scite.MenuCommand(IDM_ENCODING_UCOOKIE)
            else
                local tCmd = {['UTF8BOM']=IDM_ENCODING_UTF8,['UTF16LE']=IDM_ENCODING_UCS2LE,['UTF16BE']=IDM_ENCODING_UCS2BE}
                scite.MenuCommand(tCmd.enc)
            end
        end
        return nil
    end
    
    -- inserts the coding cookie in line 1 or 2
    ForceEncoding.InsertUTF8Cookie = function()
        local l = tonumber(props['UTF8.Cookie.Line']) or 1    -- if prop not set use 1st line
        if l > 2 then l = 2 end                               -- last possible line for this cookie
        local countLines = editor.LineCount
        if countLines < l then l = 1 end                      -- file is empty or has only one line and cookie prop is set to 2
        local lineComment = props['comment.block.'..props['FileExt']]
        l = l -1                                              -- 0-based line index
        local caret = editor.CurrentPos
        local firstVisibleLine = editor.FirstVisibleLine
        local pos = editor:PositionFromLine(l)                -- start position from line
        editor:InsertText(pos, lineComment..' coding:utf-8\n')
        editor:SetSel(caret, caret)
        editor.FirstVisibleLine = firstVisibleLine
    end
    
    -- returns the encoding, that the file type needs
    ForceEncoding.NeedsEncoding = function(self, _ext)
        local tExt = {}
        tExt["UTF8"]    = props['UTF8.File.Types']:lower()..' lua'
        tExt["UTF8BOM"] = props['UTF8BOM.File.Types']:lower()..' au3'
        tExt["UTF16LE"] = props['UTF16LE.File.Types']:lower()
        tExt["UTF16BE"] = props['UTF16BE.File.Types']:lower()
        for enc in pairs(tExt) do
            if tExt[enc]:find(_ext:lower()) then return enc end
        end
        return 'NONE'
    end
    
    -- detects: 'UTF8BOM', 'UTF16LE', 'UTF16BE' by it's byte marker (from file)
    -- and 'UTF8' if coding cookie is set on one of the first two lines: (from editor pane)
    -- A coding cookie looks similar to "coding: utf-8" ("coding" followed by ':' or '=', optional whitespace, optional quote, "utf-8").
    ForceEncoding.Get = function(self, _file)
        local tEnc = {}
        tEnc['UTF8BOM'] = {['len']=3,['hex']="EFBBBF"}
        tEnc['UTF16LE'] = {['len']=2,['hex']="FFFE"}
        tEnc['UTF16BE'] = {['len']=2,['hex']="FEFF"}
        local n, line, fh, content, read = 0
        -- 1st. check for coding cookie (UTF8)
        for i=0, 1 do
            line = editor:GetLine(i)
            if line == nil then break
            else if line:find("coding[:=]%s-['\"]-utf%-8") then return "UTF8" end end
        end
        -- now check for byte marker
        for enc in pairs(tEnc) do
            if self:ToHex(self:ReadLen(_file, tEnc[enc].len)) == tEnc[enc].hex then return enc end
        end
        return 'UNKNOWN'
    end
    
    -- reads a count of bytes from a file
    ForceEncoding.ReadLen = function(self, _file, _n)
        local fh = io.open(_file, "rb")
        local read = fh:read(_n)
        fh:close()
        return read
    end
    
    -- converts a passed string to hex value of its characters
    ForceEncoding.ToHex = function(self, _s)
        if _s == nil then return 'DEAD' end
        return (_s:gsub('.', function(_c) return ('%02X'):format(_c:byte()) end))
    end
    Alles anzeigen

    Dateien

    ForceEncoding.lua 3,64 kB – 527 Downloads
  • Mit Autoit eine PDF-Datei erstellen

    • BugFix
    • 19. April 2021 um 10:07
    Zitat von chesstiger

    bin dann aber doch bei wkhtmltopdf geblieben

    Soweit ich gelesen habe, soll der Aufruf ganz simpel sein: wkhtmltopdf URL filename.pdf

    Habe das mit der lokalen Adresse meiner array_tut.htm getestet, aber ohne Erfolg:

    html_to_pdf.png
    Hast du eine Idee warum?

    [Sorry an den TE, fürs Reingrätschen. Aber gehört gewisserweise ja auch zum Thema]

  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • BugFix
    • 15. April 2021 um 21:18

    Ich habe das so, dass ich die Standard Kodierung von SciTE nutze (passt für Lua) und nur Autoit bekommt eine Extrawurst. :P

    Aber ich hatte schon überlegt, für alle Kodierungen die Möglichkeit von Dateitypzuordnungen einzubauen. Werde ich dann noch erledigen.

    EDIT

    Mist, zu schnell geschossen: BOM ist die einzig existierende Kodierung, die man aus einer Datei auslesen kann (bei UTF16 noch LE und BE).

    Somit kann ich nicht feststellen, ob eine Datei UTF8 oder sonstwie kodiert ist.

    Die einzige Variante wäre zu sagen, dass alle Dateien, die nicht BOM bekommen sollen mit UTF8 kodiert werden. Da ich nicht feststellen kann, ob das bereits passiert ist (get encoding gibt es nicht), würde das bei jedem Speichern erneut gesetzt. - Das fände ich nicht sehr glücklich gelöst.

  • Mit Autoit eine PDF-Datei erstellen

    • BugFix
    • 15. April 2021 um 14:50

    Die Funktion _Iif() ist wohl dort irgendwo verloren gegangen (braucht man inzwischen auch nicht mehr, da es den ternären Operator gibt).

    Damit du den Code nicht umschreiben musst, hier die Funktion mal nachgebaut:

    AutoIt
    Func _Iif($condition, $ifTrue, $ifFalse)
        Return ($condition ? $ifTrue : $ifFalse)
    EndFunc
  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • BugFix
    • 15. April 2021 um 13:47

    Neu: CheckBOM.lua

    Diese Datei ersetzt die bisherige new_as_utf8bom.lua.

    Nun wird nicht jede neue Datei mit BOM versehen, sondern nur Dateien, die als au3 gespeichert sind.

    Optional lassen sich per Property weitere Dateitypen dafür registrieren.

  • SciTE - Toggle Block Comment -- NEU!! ​​ Zum Aufheben eines Kommentarblocks ist keinerlei Markierung notwendig!

    • BugFix
    • 14. April 2021 um 18:04

    Kleiner Fix in v0.10

  • SciTE Starter - Verwalten mehrerer SciTE Versionen

    • BugFix
    • 13. April 2021 um 12:36

    Ich hatte ja bereits hier erste Schritte in diesem Thema gemacht, das war aber noch unausgegoren.

    So gehts:

    - Die Standardinstallation von SciTE4AutoIt wird (ist) normal über das Installationsprogramm installiert.

    - Vom Installationsprogramm wurde die Umgebungsvariable: SciTE_USERHOME = C:\Users\<USER>\AppData\Local\AutoIt v3\SciTE gesetzt.

    - Dort ist standardmäßig die SciTEUser.properties gespeichert.

    - Für andere SciTE-Versionen darf nicht der Installer benutzt werden, sondern die gepackte Installation muss in einem Pfad entpackt werden, auf den der USER volle Schreibrechte hat.

    - Sowohl die SciTEUser.properties als auch die SciTEGlobal.properties sind dann im selben Ordner zu erstellen, wie die SciTE.exe

    Beim ersten Aufruf des SciTE-Starters fragt das Programm nach dem Pfad für SciTE4AutoIt und einem entsprechenden Alias für die Anzeige in der Auflistung. Anschließend können weitere SciTE-Versionen ausgewählt werden. (Falls kein Alias eingetragen oder die Alias-Abfrage abgebrochen wird, verwendet das Programm den Namen der SciTE.exe und deren Versionsnummer.) Alles wird in einer INI im Pfad des SciTE-Starters eingetragen.

    Es können per Kontextmenü der Liste jederzeit Einträge hinzugefügt oder gelöscht werden. Bitte alle Einträge ausschließlich über das Programm vornehmen, der erste Eintrag muss zwingend die Standardinstallation von SciTE4AutoIt sein. - Und auch nicht auf die Idee kommen, die Liste sortiert anzuzeigen! Grund ist derselbe, an Index 0 muss SciTE4AutoIt sein.

    Bei der Auswahl einer anderen als der Standardversion, wird SciTE_USERHOME zurückgesetzt und SciTE_HOME mit dem Pfad der gewählten Version belegt. Somit sucht SciTE beim Start dort nach der SciTEUser.properties.

    Wenn ich SciTE4AutoIt über die Installationsverknüpfung starte, kann ich somit auch parallel eine andere SciTE-Version öffnen.

    Wie ihr im Code sehen könnt, speichere ich das Fenster-Handle der gestarteten SciTE-Version in einer Temp-Datei. Das ist für die Auswahl hier unerheblich und dient nur meiner weiteren Verwendung, damit ich von anderen Skripten sofort Zugriff mit dem richtigen Handle habe.

    AutoIt: SciTE_Starter.au3
    ;-- TIME_STAMP   2021-04-13 12:01:53   v 0.3
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\..\Users\BugFix\Pictures\ICON\BeOS Icons\BeOS_app_serv.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    Opt('MustDeclareVars', 1)
    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    
    ; ACHTUNG! Die Ini-Datei NICHT per Hand bearbeiten, sondern ausschliesslich über das Programm!
    ; Der 1.te Eintrag MUSS die Standardinstallation sein ("SciTEUser.properties" in "SciTE_USERHOME" >> "C:\Users\<USER>\AppData\Local\AutoIt v3\SciTE" )
    #cs   "SciTE_Starter.ini"    - wird bei erstem Start interaktiv erstellt
    [SciTE4AutoIt]
    name=SciTE4AutoIt v3.7.3
    path=C:\Program Files (x86)\AutoIt3\SciTE
    file=SciTE.exe
    
    [SciTE_5.0_x86]
    name=SciTE 5.0 32bit
    path=C:\CODE\SciTE5.0\SciTE_5.0_x86
    file=SciTE32.exe
    
    [SciTE_5.0_x64]
    name=SciTE 5.0 64bit
    path=C:\CODE\SciTE5.0\SciTE_5.0_x64
    file=SciTE.exe
    #ce
    
    Global $INI = @ScriptDir & '\SciTE_Starter.ini'
    Global $aSciTEVer[1][3] = [[0]]
    Global $aSecNames, $iSel, $iAnswer = 6
    If Not FileExists($INI) Then
        While $iAnswer = 6
            If (Not _FirstSetting()) Then
                $iAnswer = MsgBox(4+32+262144, 'Auswahl SciTE4AutoIt', 'Es wurde keine oder keine SciTE-Datei ausgewählt. Soll die Auswahl jetzt erfolgen?') ; Yes/No+Question.ico+TopMost
            Else
                ExitLoop
            EndIf
        WEnd
    Else
        $aSecNames = IniReadSectionNames($INI)
        For $i = 1 To $aSecNames[0]
            $aSciTEVer[0][0] += 1
            ReDim $aSciTEVer[$aSciTEVer[0][0]+1][3]
            $aSciTEVer[$aSciTEVer[0][0]][0] = IniRead($INI, $aSecNames[$i], 'name', '')
            $aSciTEVer[$aSciTEVer[0][0]][1] = IniRead($INI, $aSecNames[$i], 'path', '')
            $aSciTEVer[$aSciTEVer[0][0]][2] = IniRead($INI, $aSecNames[$i], 'file', '')
        Next
    EndIf
    
    
    ; hier SciTE-Handle speichern für Interaktion durch andere Skripte
    Global $gPathInteract = @TempDir & '\SC_starter.hwnd'
    
    
    Global $hGui = GUICreate('SciTE-Starter', 400, 250)
    Global $list = GUICtrlCreateList('', 10, 40, 380, 170, BitOR($WS_BORDER, $WS_VSCROLL)) ; darf nicht sortiert werden! SciTE4AutoIt muss an Pos. 1 sein.
    Global $hList = GUICtrlGetHandle($list)
    Global $cMenu = GUICtrlCreateContextMenu($list)
    Global $idNew = GUICtrlCreateMenuItem('Eintrag Neu', $cMenu)
    Global $idDelete = GUICtrlCreateMenuItem('Eintrag Löschen', $cMenu)
    Global $showPath = GUICtrlCreateInput('', 10, 220, 380, 20, $ES_READONLY)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, Default, Default, Default, 'Consolas')
    GUICtrlCreateLabel('Einträge bearbeiten mit Kontextmenü', 10, 13, 290)
    Global $start = GUICtrlCreateButton('Start', 310, 10, 80, 24)
    
    _ListSet()
    
    GUISetState()
    
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $list
                $iSel = _GUICtrlListBox_GetCurSel($hList)
                If $iSel = -1 Then
                    GUICtrlSetData($showPath, '')
                Else
                    GUICtrlSetData($showPath, $aSciTEVer[$iSel +1][1] & '\' & $aSciTEVer[$iSel +1][2])
                EndIf
            Case $idNew
                If Not _VerManagement(-1, 'new') Then
                    MsgBox(16+262144, 'FEHLER', 'Keine oder keine SciTE.exe ausgewählt!')
                Else
                    _ListSet()
                EndIf
            Case $idDelete
                $iSel = _GUICtrlListBox_GetCurSel($hList)
                If $iSel = -1 Then
                    MsgBox(16+262144, 'FEHLER', 'Kein Eintrag markiert!')
                Else
                    If $iSel = 0 Then
                        MsgBox(16+262144, 'FEHLER', 'Erster Eintrag muss die installierte SciTE4AutoIt Version sein und darf nicht gelöscht werden!')
                    Else
                        _VerManagement($iSel, 'delete')
                        _ListSet()
                        GUICtrlSetData($showPath, '')
                    EndIf
                EndIf
            Case $start
                $iSel = _GUICtrlListBox_GetCurSel($hList)
                If $iSel = -1 Then
                    MsgBox(16+262144, 'FEHLER', 'Keine Version markiert!')
                Else
                    _SetEnvAndRun($iSel)
                    Exit
                EndIf
        EndSwitch
    WEnd
    
    
    Func _FirstSetting()
        Local $PathFull = FileOpenDialog('SciTE4AutoIt (Die installierte Standardversion)', @ProgramFilesDir, '(*.exe)', 1)
        If @error Or (Not _IsSciTE($PathFull)) Then Return False
        Local $iPos = StringInStr($PathFull, '\', 0, -1)
        Local $File = StringTrimLeft($PathFull, $iPos)
        Local $Path = StringTrimRight($PathFull, StringLen($File)+1)
        Local $Version = FileGetVersion($PathFull)
        Local $Alias = InputBox('Alias', 'Zuweisen eines Alias für diese SciTE Version. (z.B. "SciTE4AutoIt v3.7.3")', StringTrimRight($File, 4) & ' v' & $Version)
        If $Alias = '' Then $Alias = StringTrimRight($File, 4) & ' v' & $Version
        Local $iChoose = 6
        $aSciTEVer[0][0] += 1
        ReDim $aSciTEVer[$aSciTEVer[0][0]+1][3]
        $aSciTEVer[$aSciTEVer[0][0]][0] = $Alias
        $aSciTEVer[$aSciTEVer[0][0]][1] = $Path
        $aSciTEVer[$aSciTEVer[0][0]][2] = $File
        _WriteToIni($Alias, $Path, $File, $Version)
        While $iChoose = 6
            $iChoose = MsgBox(4+32+262144, 'Auswahl SciTE Version', 'Soll eine andere SciTE.exe ausgewählt werden?')
            If $iChoose = 7 Then ExitLoop
            If (Not _VerManagement(-1, 'new')) Then MsgBox(48+4096, 'ACHTUNG', 'Keine oder keine SciTE.exe ausgewählt!')
        WEnd
        Return True
    EndFunc
    
    
    Func _WriteToIni($_Alias, $_Path, $_File, $_Version)
        Local $Section = StringTrimRight($_File, 4) & '_' & $_Version
        IniWrite($INI, $Section, 'name', $_Alias)
        IniWrite($INI, $Section, 'path', $_Path)
        IniWrite($INI, $Section, 'file', $_File)
    EndFunc
    
    
    Func _ListSet()
        _GUICtrlListBox_ResetContent($hList)
        For $i = 1 To $aSciTEVer[0][0]
            _GUICtrlListBox_AddString($hList, $aSciTEVer[$i][0])
        Next
    EndFunc
    
    
    Func _SetEnvAndRun($_i)
        Local Static $UserHomeAu3 = EnvGet('SciTE_USERHOME')
        Local $path = $aSciTEVer[$_i +1][1]
        Local $file = $aSciTEVer[$_i +1][2]
        If $_i > 0 Then                             ; NUR SciTE_HOME belegt: "SciTEGlobal.properties" und "SciTEUser.properties" in diesem Pfad
            EnvSet('SciTE_USERHOME','')
            EnvSet('SciTE_HOME', $path)             ; HIER: Das Verzeichnis, indem sich die SciTE.exe befindet
        Else                                        ; NUR SciTE_USERHOME belegt (Standard): "SciTEUser.properties" in diesem Pfad, "SciTEGlobal.properties" im SciTE-Dir
            EnvSet('SciTE_USERHOME', $UserHomeAu3)  ; Standard: "C:\Users\<USER>\AppData\Local\AutoIt"
            EnvSet('SciTE_HOME', '')
        EndIf
        Local $PID = ShellExecute('"' & $path & '\' & $file & '"', '', '', '', @SW_HIDE)
        Local $hSciTE, $Timer = TimerInit()
        Do
            $hSciTE = _GetSciTEhWndByPID($PID)
            Sleep(20)
        Until $hSciTE <> Null Or TimerDiff($Timer) > 10000
        If $hSciTE = Null Then MsgBox(16+262144, 'FEHLER', '"' & $path & '\' & $file & '"' & @CRLF & 'konnte nicht erfolgreich gestartet werden!')
        Local $fhTmp = FileOpen($gPathInteract, 2+8)  ; Handle speichern für Interaktion durch andere Skripte
        FileWrite($fhTmp, $hSciTE)
        FileClose($fhTmp)
    EndFunc
    
    
    Func _VerManagement($_index, $_mode)
        Switch $_mode
            Case 'new'
                Local $PathFull = FileOpenDialog('Andere SciTE Version', @HomeDrive, '(*.exe)', 1)
                If @error Or (Not _IsSciTE($PathFull)) Then Return False
                Local $iPos = StringInStr($PathFull, '\', 0, -1)
                Local $File = StringTrimLeft($PathFull, $iPos)
                Local $Path = StringTrimRight($PathFull, StringLen($File)+1)
                Local $Version = FileGetVersion($PathFull)
                Local $Alias = InputBox('Alias', 'Zuweisen eines Alias für diese SciTE Version. (z.B. "SciTE4AutoIt v3.7.3")', StringTrimRight($File, 4) & ' v' & $Version)
                If $Alias = '' Then $Alias = StringTrimRight($File, 4) & ' v' & $Version
                $aSciTEVer[0][0] += 1
                ReDim $aSciTEVer[$aSciTEVer[0][0]+1][3]
                $aSciTEVer[$aSciTEVer[0][0]][0] = $Alias
                $aSciTEVer[$aSciTEVer[0][0]][1] = $Path
                $aSciTEVer[$aSciTEVer[0][0]][2] = $File
                _WriteToIni($Alias, $Path, $File, $Version)
                Return True
            Case 'delete'
                If $_index+1 < $aSciTEVer[0][0] Then ; move last entry to index that should removed
                    $aSciTEVer[$_index+1][0] = $aSciTEVer[$aSciTEVer[0][0]][0]
                    $aSciTEVer[$_index+1][1] = $aSciTEVer[$aSciTEVer[0][0]][1]
                    $aSciTEVer[$_index+1][2] = $aSciTEVer[$aSciTEVer[0][0]][2]
                EndIf
                ReDim $aSciTEVer[$aSciTEVer[0][0]][3]
                $aSciTEVer[0][0] -= 1
                $aSecNames = IniReadSectionNames($INI)
                IniDelete($INI, $aSecNames[$_index+1])
        EndSwitch
    EndFunc
    
    
    Func _IsSciTE($_path)
        Local $file = StringTrimLeft($_path, StringInStr($_path, '\', 0, -1))
        Return (StringRegExp($file, '(?i)scite.*\.exe$') = 1)
    EndFunc
    
    
    Func _GetSciTEhWndByPID($_PID)
        Local $aW = WinList("[REGEXPTITLE:(?i)(.*SciTE*.*)]")
        Local $PID
        For $i = 1 To $aW[0][0]
            If $aW[$i][0] = 'SciTE interface' Then ContinueLoop
            $PID = WinGetProcess($aW[$i][0])
            If $PID = $_PID Then Return $aW[$i][1]
        Next
        Return Null
    EndFunc
    Alles anzeigen

    Dateien

    SciTE_Starter.au3 8,3 kB – 327 Downloads
  • Neues Tablet für Kind!

    • BugFix
    • 13. April 2021 um 11:26

    Ich bin da mit AspirinJunkie d'accord.

    Mit 4 zusätzlichen Dateien ist auf dem Fire die Android-Welt über den Playstore verfügbar. Grafik ist (für meinen Geschmack) wirklich super, Akkulaufzeit auch.

    Die Betonung auf "für Kinder" lässt mich etwas ratlos zurück. Was ist denn für Kinder anders als für Erwachsene? "Kindersicher" in Form von begrenzten Zugriffen bekommt man keine Hardware, auf die die Kids physikalisch Zugriff haben. Es ist manchmal erstaunlich, wie schnell die Kleinen eine über Stunden konfigurierte Zugriffsschranke scheinbar spielend aushebeln.

  • Prozedureinsprungpunkt "luaL_register"

    • BugFix
    • 12. April 2021 um 21:09
    Zitat von Professor Bernd

    Muss man für "quiet" os.execute noch irgendwas einstellen?

    Oops, hatte ich vergessen - habe es im Post ergänzt.

    Ich werde mich mal langsam daran machen und eine eigene Version basteln. Wobei ich die originale SciTE-Version von Neil verwenden werde (dann habe ich immer alle aktuellen Möglichkeiten, sowie Neil etwas Neues veröffentlicht). Die erforderliche Umgebung aus Lua Tools stelle ich mir zusammen aus SciTE4AutoIt und SciTE-RU, sowie eigenen Tools.

  • Prozedureinsprungpunkt "luaL_register"

    • BugFix
    • 12. April 2021 um 09:56

    Frage an alle, die die aktuelle SciTE4AutoIt-Version installiert haben:

    Funktioniert dort schon "quiet" os.execute?

    Falls ja, ist zwar auch keine der vorhandenen Dll zu gebrauchen, aber man könnte sich neue schreiben und diese über "os.execute" im Hintergrund aufrufen, gewissermaßen ein "execrequire" (klingt gut, vielleicht behalte ich den Funktionsnamen ;)).

    Um das zu testen, einfach in der SciTEUser.properties mal einfügen:

    Code
    # hatte ich vergessen - diese property muss aktiviert werden
    create.hidden.console=1
    
    command.name.19.*=OS Execute Calc
    command.19.*=dostring do local cmd = 'start "" "calc.exe"' os.execute(cmd) end
    command.mode.19.*=subsystem:lua,savebefore:no
    command.shortcut.19.*=Ctrl+Alt+F5

    command-Nr (hier 19) anpassen, wenn ihr nichts eigenes vergeben habt, könnt ihr beruhigt irgendeinen Wert zwischen 40 und 50 nehmen, die sind dann definitiv noch frei.

    Evtl. noch den Shortcut anpassen, falls bereits genutzt.

    Damit wird dann der Windows-Rechner aufgerufen, mit - oder ohne kurz flashendem CMD-Fenster. Gebt mir dann bitte mal Bescheid.

  • Prozedureinsprungpunkt "luaL_register"

    • BugFix
    • 11. April 2021 um 19:15

    Ich habe keine Ahnung, was "require" intern mit einer Dll veranstaltet. Vermutlich wird die Dll in den Speicher geladen, ihre Funktionen werden ausgelesen und im Globalen Table bereitgestellt.

    Dazu müssen die Dll's irgendeine bestimmte Form aufweisen, von der ich wiederum auch keine Ahnung habe. Ich weiß nur, dass "normale" Dll für Lua im SciTE-Lua nicht geladen werden können.

    Nachbilden in Lua lassen sich viele Funktionen nicht.

    Wie es nun weiter geht....?

  • Prozedureinsprungpunkt "luaL_register"

    • BugFix
    • 11. April 2021 um 17:49
    Zitat von Neil

    I am not planning to work on this area. There are just too many other issues that appear higher priority to me.

    Damit ist alles gesagt. X/

  • SciTE - Toggle Block Comment -- NEU!! ​​ Zum Aufheben eines Kommentarblocks ist keinerlei Markierung notwendig!

    • BugFix
    • 10. April 2021 um 15:12

    Neue Version: v0.9  hier.

    - Soll für box.middle ein TAB gewünscht sein, einfach @Tab verwenden. Das wird im Skript dann umgesetzt. Die alternative Property ist somit hinfällig.

    - Die extra Behandlung für Leerzeilen am Beginn/Ende der Markierung (behalten oder nicht) habe ich entfernt. Ein Kommentarblock beginnt direkt vor der ersten und direkt nach der letzten Zeile mit Inhalt in der Markierung.

    Bitnugger Pythons Multikommentar war noch nicht auf meinem Plan. :whistling:

  • Prozedureinsprungpunkt "luaL_register"

    • BugFix
    • 10. April 2021 um 10:31

    Ich habe das Thema nochmals angesprochen: https://groups.google.com/g/scite-intere…/m/fONuGUE0BwAJ

  • Suche About-Dialog mit Credits-Bereich

    • BugFix
    • 5. April 2021 um 17:11

    Für den Abspann kann ich die Marquee UDF ("Vertical Scroll Up Marquee") von Melba23 empfehlen.

  • Umgebungsvariablen

    • BugFix
    • 3. April 2021 um 13:15
    Zitat von chesstiger

    Dass du das nur im aktuellen Kontext setzen musst, hab ich doch in dem Vorgängerthread schon gesagt. ^^

    RE: Installation mehrerer SciTE-Versionen

    Hab Nachsicht mit mir, im Alter lassen die kognitiven Fähigkeiten doch spürbar nach. :rofl:

  • Explorer Neustart

    • BugFix
    • 2. April 2021 um 18:06
    Zitat von DOheim

    Was kann ich tun? Bzw. was mache ich falsch?

    Es ist nicht unbedingt sinnvoll eine Batch mit AutoIt aufzurufen, da du auch alles direkt über AutoIt abwickeln kannst.

    Schau mal, ob dir das weiterhilft: Restarting explorer

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™