Beiträge von Bitnugger

    Das habe ich, dreist wie ich bin, einfach mal so aus der Hilfe übernommen

    Also ehrlich, wie kannst du nur... :P


    Schau mal hier...

    https://www.autoitscript.com/a…ICtrlRichEdit_Destroy.htm

    AutoIt
    ...
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    GUIDelete() ; needed unless script crashes if DoIt as not been pushed
    Exit
    Case $iMsg = $idBtnDoIt
    _GUICtrlRichEdit_Destroy($hRichEdit)
    EndSelect
    ...

    Und in der EN-Hilfe zu v3.3.14.5 sieht es bei _GUICtrlRichEdit_Create bei mir so aus...

    AutoIt
    ...
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    _GUICtrlRichEdit_Destroy($hRichEdit) ; needed unless script crashes
    ; GUIDelete() ; is OK too
    Exit
    EndSelect
    ...

    sieh mal hier:

    Vielen Dank für den Link... durch diesen habe ich nun einen wirklich sehr ätzenden Fehler identifizieren können, der mich vor etwa 18 Monaten fast in den Wahnsinn getrieben hat. Wäre nie drauf gekommen, das es am ToolTip liegen könnte.


    ToolTip(" Macht er nur korrekt, wenn vorher der mittige NICHT aufgerufen wurde ", 4, @DesktopHeight - 60, _
    " Dieser Tooltip soll unten links erscheinen ",2,Default)

    Im Anhang mal vier Bilder, die zeigen, wie der Tip bei mir mit zwei Monitoren angezeigt wird.

    Aber man kann nicht abfragen, welchen Style au3 oder lua für comment.box verwenden

    Jetzt habe ich es verstanden... das ist ja mal echt blöd.


    AutoIt und Lua sind definitiv die wichtigsten... aber zumindest für Python bräuchte ich es auch... obwohl es da ja keinen echten Multi-Line-Kommentar gibt... da mache ich es mit Multi-Line-String (Style = 7).

    """

    This is a block comment.

    It spans multiple lines.

    Nice, eh?

    """

    Was meinst du?

    Ja, ok, so wichtig ist das nun auch nicht... habe dazu was getippt, um an den Style zu kommen, sollte eigentlich funktionieren, aber da ist irgendwie der Wurm drin!


    Etwas an Denkprozessen darf man ruhig auf den Anwender übertragen.

    Habe ich mir gedacht, das du das sagst. ;-) Ja, ok, muss auch nicht sein.


    Also ist zumindest eine weitere Property erforderlich

    Auch ok... wobei ich das sicher nie brauchen werde.

    Ja... so gefällt mir das! :thumbup:


    Hier noch ein paar Anregungen:

    • Wenn nichts markiert wurde, sollte es egal sein, wo das Caret steht, solange es sich in einer Start-/Endzeile oder sonstwo innerhalb eines Kommentarblocks befindet, um den Kommentarblock wieder zu entfernen.
    • Wenn sich in der Selektion eine Start-/Endzeile befindet, jedoch kein Gegenstück dazu, sollte das als Fehler gewertet und kein Kommentarblock erzeugt werden.
    • comment.box.tab.alternation und comment.box.middle
      Allgemein ist es sicher besser, die Einführung neuer Properties zu vermeiden, wenn sich eine Funktion mit etwa gleichem Aufwand durch bereits vorhandene Properties steuern lässt.
      Was Einrückungen angeht, sollten Kommentarblöcke nicht anders als Funktionsblöcke gehandhabt werden.
      Ich denke, comment.box.middle ist nicht dazu gedacht, um Einrückungen zu definieren, sondern um dem Kommentar ein oder mehrere druckbare Zeichen voranzustellen.

      Anhand folgender Properties kann bestimmt werden, ob bzw. wie comment.box.middle eingerückt wird:
      Globale Properties:
      use.tabs, tabsize, indent.size ; Default: tabsize=4, indent.size=4, use.tabs=1
      File spezifische Properties:
      use.tabs.filepattern, tab.size.filepattern, indent.size.filepattern ; Wurden z.B. für *.au3 keine File spezifischen Properties angegeben, werden die globalen verwendet.

    Bsp.:


    Das stimmt so aber immer noch nicht...


    comment.box.end.au3=#CE

    comment.box.middle.au3=@Tab

    comment.box.tab.alternation=@Tab ; <== Für diese Variable erkenne ich auch bei aller Anstrengung keinen Mehrwert!

    comment.box.ignore.empty.before=1

    comment.box.ignore.empty.after=1

    comment.box.output=0


    Im oberen Ausschnitt habe ich bis vor Exit markiert... das Caret steht in Zeile 17.

    ...und das passiert dann damit... das Exit hinter #CE ist zu viel und das Exit darüber dürfte nicht mit im Kommentarblock sein!


    Gehe ich mit dem Caret nur bis ans Ende von Zeile 16, funktioniert es.

    Wir hatten vor einigen Wochen einen User, der das zuletzt aktive Window ermitteln wollte, weil sein Send() oder so sonst nicht da ankommt, wo er es will... dann habe ich gebastelt und es war irgendwas mit Hook oder Register, um die Nachrichten abzufangen, wenn sich im System etwas an einem Window ändert... neu erstellt, vernichtet, Z-Order geändert... aber ich finde es einfach nicht mehr. Grrr...

    Jetzt habe ich es wieder gefunden...

    _WinAPI_GetAsyncKeyState


    Rückgabewert

    Erfolg:Wenn die Funktion erfolgreich ist, gibt der Rückgabewert (SHORT) an, ob die Taste seit dem letzten Aufruf von GetAsyncKeyState gedrückt wurde und ob die Taste derzeit auf oder ab ist. Wenn das höchstwertige Bit gesetzt ist (KeyState < 0), ist die Taste gedrückt, und wenn das niedrigstwertige Bit gesetzt ist (Mod(KeyState, 2) = 1), wurde die Taste nach dem vorherigen Aufruf von GetAsyncKeyState gedrückt. Sie sollten sich jedoch nicht auf dieses letzte Verhalten verlassen. Weitere Informationen finden Sie in den Bemerkungen.
    Fehler:Der Rückgabewert ist 0 wenn die Taste nicht gedrückt ist oder in den folgenden Fällen:
    - Der aktuelle Desktop ist nicht der aktive Desktop
    - Der Vordergrund-Thread gehört zu einem anderen Prozess und der Desktop erlaubt den Hook oder die Journal-Aufnahme nicht.


    Bemerkungen

    Die für $iKey zu verwendenden Konstanten finden Sie in WinAPIvkeysConstants.au3


    Die GetAsyncKeyState-Funktion funktioniert mit Maustasten. Es wird jedoch der Status der physischen Maustasten überprüft, nicht die logischen Maustasten, denen die physischen Tasten zugeordnet sind. Beispielsweise gibt der Aufruf _WinAPI_GetAsyncKeyState ($VK_LBUTTON) immer den Status der linken physischen Maustaste zurück, unabhängig davon, ob sie der linken oder rechten logischen Maustaste zugeordnet ist. Sie können die aktuelle Zuordnung der physischen Maustasten zu logischen Maustasten durch das System ermitteln, indem Sie _WinAPI_GetSystemMetrics($SM_SWAPBUTTON) aufrufen, das TRUE zurückgibt, wenn die Maustasten ausgetauscht wurden.


    Obwohl das niedrigstwertige Bit des Rückgabewerts angibt, ob die Taste seit der letzten Abfrage gedrückt wurde, kann eine andere Anwendung aufgrund des vorbeugenden Multitasking-Charakters von Windows GetAsyncKeyState aufrufen und anstelle Ihrer Anwendung das Bit "Zuletzt gedrückt" empfangen. Das Verhalten des niedrigstwertigen Bits des Rückgabewerts wird aus Gründen der Kompatibilität mit 16-Bit-Windows-Anwendungen (die nicht präemptiv sind) streng beibehalten und sollte nicht verwendet werden.


    Sie können die Codekonstanten für virtuelle Schlüssel $VK_SHIFT, $VK_CONTROL und $VK_MENU als Werte für den Parameter vKey verwenden. Dies gibt den Status der UMSCHALT-, STRG- oder ALT-Tasten an, ohne zwischen links und rechts zu unterscheiden.


    Related

    _WinAPI_GetKeyState, _WinAPI_GetKeyboardState

    Kannst du bitte noch mal rein schauen...


    Markiere ich z.B. zwei Zeilen und lassen das Caret am Ende der zweiten Zeile stehen, funktioniert es, wie erwartet. Setzte ich das Caret aber an den Anfang der zweiten Zeile, dann wurde ja eigentlich nur eine Zeile markiert... werden aber trotzdem zwei Zeilen auskommentiert und es fehlt dann auch ein Zeilenumbruch, damit der Text hinter dem Caret in einer neuen Zeile beginnt.


    Wird nur ein Teil einer Zeile markiert, wird der markierte Teil einfach unterschlagen und der Text hinter dem Caret mit in die selbe Zeile geschrieben, sollte aber eine Zeile tiefer... das sollte auch abgefangen werden.


    Wurde bei self.lineStart und/oder bei self.lineEnd eine leere Zeile markiert, sollten diese nicht berücksichtigt werden. Ist dazwischen nur eine Zeile mit Text, dann bitte nur die in den Block setzen.

    Wofür ist denn "OHK = {}" am Anfang der OHKfuncs.lua?

    Code: http://lua-users.org/wiki/TablesTutorial
    Creating tables
    Tables are created using table constructors, which are defined using curly brackets, e.g. { } . To define an empty table we can do the following.
    > t = {} -- construct an empty table and assign it to variable "t"
    > print(t)
    table: 0035AE18
    Notice when the value of a table is displayed only the type and unique id of the object are displayed. To print out the contents of a table we must do so explicitly. We'll learn how to do this later.

    Nicht ganz!

    Die Levenshtein-Distanz unterscheidet sich etwas vom Hamming-Abstand.

    Ja, schon klar... das bedeutet aber doch nicht, dass es nicht zum Thema passt... wenn es denn - so wie du selbst zitiert hast - als Erweiterung des Hamming-Abstands angesehen werden kann... ;-)

    Muss man für shell.exec noch etwas in der SciTEUser.properties einfügen, um die Bibliothek einzubinden?

    Wäre ich gehässig, würde ich jetzt einfach nein sagen... doch du hast unverdienterweise unverschämtes Glück. 8o


    Einfügen muss man was, aber wie in aller Welt kommst du dabei auf SciTEUser.properties?


    Tatsächlich muss dies entweder lokal in dem Lua-Script, welches Funktionen der shell.dll benötigt, oder aber global in der SciTEStartup.lua geschehen, womit dann alle Scripts darauf zugreifen können.

    -- load library - Info --> shell.html

    require "shell"

    --~ if shell then table.foreach(shell, print) end


    Das funktioniert allerdings nur bis SciTE-Version 3.7.5.0, denn in den neueren ist der Einsprungpunkt luaL_register nicht mehr enthalten, weil veraltet.

    Liest du hier: RE: Erkennen wenn User eine öffnende runde Klammer schreibt, unabhängig vom Keyboard Layout


    Folgende positiven Dinge sind hervorzuheben:

    Zu 1.) os.execute() lässt das Windows CMD Fenster nur kurz aufblitzen und versteckt es dann wieder - es wird nicht geschlossen und läuft im Hintergrund weiter, bis SciTE beendet wird.

    Zu 2.) Die Hilfe kann auch ohne props["CurrentWord"] aufgerufen werden... wenn kein Text markiert wurde, ist dies allerdings eine gute Alternative, um den Text, der unter dem Caret steht, zu verwendet, oder halt nichts, wenn das Caret nicht vor/in/hinter einem Word oder in einer leeren Zeile steht.

    Zu 3.) Mit props["CurrentWord"] und auch mit props["CurrentSelection"] wird nichts markiert. props liefern lediglich die Werte der angefragten Eigenschaften, welche von SciTE bereitgestellt werden.


    Wer auch das Markieren von Suchworten, die mit Punkt verbunden sind, automatisch haben will, kann folgendes in die SciTEUser.properties hinzufügen.

    Keine schlechte Idee... sollte aber gut überlegt sein... denn andere Scripte gehen evtl. davon aus, das diese Properties auf Default stehen.

    Ich mache das beim Debuggen auch gerne so:

    print('shell.exec = ', shell.exec('"'..firefox..'" "'..manual..'"'))

    shell.exec = true Der Vorgang wurde erfolgreich beendet


    Eine Zeile geändert, um einen Fehler zu provozieren:

    local firefox = "C:/Program Files/Mozillas Firefox/firefox.exe" \

    shell.exec = false Das System kann die angegebene Datei nicht finden


    Evtl. liegt es daran, dass os noch unbekannt ist... das kannst du so testen:

    command.help.$(file.patterns.lua)=dostring \

    if type(os) ~= 'table' then print('require "os"!!!', 'type(os) = ', type(os)) return end \

    ...


    Für os.execute musst du die Zeile etwas ändern... hier beide Zeilen zum Vergleich:

    shell.exec('"'..firefox..'" "'..manual..'"')

    os.execute('""'..firefox..'" "'..manual..'""')