Habe die Funktion jetzt noch ergänzt - s. Post #1
Beiträge von BugFix
-
-
ja das sag ich ja, ich möchte in Excel die Tabelle erstellen und dann als Bilddatei in meinem gui anzeigen.
Verwende doch ExcelEmbedded. Dazu findest du hier im Forum Bsp.
Ist doch Quatsch, die Grafik in Excel zu erstellen und dann ein Bild davon!! in die GUI einzubinden.
Dann kannst du auch mit GDI+ die Grafik zeichnen.
Möglichkeiten wurden dir aufgezeigt. Umsetzen solltest du dann auch mal selber was. Wenn du dabei auf Probleme stößt, kannst du dich gerne wieder melden.NB: Es gibt sowohl hier, als auch im EN-Forum fertige UDF für derartige Probleme.
Hier ein paar Links zur Anregung:
Bsp: Diagramm in Excel mit AutoIt
Statistics.au3
Balkendiagramme
Living Graph
Funktionsplotter -
wenn ich sie mir in eine Excel Tabelle umkopiere
Dann kannst du auch gleich die internen Grafikfunktionen von Excel nutzen um dein Diagramm darzustellen. Ist auch weniger aufwändig als per GDI+ zu zeichnen.
-
Im SciTeStartup.lua funktioniert LoadLuaFile("ShowHexColorFromCursor.lua") nicht.
Im Skriptheader steht doch die Anweisung, wie du vorgehen musst.
Einträge in der SciTEUser.properties.Code# 13 Show HexColor --- 13 ist nur ein Bsp., es kann jede andere freie Nummer verwendet werden command.name.13.*.au3=Show Color From Cursor command.13.*.au3=dofile $(Lua.User.Scripts.Path)/ShowHexColorFromCursor.lua # oder: command.13.*.au3=dofile C:/Dein_Pfad/ShowHexColorFromCursor.lua command.mode.13.*.au3=subsystem:lua command.shortcut.13.*.au3=Ctrl+Shift+F11 -
Leute - Bitte!
Seit Post #10 ist das Thema für den TE erledigt. Wenn also noch weiterführende Grundsatzdiskussionen geplant sind, bitte nach OT oder in den PN-Bereich verschieben.
Danke. -
Hi,
kennt ihr sicher alle: Im Skript sind einige Farben. Nach einiger Zeit guckt ihr rein, habt auch anhand der Werte eine grobe Vorstellung ob Richtung blau oder rot, aber gerne würde man schon genau sehen, was man da für Werte gesetzt hat.
Das folgende Lua-Skript setzt bei Aufruf einen leeren Calltip über den Hexwert, indem der Cursor steht. Der Hintergrund des Calltipps ist in der Farbe des Hexwertes eingefärbt.EDIT: Jetzt zusätzlich auch Erkennung von Html-Hex-Farbcode "#12AB34"
EDIT-2: Es ist besser, die Funktion nicht an au3-Code zu koppeln. Dann kann man z.B. auch die Farbwerte in den Farbschemata der .properties ansehen.
Dazu in allen Einträgen ändern von command.13.*.au3=... zu command.13.*=...EDIT-3: Mir ist eingefallen, dass man öfter mal testen möchte, wie ein bestimmte Schriftfarbe auf einem farbigen Hintergrund aussieht. Dazu habe ich jetzt dieses Skript ergänzt und eine weitere Funktion PreviewBackForeColor erstellt.
Diese Funktion sucht aus der Zeile, in der der Cursor steht, die ersten 2 Hex-Farbwerte und wertet diese als Backcolor und ForeColor. Man kann die Funktion auch mit einem Bool-Flag = true aufrufen (Standard false), dann wird die erste Farbe als ForeColor und die zweite als BackColor interpretiert. Wird nur eine Farbe gefunden, wird diese als Standard für BackColor, mit Flag für ForeColor verwendet. Die fehlende ForeColor wäre dann standardmäßig schwarz und mit Flag die fehlende BackColor die Standard GUI-Hintergrundfarbe (0xF0F0F0).EDIT-4 [2018-01-11]: Jetzt lassen sich auch die Farben von Farb-Variablen anzeigen, sofern diese im Skript oder in einem in diesem Skript aufgeführten Include zugewiesen werden. Eine rekursive Suche nach Include im Include erfolgt aber nicht! Nur im Skript aufgeführte Dateien werden auch durchsucht.
Die Zuweisungen müssen jeweils in einer Zeile erfolgen.
ACHTUNG: Es wird nicht auf Kommentarzeile geprüft, die erste Zuweisung im Skript wird ausgelesen, auch wenn sie innerhalb eines Kommentars steht!Die Zuweisung selbst darf keine Variablen enthalten. Danach zu suchen wäre nicht realisierbar (z.B. wenn eine Variable aus einer INI-Datei befüllt wird, oder mit einem anderen Wert, der erst zur Laufzeit des Skripts entsteht.)
Zuweisungen können aber auch durch Funktionen (aus dem Skript oder den Includes) erfolgen (s. Bsp. von Bitnugger hier), sofern die Funktionen nicht mit Variablen aufgerufen werden.
Zur Zuweisungssuche in den Includes, ist ein Eintrag in SciTEUser.properties erforderlich, ansonsten werden nur Zuweisungen im Skript berücksichtigt.
Get.Color.Assignment.Includes=1
Nachtrag:
Das Problem mit den Func-Calltips konnte ich nun lösen. Version 0.5
EDIT-5 [2018-01-12]: Ich habe nochmal ordentlich dran geschraubt. Zum Überwachen von Maus und Tastatur (löst Verschwinden des Calltips aus) hatte ich eine Klassenfunktion benötigt. In diese habe ich jetzt alle anderen Funktionen integriert. Im Ablauf habe ich noch Einiges optimiert, deshalb ist es auch erforderlich, das Skript vor dem Aufruf zu Speichern, bzw. im Aufruf "savebefore:yes" zu hinterlegen. Siehe Installationsanweisung im Skript.
• Jetzt werden Zuweisungen in Kommentarzeilen oder -blöcken ignoriert.
• Ein Fehler war noch enthalten beim Lesen von Includes mit kpl. oder relativer Pfadangabe. Ist jetzt gefixed.
• Das Suchen nach Zuweisungen in Includes ist jetzt standardmäßig aktiviert. Nur wer das nicht möchte muss den Eintrag anlegen
Get.Color.Assignment.Includes=0
• Die Standardeinstellungen für Calltips werden gespeichert (dafür gibt es eine Property, die vermutlich kaum jemand nutzt) und nach jedem Color-Calltip wiederhergestellt
aktuelle Version: v0.6
EDIT-6 [2018-01-13]: Bug bei Includes für das temporäre au3-Skript gefixed.
EDIT-7 [2018-01-16]: Noch eine kleine Änderung:
Sind im Skript Includes auskommentiert, werden diese jetzt nicht mehr berücksichtigt. Ansonsten habe ich das Skript nochmals etwas umgebaut, hat aber keinen Einfluß auf die Funktionalität, ich wollte es nur "schöner" haben.

