- Offizieller Beitrag
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).
-- 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).
----------------------------------------------------------------------------------------- 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