Beiträge von BugFix
-
-
-
Vielen Dank noch mal allen Gratulanten.
-
-
Hmm,
da steht der Oscar extra um 4 Uhr morgens auf zum Gratulieren, Respekt.
Also Vielen Dank für diese ersten Grüße und wie man sieht stimmt es: Das Internet vergißt nichts. (nicht mal Geburtstage)
(Das Geburtstagsdatum habe ich eigentlich nur aus einem recht leidigen Grund entfernt: Die Zunahme von Identitätsdiebstahl im INet. Aus einem Forum das Geburtsdatum geholt, über Denice noch Name und Anschrift des Users holen - wenn er 'ne Website hat - und schon kannst du auf dessen Kosten in jedem Versandhaus einkaufen.) -
-
Hi,
Edit 28.11.2011
aus der einen Funktion RepeatChar habe ich nun eine kleine Sammlung gemacht. Die Syntax habe ich auch etwas verändert.
Ich wollte mich erst an vi orientieren, habe nun aber eine eigene Syntax erstellt, die meines Erachtens nachvollziehbar ist.Edit 29.11.2011
Sry, war ein kleiner Bug drin - mit "!" wurde Sequenz aktiviert und nicht abgebrochen, wenn kein Zeichen einer Sequenz folgte - gefixt.
Neu: n-Worte links/rechts Löschen-- Generell: Kennzeichnung Operationen nach links(vorher): Kleinbuchstaben, nach rechts(hinterher): Großbuchstaben
-- Trigger für alle Operationen: "!seq"
--
-- Wiederholen n-mal...........seq: "!COUNTrCHAR"...."!5r*" = "*****"
-- Gehe n-Worte nach links.....seq: "!COUNTg"........"!5g" = 5 Worte nach links
-- Gehe n-Worte nach rechts....seq: "!COUNTG"........"!5G" = 5 Worte nach rechts
-- Lösche ein Wort links.......seq: "!w" ( w-Word )
-- Lösche ein Wort rechts......seq: "!W"
-- Lösche n-Worte links........seq: "!COUNTw"........"!5w" = 5 Worte links löschen
-- Lösche n-Worte rechts.......seq: "!COUNTW"........"!5W" = 5 Worte rechts löschen
-- Lösche Zeile nach links.....seq: "!l" ( l-Line )
-- Lösche Zeile nach rechts....seq: "!L"
-- Tausche Zeile mit voriger...seq: "!s" ( s-Swap )
-- Tausche Zeile mit nächster..seq: "!S"EditOperations.lua(0.4)
Code
Alles anzeigen-- TIME_STAMP 2011-11-29 10:02:12 v 0.4 -- by BugFix EvtOnChar = EventClass:new(Common) -------------------------------------------------------------------------------- -- OnChar(charAdded) -- -- Generell: Kennzeichnung Operationen nach links(vorher): Kleinbuchstaben, nach rechts(hinterher): Großbuchstaben -- Trigger operations by: "!seq" -- -- repeat n-times...............seq: "!COUNTrCHAR".."!5r*"....= "*****" -- go n-words left..............seq: "!Countg"......"!5g".....= 5 words to left -- go n-words right.............seq: "!CountG"......"!5G".....= 5 words to right -- delete one word left.........seq: "!w"..........."!w"......= one word left delete -- delete n-words left..........seq: "!COUNTw"......"!5w".....= 5 words left delete -- delete one word right........seq: "!W"..........."!W"......= one word right delete -- delete n-words right.........seq: "!CountW"......"!5W".....= 5 words right delete -- delete line to start.........seq: "!l" -- delete line to end...........seq: "!L" -- swap line with line before...seq: "!s" -- swap line with line after....seq: "!S" -- -- Parameters: -- charAdded - The character typed. -------------------------------------------------------------------------------- ------------------- Deklarationen --------------------------------------- -- Ausrufezeichen (exclamation mark) als Trigger für Operationen local fTrigger = false -- Warten auf Zahleneingabe nach Trigger local fGo = false -- Warten auf Repeat-Char local fRepeat = false -- Sammelstring Zahleneingabe local sNr = '' -- table sequences local tSeq = { ['w']='w',['W']='W',['l']='l',['L']='L',['g']='g',['G']='G',['s']='s',['S']='S',['r']='r' } -- table der Zahlen local tNum = { ['0']='0',['1']='1',['2']='2',['3']='3',['4']='4',['5']='5',['6']='6',['7']='7',['8']='8',['9']='9' } -- Zeichen, die (wenn Skript dafür aktiviert) paarig ausgegeben werden tPairs = { ['(']='(',['{']='{',['[']='[',['"']='"',["'"]="'" } ------------------------------------------------------------------------ ------------------------------------------------------------------------ function SetVarsBack() fTrigger = false fGo = false fRepeat = false sNr = '' end ------------------------------------------------------------------------ ------------------------------------------------------------------------ function SwapLine(_line, _direction) editor:BeginUndoAction() local caret = editor.CurrentPos local diff, pos, textSwap, lenSwap local textBase, lenBase = editor:GetLine(_line) if lenBase == nil then lenBase = 0 end if _direction == nil then _direction = 1 end textSwap, lenSwap = editor:GetLine(_line +(_direction)) if lenSwap == nil then lenSwap = 0 end editor:GotoLine(_line) pos = editor.CurrentPos diff = caret - pos editor:SetSel(pos, pos +lenBase) editor:ReplaceSel(textSwap) editor:GotoLine(_line +(_direction)) pos = editor.CurrentPos editor:SetSel(pos, pos +lenSwap) editor:ReplaceSel(textBase) editor:GotoLine(_line) editor:GotoPos(editor.CurrentPos + diff) editor:EndUndoAction() end ------------------------------------------------------------------------ ------------------------------------------------------------------------ function RepeatChar(_pos, _charAdded) editor:BeginUndoAction() editor:SetSel(_pos -(string.len(sNr) +3) , _pos) editor:ReplaceSel(string.rep(_charAdded, tonumber(sNr))) if tPairs[_charAdded] ~= nil then _pos = editor.CurrentPos editor:SetSel(_pos, _pos+1) editor:ReplaceSel('') end editor:EndUndoAction() SetVarsBack() end ------------------------------------------------------------------------ ------------------------------------------------------------------------ function DeleteSeq(_pos, _addLen) if _addLen == nil then _addLen = 0 end editor:SetSel(_pos -(2 +_addLen), _pos) editor:ReplaceSel('') end ------------------------------------------------------------------------ ------------------------------------------------------------------------ function EvtOnChar:OnChar(_charAdded) local pos = editor.CurrentPos if fRepeat == true then RepeatChar(pos, _charAdded) SetVarsBack() -- Zeichen sNr -mal wiederholen elseif fTrigger == true then -- Ausrufezeichen wurde vorher gesetzt, Trigger ist aktiv if tNum[_charAdded] ~= nil then -- Ziffer eingegeben if fRepeat == false and fGo == false then -- kein Repeat oder Go aktiv sNr = sNr..tNum[_charAdded] -- Ziffer zum Zahlenstring hinzufügen elseif fRepeat == true then -- diese Ziffer ist das zu wiederholende Zeichen RepeatChar(pos, _charAdded) SetVarsBack() -- Ziffer sNr -mal wiederholen end elseif tSeq[_charAdded] ~= nil then -- Zeichen einer Sequenz eingegeben, Aktion ausführen if _charAdded == 'w' then if sNr ~= '' then -- sNr -Worte links löschen DeleteSeq(pos, string.len(sNr)) for i = 1, tonumber(sNr) do editor:DelWordLeft() end else DeleteSeq(pos) editor:DelWordLeft() -- ein Wort links löschen end elseif _charAdded == 'W' then if sNr ~= '' then -- sNr -Worte rechts löschen DeleteSeq(pos, string.len(sNr)) for i = 1, tonumber(sNr) do editor:DelWordRight() end else DeleteSeq(pos) editor:DelWordRight() -- ein Wort rechts löschen end elseif _charAdded == 'l' then -- Zeile bis zum Anfang löschen editor:DelLineLeft() elseif _charAdded == 'L' then -- Zeile bis zum Ende löschen DeleteSeq(pos) editor:DelLineRight() elseif _charAdded == 's' then -- Zeile mit voriger tauschen DeleteSeq(pos) SwapLine(editor:LineFromPosition(pos), -1) elseif _charAdded == 'S' then -- Zeile mit nächster tauschen DeleteSeq(pos) SwapLine(editor:LineFromPosition(pos)) elseif _charAdded == 'g' or _charAdded == 'G' then -- gehe sNr -Worte nach links/rechts if sNr == '' then SetVarsBack() return end DeleteSeq(pos, string.len(sNr)) if _charAdded == 'g' then for i = 1, tonumber(sNr) do editor:WordLeft() end end if _charAdded == 'G' then for i = 1, tonumber(sNr) do editor:WordRight() end end elseif _charAdded == 'r' then -- Repeat aktivieren, nächstes Zeichen wird sNr -mal wiederholt fRepeat = true return false end SetVarsBack() else SetVarsBack() end end if _charAdded == '!' then fTrigger = true end -- Trigger wird aktiviert return false end --> EvtOnChar ------------------------------------------------------------------------Integration in SciTE:
- Das Skript im SciTE-Ordner speichern.
- Eintrag im "SciTEStartup.lua" vornehmen:LoadLuaFile("RepeatChar.lua")LoadLuaFile("EditOperations.lua")
Die Datei sollte dann etwa so aussehen:SciTEStartup.lua
Code
Alles anzeigen-- TIME_STAMP 2011-11-27 11:51:04 v 0.1 -------------------------------------------------------------------------------- -- SciTE startup script. -------------------------------------------------------------------------------- -- A table listing all loaded files. LoadLuaFileList = { } -------------------------------------------------------------------------------- -- LoadLuaFile(file, directory) -- -- Helper function for easily loading Lua files. -- -- Parameters: -- file - The name of a Lua file to load. -- directory - If specified, file is looked for in that directory. By default, -- this directory is $(SciTEDefaultHome)\Lua. -------------------------------------------------------------------------------- function LoadLuaFile(file, directory) if directory == nil then directory = props["SciteDefaultHome"] .. "\\Lua\\" end table.insert(LoadLuaFileList, directory .. file) dofile(directory .. file) end -- LoadLuaFile() -- Load all the Lua files. LoadLuaFile("Class.lua") -- Always load first. LoadLuaFile("Common.lua") -- Always load second. LoadLuaFile("AutoItPixmap.lua") LoadLuaFile("AutoHScroll.lua") LoadLuaFile("AutoItAutoComplete.lua") LoadLuaFile("LoadSession.lua") LoadLuaFile("AutoItIndentFix.lua") LoadLuaFile("EdgeMode.lua") LoadLuaFile("SmartAutoCompleteHide.lua") LoadLuaFile("Tools.lua") LoadLuaFile("AutoItTools.lua") LoadLuaFile("AutoItGotoDefinition.lua") --~ LoadLuaFile("AutoCloseBraces.lua") -- don't use together with "EdgingSelection.lua" -- Start up the events (Calls OnStartup()). EventClass:BeginEvents() -- Files are using EventClass must load after Events startup LoadLuaFile("AutoStampSaveVersion.lua") -- use Event: "OnBeforeSave" LoadLuaFile("MyDebug.lua") LoadLuaFile("EdgingSelection.lua") -- use Event: "OnKey" LoadLuaFile("EditOperations.lua") -- use Event: "OnChar"Anschließend SciTE neu starten (oder wenn vorhanden das ReloadStartup ausführen), dann ist das Tool aktiv.
-
Erinnert mich an eine Bastelei, die ich vor ~4,5 Jahren mal gemacht habe: Slide Window
-
Wir das Skript dadurch nicht bedeutend langsamer, wenn ich das so mache?
Kaum, denn schließlich ist jedes Control real ein Childwindow. Somit sollte es keine Rolle spielen, wenn du das ebenso händelst. -
Sag mal, hast du Angst davor, die Funktion aufzurufen?
Probier doch einfach aus und schau, was du als Ergebnis bekommst.
Bsp.
- dein Array1 (Quellordner) enthält: [datei1,datei2,datei3,datei4,datei5,datei6,datei7]
- dein Array2 (Zielordner) enthält: [datei1,datei2,datei3,datei4]Somit erwartest du als Ergebnis: "datei5,datei6,datei7" ==> Elemente, die NUR in Menge 1 vorkommen.
Ruf die Funktion auf:
[autoit]$ErgebnisArray = _GetIntersection($Array1, $Array2)
[/autoit]
Was sagt dir die Funktionsbeschreibung?ZitatAlles anzeigen; Description:: Aus 2 gegebenen Mengen werden ermittelt
; - die Schnittmenge (Elemente, die in beiden Mengen enthalten sind)
; - die Differenzmenge 1 (Elemente, die nur in Menge 1 vorkommen)
; - die Differenzmenge 2 (Elemente, die nur in Menge 2 vorkommen)
;.....
; Return Value(s): Erfolg 2D-Array [n][0]=Schnittmenge
; [n][1]=Differenzmenge 1
; [n][2]=Differenzmenge 2
Also ist das, was du suchst, im Ergebnissarry in der Spalte Nummer 2 (Index 1) zu finden.[ Ich frage mich ernsthaft, wozu ich meine Funktionen so präzise kommentiere. Wenn es keiner liest, kann ich mir den Aufwand auch sparen.
] -
-
Wenn du 2 1D-Arrays hast, kannst du diese z.B. hiermit vergleichen.
-
Hallo funkey,
ich habe die UDF mal um einen Parameter erweitert. Du kannst jetzt einen Funktionsnamen übergeben, der genutzt wird für die Verwendung der Funktion im OnEventMode. Ohne Funktionsnamen (Leerstring) arbeitet die Funktion, wie vorher.
Aber vielleicht kannst du mal draufschauen, warum es beim Beenden dann zu einem fehlerhaften Ende kommt. Soweit habe ich mich jetzt noch nicht in deinen Code hineingekniet.
Angehängt die geänderte OwnTab.au3 und das OnEvent-Bsp. -
Ich verwende HelpMaker, enthält auch noch einen schönen IconMaker

-
Liebe Mit-User,
ihr solltet euch entscheiden, was wir wollen:
- eure (möglicherweise mit Glaskugel erhaltene) Deutung von Threadhintergründen ist das Maß aller Dinge
oder
- der hier gepostete Inhalt ist gültig.Ich plädiere ganz klar für Letzteres (und lasse Ersteres nicht zu)!
Solange ein Thread nicht mit dem dort veröffentlichten Inhalt gegen unsere Regeln verstößt, werde ich ihn auch nicht schließen. Nicht aufgrund von Vermutungen.
Wenn eure Glaskugel sagt, dass dies ein Bot ist - dann bietet halt keinen Support. Aber meldet bitte nicht jeden Thread wegen eures "Bauchgefühls".Danke.
-
brauche nur die Schriftenauswahl.
[autoit]
Na dann rufst du eben nur_ChooseFont("Arial") ; oder welche Schriftart es sein soll
[/autoit]auf. Alle Parameter dieser Funktion sind optional - steht auch so in der Hilfe - Lesen bildet.

Ahh, mir schwant, was du meinst: Im Auswahl-Dialog soll nur die Schriftart stehen? Wenn du das möchtest,mußt du es selbst erstellen.
-
Warum um Himmels Willen verwendest du hier RegExp?
Da hast du nun schon das Glück, dass die Daten sauber geordnet in einer csv-Datei vorliegen und recht leicht in eine Array gelesen werden können - weshalb willst du das per RegEx lösen?
So kannst du alles in ein schönes 3D-Array lesen (Bsp. Datei ek.csv)
Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$sPath = '..\ek.csv'
Local $aAll
_FileReadToArray($sPath, $aAll)
Local $aStadt[$aAll[0]][7][4]
;~ $aStadt[X][0][0] = Stadt
;~ $aStadt[X][Y][0] = Ware
;~ $aStadt[X][Y][1] = Stufe
;~ $aStadt[X][Y][2] = Preis
;~ $aStadt[X][Y][3] = GewichtLocal $aSplit, $n
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $aAll[0]
$aSplit = StringSplit($aAll[$i], ',')
$aStadt[$i-1][0][0] = $aSplit[1] ; == Stadt
$n = 1
For $j = 2 To $aSplit[0] Step 4
$aStadt[$i-1][$n][0] = $aSplit[$j] ; == Ware
$aStadt[$i-1][$n][1] = $aSplit[$j+1] ; == Stufe
$aStadt[$i-1][$n][2] = $aSplit[$j+2] ; == Preis
$aStadt[$i-1][$n][3] = $aSplit[$j+3] ; == Gewicht
$n += 1
Next
Next; == Ausgabe in Konsole
[/autoit]
For $i = 0 To UBound($aStadt) -1
For $j = 1 To 6
$s = $aStadt[$i][0][0] & ' - ' & $aStadt[$i][$j][0] & ' - '
ConsoleWrite( $s & 'Stufe: ' & $aStadt[$i][$j][1] & @CRLF )
ConsoleWrite( $s & 'Preis: ' & $aStadt[$i][$j][2] & @CRLF )
ConsoleWrite( $s & 'Gewicht: ' & $aStadt[$i][$j][3] & @CRLF )
Next
Next -
ich habs noch nie versucht eine Datei in eine Dll zu packen, aber ist es wirklich so schwer? Bzw ist es schwerer als das was du da gemacht hast
Es ist nicht schwer Daten mit z.B. Ressouce-Editor in einer Dll zu verpacken - aber versuch das mal dynamisch zu machen, sprich bei deinem User im installierten Programm. Das geht in die Hose.
Wenn du z.B. ein Programm hast, das diverse Module verwaltet und für jedes Modul gibt es z.B. eine Bild auf der GUI, dann mußt du für ein neues Modul auch ein neues Bild nachladen können. Das macht dein Programm dynamisch.aber so muss man doch immer die .rbn neugeladen werden und wenn z.B. 20 Bilder, Musik etc drin ist dann wäre es doch schlecht die alle nochmal neu zu laden oder nicht
Mann muß doch nur das aktualisieren, was erneuert oder neu eingefügt werden soll.
doch was wäre wenn aus Zufall in dem Binärcode <xx.xx> drinstehen würde, dann würde, das was sicherlich durch StringRegExp returnt wird, durcheinander gebracht werden oder nicht
Das Programm generiert den Binärcode aus den angegeben Dateien, wie soll dann solch Mist drin stehen?

-
Kleine Frage: Lässt sich das denn eigendlich deaktivieren? Die Funktion regt mich immer auf, wenn ich ein Minus schreiben will (mache ich ansonsten mit dem Nummernblock) und dann wird eine Zeile auskommentiert.
Ja, das kannst du abschalten:
Öffne in SciTE--Optionen--Globale Einstellungsdatei (C:\Program Files\AutoIt3\SciTE\SciTEGlobal.properties)
Dort findest du folgenden Block:Code# User defined key commands user.shortcuts=\ Ctrl+Shift+V|IDM_PASTEANDDOWN|\ Ctrl+PageUp|IDM_PREVFILE|\ Ctrl+PageDown|IDM_NEXTFILE|\ KeypadPlus|IDM_EXPAND|\ KeypadMinus|IDM_BLOCK_COMMENT|\ Ctrl+F1|IDM_HELP_SCITE|
dann einfach die Zeile für Keypad Minus auskommentieren: -
wie der Parameter für das drucken war müsste man mal eben googln
Oder einfach mal in die Registry schauen.
Zu jedem Dateityp sind im CLASSES_ROOT unter Shell die Aufrufe (open, print etc.) hinterlegt.
Für Wordpad-Dokumente findest du den Aufruf unter folgendem Schlüssel:
HKEY_CLASSES_ROOT\Wordpad.Document.1\shell\print\command
also: '"Pfad_wordpad.exe" /p "Pfad_zu_druckende_Datei"'