Wenn ihr also mit der v0.7 zufrieden seid, ist die Installation der v0.8 nicht zwingend.
EDIT-8 [2018-02-20]: In der v0.8 war noch ein Fehler bei der Erkennung von Variablen aus einem Include im Skriptverzeichnis.
aktuelle Version: v0.9
EDIT-9 [2018-02-22]:
Fixed: Unerwartetes Verhalten, wenn bei Funktionsaufruf Cursor nicht in einem Hexwert steht
Added: Erkennen von Hex-Werten ab Länge 1 Hex-Zeichen
Added: Statt Standardverhalten zum Ausblenden des Calltip kann mit [Zeile 75] local bCALLTIP_END_ANYKEY = true der Tip bei jedem Tastendruck/ jeder Mausbewegung sofort ausgeblendet werden.
aktuelle Version: v0.10
Damit die Funktionen aus einem Skript geladen werden können, muss die Einbindung so erfolgen:
Code
Alles anzeigenDatei abspeichern. Als erstes einen Eintrag in der SciTEStartup.lua erstellen: LoadLuaFile("ShowHexColorFromCursor.lua", "C:\\Dein Pfad\\mit Backslash\\") !! doppelten Backslash beachten !! Jetzt die Einträge in der SciTEUser.properties vornehmen: # 13 Show HexColor command.name.13.*=Show Color From Cursor command.13.*=dostring ShowHexColorFromCursor() command.mode.13.*=subsystem:lua,savebefore:yes command.shortcut.13.*=Ctrl+Shift+F11 # 11 Preview Back and Fore Color / first color value is back color command.name.11.*.au3=Preview Back and Fore Color command.11.*.au3=dostring PreviewBackForeColor() command.mode.11.*.au3=subsystem:lua,savebefore:yes command.shortcut.11.*.au3=Ctrl+Shift+F12 # 16 Preview Fore and Back Color / first color value is fore color command.name.16.*.au3=Preview Fore and Back Color command.16.*.au3=dostring PreviewBackForeColor(true) command.mode.16.*.au3=subsystem:lua,savebefore:yes command.shortcut.16.*.au3=Ctrl+Alt+F12
Hier das aktuelle Skript:Bash: ShowHexColorFromCursor.lua v0.10
Alles anzeigen-- TIME_STAMP 2018-02-22 10:26:36 v 0.10 local bDEBUG = false -- set "true" to get debug output local bCALLTIP_END_ANYKEY = false -- set "true" to cancel the calltip with any key or mouse move ------------------------------------------------------------ list object to manipulate simple tables local objList = { list = {}, delall = function(self) self.list = {} return self end, addonce = function(self, _val, _casesense) -- return true, if added local exists = function(_val, _casesense) for k in pairs(self.list) do if _casesense then if self.list[k] == _val then return true end else if tostring(self.list[k]):upper() == tostring(_val):upper() then return true end end end return false end if not exists(_val, _casesense) then table.insert(self.list, _val) return true end return nil end, new = function(self, _obj) _obj = _obj or {} setmetatable(_obj, self) self.__index = self return _obj end } --------------------------------------------------------------------------------------- /object list --------------------------------------------------------------------------------------- object color local objColor = { --------------------------------------------- variable will un/set if color-calltip is not/shown colortip_show = false, --------------------------------- user can disable search inside include files, default: enabled search_in_includes = true, ------------------------------------------------------------------- the default calltip position calltips_pos_def = false, ------------------------------------------------------------ the default calltip highlight color calltips_colorhlt_def = 0x0000FF, -- BGR (red) ---------------------------------------------------------- list with include storage directories lInclPathes = objList:new(), -------------------------------------------------- list/string with includes from current buffer lIncl = objList:new(), sIncl = '', ---------------------------------------------------------------------------------------- pattern pattHex = '()0x([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])', pattHex2 = '[0-9a-fA-F][0-9a-fA-F]', pattHexN = '0-[x#]([0-9a-fA-F]+)', pattHexEnd = '0x[0-9a-fA-F]+()', pattCS1 = '^#[Cc][Oo][Mm][Mm][Ee][Nn][Tt][Ss]%-[Ss][Tt][Aa][Rr][Tt]', pattCE1 = '^#[Cc][Oo][Mm][Mm][Ee][Nn][Tt][Ss]%-[Ee][Nn][Dd]', pattCS2 = '^#[Cc][Ss]', pattCE2 = '^#[Cc][Ee]', pattComment = '^%s*;', ----------------------------------------------------------------------------------------- pathes sPathGetColorAU3, sFileResult, TEMPDIR = props['SciteUserHome']..'\\..\\..\\Temp', sAU3exe = props['SciteDefaultHome']..'\\..\\AutoIt3.exe', ------------------------------------------------------------------------------------------------ ------------------------------------------------------------ set calltip values back to defaults SetCalltipsDefault = function(self) self.colortip_show = false scite.SendEditor(SCI_CALLTIPSETBACK, 0xFFFFFF) scite.SendEditor(SCI_CALLTIPSETFOREHLT, self.calltips_colorhlt_def) scite.SendEditor(SCI_CALLTIPSETPOSITION, self.calltips_pos_def) if bDEBUG then output:AppendText('> DEBUG: Calltips set to defaults') end end, ---------------------------------------------------------------------------- /SetCalltipsDefault ------------------------------------------------------------------------------ initialize values Startup = function(self) if props['Get.Color.Assignment.Includes'] == '0' then self.search_in_includes = false end if tonumber(props['calltips.set.above']) == 1 then self.calltips_pos_def = true end if props['calltips.color.highlight'] ~= '' then local colorhlt_user = myCallTips:BGR2Decimal(props['calltips.color.highlight']) if colorhlt_user ~= nil then self.calltips_colorhlt_def = colorhlt_user end end local sProp = props['openpath.$(au3)'] for w in sProp:gmatch('([^;]+)') do self.lInclPathes:addonce(w) end self.sPathGetColorAU3 = self.TEMPDIR..'\\ExecLineGetColor.au3' self.sFileResult = self.TEMPDIR..'\\ExecLineColor.txt' end, --------------------------------------------------------------------------------------- /Startup -------- check for comment line/block. Return "true/false, 0/1/-1" (0=comment line/1=#cs/-1=#ce) -- returned number for de/increase comment counter CheckComment = function(self, _s) local iMatch = _s:find(self.pattComment) if iMatch ~= nil then return true, 0 end iMatch = _s:find(self.pattCS1) or _s:find(self.pattCS2) if iMatch ~= nil then return true, 1 end iMatch = _s:find(self.pattCE1) or _s:find(self.pattCE2) if iMatch ~= nil then return true, -1 end return false, 0 end, ------------------------------------------------------------------------------------------------ --------------------------------------------------------- read include files from current buffer IncludesFromBuffer = function(self) local sText, boolCmnt, countCmnt, n, incl = editor:GetText(), false, 0 self.lIncl:delall() self.sIncl = '' for line in sText:gmatch('([^\r\n]+)') do boolCmnt, n = self:CheckComment(line) if boolCmnt then countCmnt = countCmnt + (n) end if not boolCmnt and countCmnt == 0 then -- none comment line or block -- #include <abc.au3> incl = line:match("#[iI][nN][cC][lL][uU][dD][eE]%s-<([%w%s_.]+)>") if incl ~= nil then if self.lIncl:addonce(incl) then self.sIncl = self.sIncl..'#include <'..incl..'>\n' if bDEBUG then output:AppendText('> DEBUG: IncludesFromBuffer.Add "#include <'..incl..'>"\n') end end else -- #include 'abc.au3' or #include "abc.au3" _, incl = line:match("#[iI][nN][cC][lL][uU][dD][eE]%s-([\"'])([%w%s_.:\\]+)%1") if incl ~= nil then if incl:sub(1,1) == '\\' then incl = incl:sub(2,-1) end if self.lIncl:addonce(incl) then if incl:sub(2,2) == ':' then self.sIncl = self.sIncl..'#include "'..incl..'"\n' if bDEBUG then output:AppendText('> DEBUG: IncludesFromBuffer.Add "#include '.."'"..incl.."'"..'"\n') end else self.sIncl = self.sIncl..'#include "'..props['FileDir']..'\\'..incl..'"\n' if bDEBUG then output:AppendText('> DEBUG: IncludesFromBuffer.Add "#include '.."'"..props['FileDir']..'\\'..incl.."'"..'"\n') end end end end end end end end, ---------------------------------------------------------------------------- /IncludesFromBuffer ------------------------------------------ create the au3 file for executing the assignment line CreateAU3 = function(self, _sLineAssignment) local sTextAU3 = self.sIncl.. 'Global $sFileExport = @TempDir & "\\ExecLineColor.txt"\n'.. 'FileDelete($sFileExport)\n'.. 'Global $sLine = "'.._sLineAssignment..'" ; line: $Variable = assignment\n'.. 'If $sLine = "NONE" Then Exit\n'.. 'Global $sExec = StringTrimLeft($sLine, StringInStr($sLine, "="))\n'.. 'Global $sColor = "0x" & Hex(Execute($sExec), 6)\n'.. 'If Not StringRegExp($sColor, "^0x[0-9A-F]{6}$") Then Exit\n'.. 'FileWrite($sFileExport, $sColor)\n' local fH = io.open(self.sPathGetColorAU3, 'w+') fH:write(sTextAU3) fH:close() end, ------------------------------------------------------------------------------------- /CreateAU3 --------------------------------- check, if file containing the assignment for selected variable FindAssignment = function(self, _path, _sSelection) local fH = io.open(_path) if fH ~= nil then local sRead, boolCmnt, countCmnt, n = fH:read('*all'), false, 0 fH:close() for line in sRead:gmatch('([^\r\n]+)') do boolCmnt, n = self:CheckComment(line) if boolCmnt then countCmnt = countCmnt + (n) end if not boolCmnt and countCmnt == 0 then -- none comment line or block if line:find(_sSelection..'%s*=') then if bDEBUG then output:AppendText('> DEBUG: Assignment line "'..line..'"\n') end return line end end end end return nil end, -------------------------------------------------------------------------------- /FindAssignment -------------------------------------------------------------------- detects color from variable GetColorValueFromVariable = function(self, _sSelection, _iCursor, _var_beginPos, _var_endPos, _fBGR) local sLine = self:FindAssignment(props['FilePath'], _sSelection) if sLine == nil then -- search inside include files -- do it not, if the user has disabled: "Get.Color.Assignment.Includes=0" (default = 1 - enabled) if self.search_in_includes then self:IncludesFromBuffer() -- get include files if #self.lIncl.list ~= 0 then -- open each include file, search line with assignment "_sSelection =" for i=1, #self.lIncl.list do if self.lIncl.list[i]:sub(2,2) == ':' then -- include has full path, search only in this file sLine = self:FindAssignment(self.lIncl.list[i], _sSelection) if bDEBUG then output:AppendText('> DEBUG: Search "'.._sSelection..'" in "'..self.lIncl.list[i]..'" --> '..tostring(sLine ~= nil)..'\n') end end if sLine == nil and self.lIncl.list[i]:find('\\') then -- include has partial path, check first if exist in @ScriptDir sLine = self:FindAssignment(props['FileDir']..'\\'..self.lIncl.list[i], _sSelection) if bDEBUG then output:AppendText('> DEBUG: Search "'.._sSelection..'" in "'..props['FileDir']..'\\'..self.lIncl.list[i]..'" --> '..tostring(sLine ~= nil)..'\n') end end if sLine == nil then -- include has filename only (or partial path), -- .. concanate all directories with this for searching for j=1, #self.lInclPathes.list do sLine = self:FindAssignment(self.lInclPathes.list[j]..'\\'..self.lIncl.list[i], _sSelection) if bDEBUG then output:AppendText('> DEBUG: Search "'.._sSelection..'" in "'..self.lInclPathes.list[j]..'\\'..self.lIncl.list[i]..'" --> '..tostring(sLine ~= nil)..'\n') end if sLine == nil then sLine = self:FindAssignment(props['FileDir']..'\\'..self.lIncl.list[i], _sSelection) if bDEBUG then output:AppendText('> DEBUG: Search "'.._sSelection..'" in "'..props['FileDir']..'\\'..self.lIncl.list[i]..'" --> '..tostring(sLine ~= nil)..'\n') end end if sLine ~= nil then break end end end end end end end if sLine == nil then sLine = 'NONE' else -- trim characters right from assignment sLine = sLine:sub(1,sLine:match(self.pattHexEnd)) end if bDEBUG then output:AppendText('> DEBUG: Search "'.._sSelection..'" \n> DEBUG: Result "'..sLine..'"\n') end -- create the au3-file for executing the assignment line, with 'NONE' - the last result file will delete self:CreateAU3(sLine) -- run the au3-file local sCmd = '"'..self.sAU3exe..'" /AutoIt3ExecuteScript "'..self.sPathGetColorAU3..'"'..' "'..sLine..'"' if shell then shell.exec(sCmd, nil, true, true) else os.execute('start "" '..sCmd) end -- check for result local fH = io.open(self.sFileResult) if fH == nil then scite.SendEditor(SCI_CALLTIPSHOW, _var_beginPos +1, (' NONE COLOR ASSIGNED! ')) scite.SendEditor(SCI_CALLTIPSETHLT, 0, 22) scite.SendEditor(SCI_CALLTIPSETBACK, 0x33FFFF) scite.SendEditor(SCI_CALLTIPSETFOREHLT, 0x0000FF) scite.SendEditor(SCI_CALLTIPSETPOSITION, true) if bDEBUG then output:AppendText('> DEBUG: Set Calltip "'.._sSelection..'" --> "NONE COLOR ASSIGNED!"\n') end else local sValue = fH:read() fH:close() local R,G,B = sValue:match('('..self.pattHex2..')('..self.pattHex2..')('..self.pattHex2..')$') local iLen = _var_endPos - _var_beginPos -1 scite.SendEditor(SCI_CALLTIPSHOW, _var_beginPos +1, (' '):rep(iLen)) scite.SendEditor(SCI_CALLTIPSETHLT, 0, iLen) scite.SendEditor(SCI_CALLTIPSETPOSITION, true) if _fBGR == true then scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', R,G,B))) if bDEBUG then output:AppendText('> DEBUG: Set Calltip BGR "'.._sSelection..'" --> "'..string.format('0x%s%s%s', R,G,B)..'"\n') end else scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', B,G,R))) if bDEBUG then output:AppendText('> DEBUG: Set Calltip RGB "'.._sSelection..'" --> "'..string.format('0x%s%s%s', B,G,R)..'"\n') end end end self.colortip_show = true editor:SetSelection(_iCursor, _iCursor) end, --------------------------------------------------------------------- /GetColorValueFromVariable ----------------------------------------- grabs the color value or variable from cursor position FromCursor = function(self, _fBGR) local function isHexChar(_asc) local sChar = string.char(_asc) if sChar:find('[#x0-9a-fA-F]') then return true else return false end end local cursor = editor.CurrentPos -- check if cursor is possible inside a variable local var_beginPos, var_endPos = cursor if string.char(editor.CharAt[cursor]) ~= '$' then -- cursor is inside or behind the variable (if its a variable) editor:WordLeft() -- skip to the left end var_beginPos = editor.CurrentPos -- is it a variable? if string.char(editor.CharAt[var_beginPos]) == '$' then -- now the cursor is in front of variable editor:WordRight() var_endPos = editor.CurrentPos editor:SetSelection(var_beginPos, var_endPos) local sSelection = editor:GetSelText() local iLenSel = sSelection:len() -- trim spaces on right site, if any sSelection = sSelection:gsub('%s+$','') var_endPos = var_endPos - (iLenSel - sSelection:len()) if bDEBUG then output:AppendText('> DEBUG: Cursor on variable "'..sSelection..'"\n') end return self:GetColorValueFromVariable(sSelection, cursor, var_beginPos, var_endPos, _fBGR) end -- cursor inside hex value? local beginPos, endPos = cursor, cursor while isHexChar(editor.CharAt[beginPos-1]) do beginPos = beginPos - 1 end while isHexChar(editor.CharAt[endPos]) do endPos = endPos + 1 end if beginPos ~= endPos then if beginPos > endPos then editor:SetSelection(endPos, beginPos) else editor:SetSelection(beginPos, endPos) end local sMatch = tostring(editor:GetSelText()):match(self.pattHexN) if sMatch == nil then return editor:SetSelection(cursor, cursor) end local sHex6 = '0x'..('0'):rep(6-sMatch:len())..sMatch local iLen = sMatch:len() +2 local R,G,B = tostring(sHex6):match('('..self.pattHex2..')('..self.pattHex2..')('..self.pattHex2..')$') if bDEBUG then output:AppendText('> DEBUG: Cursor on hex value\n') end editor:SetSelection(cursor, cursor) scite.SendEditor(SCI_CALLTIPSHOW, beginPos+1, (' '):rep(iLen-1)) scite.SendEditor(SCI_CALLTIPSETHLT, 0, iLen-1) scite.SendEditor(SCI_CALLTIPSETPOSITION, true) if _fBGR == true then scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', R,G,B))) if bDEBUG then output:AppendText('> DEBUG: Set Calltip BGR hex value --> "'..string.format('0x%s%s%s', R,G,B)..'"\n') end else scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', B,G,R))) if bDEBUG then output:AppendText('> DEBUG: Set Calltip RGB hex value --> "'..string.format('0x%s%s%s', B,G,R)..'"\n') end end self.colortip_show = true else editor:SetSelection(cursor, cursor) end end, ------------------------------------------------------------------------------------ /FromCursor ----------------------------------------------------------------------- show back and fore color PreviewBackForeColor = function(self, _fFore1st) local iBackCol, iForeCol = 0xF0F0F0, 0x000000 local cursor = editor.CurrentPos local sLine, iColumn = editor:GetCurLine() local iLineStartPos = cursor - iColumn local tMatch, beginPos = {}, nil for s, r, g, b in sLine:gmatch(self.pattHex) do if beginPos == nil then beginPos = s end local t = {} t['R']=r t['G']=g t['B']=b table.insert(tMatch, t) end if #tMatch == 0 then if bDEBUG then output:AppendText('> DEBUG: Search back/fore color --> "FAILED"\n') end return elseif #tMatch == 1 then if _fFore1st == true then iForeCol = tonumber(string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)) if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "ForeColor" --> "'..string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)..'"\n') end else iBackCol = tonumber(string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)) if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "BackColor" --> "'..string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)..'"\n') end end else if _fFore1st == true then iForeCol = tonumber(string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)) iBackCol = tonumber(string.format('0x%s%s%s', tMatch[2].B, tMatch[2].G, tMatch[2].R)) if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "ForeColor" --> "'..string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)..'"\n') end if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "BackColor" --> "'..string.format('0x%s%s%s', tMatch[2].B, tMatch[2].G, tMatch[2].R)..'"\n') end else iForeCol = tonumber(string.format('0x%s%s%s', tMatch[2].B, tMatch[2].G, tMatch[2].R)) iBackCol = tonumber(string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)) if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "ForeColor" --> "'..string.format('0x%s%s%s', tMatch[2].B, tMatch[2].G, tMatch[2].R)..'"\n') end if bDEBUG then output:AppendText('> DEBUG: Search back/fore color "BackColor" --> "'..string.format('0x%s%s%s', tMatch[1].B, tMatch[1].G, tMatch[1].R)..'"\n') end end end if bDEBUG then output:AppendText('> DEBUG: Set calltip back/fore color\n') end scite.SendEditor(SCI_CALLTIPSHOW, iLineStartPos + beginPos, ' FORE-COLOR ') scite.SendEditor(SCI_CALLTIPSETHLT, 0, 12) scite.SendEditor(SCI_CALLTIPSETBACK, iBackCol) scite.SendEditor(SCI_CALLTIPSETFOREHLT, iForeCol) self.colortip_show = true end -------------------------------------------------------------------------- /PreviewBackForeColor } -------------------------------------------------------------------------------------- /object color ---------------------------------------------------------------------------------- region EventClass ShowColorEvt = EventClass:new(Common) function ShowColorEvt:OnKey() if objColor.colortip_show then if bCALLTIP_END_ANYKEY then scite.SendEditor(SCI_CALLTIPCANCEL) end objColor:SetCalltipsDefault() end end function ShowColorEvt:OnDwellStart() if objColor.colortip_show then if bCALLTIP_END_ANYKEY then scite.SendEditor(SCI_CALLTIPCANCEL) end objColor:SetCalltipsDefault() end end --------------------------------------------------------------------------------- /region EventClass -------------------------------------------------------------------------- function call redirection function ShowHexColorFromCursor(_fBGR) objColor:FromCursor(_fBGR) end --> ShowHexColorFromCursor function PreviewBackForeColor(_fFore1st) objColor:PreviewBackForeColor(_fFore1st) end --> PreviewBackForeColor ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- run startup objColor:Startup() ----------------------------------------------------------------------------------------------------So schaut es aus:


!! -- NEU -- !!
-
Zu einer möglichen Reparatur:
- Je nach Modell sind gebrauchte Displays teilweise schon im Bereich von 30 - 60 EUR erhältlich (neu oft 200 - 300). Display tauschen ist von allen Reperaturen auch das Unproblematischste
- Input Stromzufuhr: Wenn es DC-IN-Jack Kabel ist, ist der Wechsel auch unproblematisch (Materialpreis zw. 8 und 15 EUR). Ist der DC-IN-Jack auf die Platine aufgelötet, gilt dasselbe wie für USB- und Kopfhöreranschluss -- Löten auf dem Board ist Glückssache. Bei meinem eigenen Rechner mache ich sowas, da ich dann ja selbst für die Folgen verantwortlich bin. Der hier zu empfehlende Weg: suchen, ob man ein gebrauchtes MB bekommt, Prozessor kann man ja noch vom eigenen nehmen, somit sind vermutlich gebrauchte Boards (kenne dein Modell nicht) mit einem Preis von 60 EUR zu veranschlagen.
Mit ein bischen Glück bei Gebrauchtteilen, könntest du deinen Laptop für etwa 100 EUR aufpäppeln. Das wäre ein reiner Komponententausch, der auch keiner Fachkenntnisse bedarf. Bleibt aber ein gebrauchter, bei dem man auch jederzeit dann mit dem Ausstieg von Komponenten rechnen darf.
Du mußt nur für dich abwägen, ob du in das Teil nochmal Geld investieren möchtest. Je nachdem, in welchem Verhältnis der Investitionsaufwand beider Varianten am Ende aussieht.Ich hab selbst vor 3+ Jahren nen Laptop (war nen Vaio) bekommen... Das Rendern dauerte ewig
Wenn man einen Laptop als Hauptrechner verwendet, sollte man großzügig dimensionieren. Bekanntermaßen ist ein späteres Aufrüsten "etwas" schwierig.
Mein Vaio ist auch schon über 3 Jahre alt, aber mit seinem i5-Doppelkern 2,4GHz, 8 GB RAM, SSD, 64-Bit System kann er nach wie vor mithalten.
-
Spontan würde ich so vorgehen:
- Handle der Original-Scrollbar holen
- Infos auslesen ( _GUIScrollBars_GetScrollInfo )
- eigene Scrollbar basteln und über die originale legen
- Msg für Änderungen der eigenen Bar registrieren
- in registrierter Funktion die Änderungen an die originale Scrollbar weiterleitenVielleicht kannst du auch die Fläche der original Scrollbar direkt mit Ownerdraw manipulieren. Schau dir mal die Strukturen zu den Scrollbars an, ob irgendwo Farbwerte mit auftauchen.
-
Na dann durchsuche C:\ rekursiv. Aber nicht, indem du direkt C:\ angibst (da wird sich dein Rechner wahrscheinlich wegen der Rekursionstiefe aufhängen), sondern liste C:\ in ein Array und starte von den Ergebnissen die rekursive Suche.
Oder liegt dein Problem an der rekursiven Suche? Da findest du diverse Lösungen hier im Forum.
-
Nun, wenn die exe läuft ist es ja kein Problem. Falls nicht solltest du erst mal sondieren, wo diese gepeichert sein kann, anhand der User-Rechte. Deine User werden wohl kaum die Rechte haben im Programm- oder Systemordner zu schreiben.
Somit würde ich erst mal eine Auflistung nur vom Rootpfad erstellen. Von den gefundenen Ordnern die eben benannten ausschliessen. Auch den Benutzerordner würde ich erst mal aussen vorlassen. Was übrig ist, kannst du nun rekursiv durchsuchen. Sollte das nix bringen musst du wohl oder übel den Benutzerordner durchsuchen. Lass dort aber bitte \AppData aussen vor - da liegen einige GB Daten und da dieser Ordner normalerweise nicht sichtbar ist, ist es auch unwahrscheinlich, dass die exe dort gelandet ist.
Viel Erfolg. -
Es gibt auch die Option mit regulären Ausdrücken zu arbeiten. Bei großen Dateien kann das durchaus schneller gehen. Ich habe hier mal eine Bsp-Funktion erstellt, die für mehrfache Suchen konzipiert ist, den Text aber nur einmal lesen muss.
"test.txt"
Codeirgendwas nochwas was-anderes suchwort folgezeile_1 folgezeile_2 suche_2 usw wieder-folgezeile_2AutoIt
Alles anzeigenConsoleWrite(_getIt('suchwort', 'test.txt') & @CRLF) ConsoleWrite(_getIt('suche_2') & @CRLF) Func _getIt($sSearch, $sPath='') Local Static $sRead = '' $sRead = $sPath <> '' ? FileRead($sPath) : $sRead If $sRead = '' Then Return SetError(1,0,0) Local $aMetaChar[] = ['\', '.', '^', ', '|', '[', '(', '{', '*', '+', '?', '#'] ; Metazeichen escapen For $i = 0 To UBound($aMetaChar) -1 If StringInStr($sSearch, $aMetaChar[$i]) Then $sSearch = StringReplace($sSearch, $aMetaChar[$i], '\' & $aMetaChar[$i]) Next Return StringRegExp($sRead, $sSearch & '\n[^\n]*\n([^\n]*)', 3)[0] EndFuncEDIT: @Bernd oder @Gun-Food
Jungs, falls jemand zufällig hier liest.
BITTE bringt den Syntaxhighlighter in Ordnung - das ist doch eine Katastrophe. -
Du mußt natürlich die Werte aus den Usereingaben lesen (GuiCtrlRead) und den Arraypositionen zuweisen. Im Moment weist du nur die Ctrl-ID's zu.
Schau einfach mal in mein Array-Tut (s. Signatur), wenn du mit Arrays noch Schwierigkeiten hast. -
Der einfachste Weg m.M.: konvertieren in PDF - da hast du keine Druckprobleme. Ich verwende calibre als eBook-Manager. Das bietet das Konvertieren in diverse Formate mit an. Ein DRM wäer allerdings ein (überwindbares) Hindernis.
-
Wenn ich es nicht ganz furchtbar falsch verstanden habe, sollte er mir doch jetzt in die Console irgendwas schreiben für die Variable $prog_Excel.
Das hast du dann leider falsch verstanden. Es wird eine Objektvariable erstellt und diese kannst du nicht in die Konsole schreiben.
Prüfe einfach mal mit:
If IsObj($prog_Excel) Then ConsoleWrite('Excel-Objekt existiert' & @LF)
Und wenn du eine Datei öffen möchtest, ist es doch sinnvoll deren Pfad beim Erstellen des Excelobjektes mit anzugeben. Dann sparst du dir den extra Schritt über _Excel_BookOpen (wenn ich nicht irre). -
Ok, wäre es da vielleicht sinnvoller eine "eigene" TabView zu bauen?
Gibt es hier im Forum. Such mal nach Funkey's OwnTab-UDF.
-
Sinngemäß: Shellexecute ("@LogonServer\netlogon\druckert\dr.Ink") nur geht das nicht wie ich mir das Vorstelle.
Wie stellst du es dir denn vor?
Und was bekommst du stattdessen? -
Das erledigt man mit einem Hook. Bsp. dazu findest du im Forum.
-
Evtl. hat einer von euch einen guten Ansatz?
Pooh, da gibt es sicher unzählige Varianten, von einfach bis extrem kompliziert
Ich würde nicht das Array hin- und herschubsen, sondern nur die Daten, die ich gerade brauche. Hier mal mit Dictionary Mit einer Managefunktion kannst du das in eine Datei auslagern.
Einfaches Bsp.Spoiler anzeigen
AutoIt
Alles anzeigenFunc _VarSet($_sVarname, $_vValue) Return __ManageVars($_sVarname, 'set', $_vValue) EndFunc Func _VarGet($_sVarname) Return __ManageVars($_sVarname, 'get') EndFunc Func __ManageVars($_sVarname, $_sType, $_vValue='') Local Static $oDict = ObjCreate('Scripting.Dictionary') Switch $_sType Case 'get' If $oDict.Exists($_sVarname) Then Return $oDict($_sVarname) Else Return SetError(1,0,Null) EndIf Case 'set' $oDict($_sVarname) = $_vValue Return 1 EndSwitch EndFunc -
allerdings würd ich die Abfragen, ob eine Eingabe zulässig ist, z.B. auch mit in die GUI nehmen.
Das sollte eigentlich auch für die Mehrzahl der Fälle im View abgewickelt werden. Validierung von Usereingaben ist der Schritt bevor Controller oder Modell mit diesen Daten interagieren - also sollten sie zu dem Zeitpunkt der Übergabe an die Schnittstelle bereits valide sein. Nur in Fällen, wo komplexere Zusammenhänge mit anderen Daten aus der Programmlogik eine endgültige Validitätsaussage zulassen, ist es dann sinnvoll die Prüfung nicht im View vorzunehmen.
-
Diese Regel dient dazu, dass nicht auf irgendwelche forumsfremde Themen verlinkt wird. Deshalb soll ein Mod/Admin sich vorher mal das zu verlinkende Objekt ansehen. Und wenn es, wie in diesem Fall, eindeutig um AuIt-Inhalte geht, spricht aus meiner Sicht nichts dagegen.
Kannst dir ja mal noch eine zweite Meinung per PN bei Oscar oder Bernd einholen, meinen Segen hast Du.