SciTE - Farbe eines Hexwertes im Skript anzeigen

  • Ich würde die (4) Funktionen gerne via Ownhotkeys aufrufen, weil mein SciTE-Menü überfüllt ist... doch das geht leider nicht, da die angezeigte Farbe dann immer weiß ist.

    Code
    #~ Ctrl+Win, Ctrl+NUMPAD_6
    own.mode.cmd.102=ShowHexColorFromCursor()
    own.mode.descript.102=Ctrl+$(own.mode.indicator.descript), Ctrl+NUMPAD_6|Show RGB-HexColor from value under cursor position

    Wäre schön wenn das ginge...

    Edit: Wenn ich hier in dem File mit dem Caret auf einer Variablen stehe, ist die angezeigte Farbe immer schwarz... stehe ich auf einem Farbwert, wird sie korrekt angezeigt... im Anhang ist auch das Include.


    ShowHexColorFromCursor.png

    • Offizieller Beitrag

    Das ist ja paradox. Alle Calltip-Funktionen werden korrekt ausgeführt, außer der Farbsetzung.

    OK: scite.SendEditor(SCI_CALLTIPSHOW, beginPos+1, (' '):rep(iLen-1))

    OK: scite.SendEditor(SCI_CALLTIPSETPOSITION, true)

    FAIL: scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', R,G,B)))

    Die Werte werden korrekt ausgelesen und an die Funktion übergeben, alles wie gewünscht. Ich habe im Moment keine Ahnung, warum die Farbe sich nicht setzen lässt.

    Ich grübele mal ausgiebig.

  • Ich habe im Moment keine Ahnung, warum die Farbe sich nicht setzen lässt.

    Bestimmt weil ich die Variablen vorab in Zeile 18 deklariert habe... und du dann den Wert in dieser Zeile suchst... den du da aber nicht findest. ;)

    AutoIt
    ; Variable funktioniert nicht...
    Global $g_ispCyan2 = 0x2aa198 ;  6/6  cyan       37 #00afaf  60 -35 -05   42 161 152  175  74  63
    
    ; Beides funktioniert...
    Global $g_ispCyan3 = 0x2aa198
    ;  6/6  cyan       37 #00afaf  60 -35 -05   42 161 152  175  74  63
    • Offizieller Beitrag

    Bestimmt weil ich die Variablen vorab in Zeile 18 deklariert habe... und du dann den Wert in dieser Zeile suchst... den du da aber nicht findest

    Das ist völlig egal, wo die Variable deklariert wird. Bei der Zuweisungssuche lese ich die gesamte Datei ein.

    Füge mal in die Funktion FromCursor eine Debugzeile ein. Du wirst sehen, dass die Farbe gefunden und korrekt ausgegeben wird

    Aus einem mir unerfindlichen Grund nimmt scite.SendEditor(SCI_CALLTIPSETBACK, den Farbwert nicht entgegen.

  • Du wirst sehen, dass die Farbe gefunden und korrekt ausgegeben wird

    Ja, aber nur dann, wenn ich mit dem Caret vor/hinter/über einem Wert stehe... vor/hinter/über einer Variable bekomme ich 0x000000.... dann wird nämlich print('+ '..string.format('0x%s%s%s', R,G,B)) ausgegeben.

    Code: GetColorValueFromVariable
    ...
                if _fBGR == true then
       print('- '..string.format('0x%s%s%s', R,G,B))
                    scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', R,G,B)))
                else
                    scite.SendEditor(SCI_CALLTIPSETBACK, tonumber(string.format('0x%s%s%s', B,G,R)))
       print('+ '..string.format('0x%s%s%s', R,G,B))
                end
    ...
    Code
    ; Variable funktioniert nicht... print('+ '..string.format('0x%s%s%s', R,G,B)) wird ausgegeben
    Global $g_ispCyan2 = 0x2aa198 ;  6/6  cyan       37 #00afaf  60 -35 -05   42 161 152  175  74  63
    
    ; Variable funktioniert nicht... print('+ '..string.format('0x%s%s%s', R,G,B)) wird ausgegeben
    Global $g_ispCyan3 = _
        0x2aa198
    
    ; Beides funktioniert... und nur hier wird die Zeile print('DEBUG_RGB',R,G,B) ausgeführt
    Global $g_ispCyan4 = 0x2aa198
    ;  6/6  cyan       37 #00afaf  60 -35 -05   42 161 152  175  74  63
    • Offizieller Beitrag

    OK, habe noch einen Fehler gefunden und beseitigt. Zusätzlich ist am Skriptanfang eine Variable "bDEBUG". Bei Problemen mal auf "true" setzen, dann wird der ganze Ablauf in die Konsole protokolliert.

    Aber warum beim Aufruf aus OHK der Farbwert vom Calltip nicht angenommen wird, weiß ich noch nicht. Korrekt abgearbeitet wird das Skript. Ich werde das Problem mal vereinzeln und im SciTE-Forum nachfragen.

    Neue Version v0.9


    EDIT

    Habe jetzt die Ursache für die Anzeige in weiß gefunden:

    Ich prüfe bei Mausbewegung (Event OnDwellStart) oder Tastatureingabe (Event OnKey) ob colortip_show true ist (das setze ich, wenn der Calltip gezeigt wird) und diese Ereignisse beenden die Anzeige des Calltip. Deshalb setze ich die Werte zurück auf Standard (Farbe: weiß).

    Während beim Aufruf des Skriptes aus Eintrag in SciTEUser.properties (command) dieses Ereignis abgewartet wird, wird bei Aufruf aus OHK sofort Default wieder hergestellt, obwohl die Anzeige noch besteht.

    Wenn man also die Region "region EventClass" auskommentiert, funktioniert das Skript, wie erwartet. Nachteil: der zuletzt verwendete Farbwert für den Hintergrund wird dann auch für die SciTE-internen Calltips verwendet.

  • Habe die neue Version nun getestet... dann ist OHK aber erst mal keine Option mehr für mich.

    Nur zur Info...

    Zudem sollte der ToolTip auch verschwinden, wenn man das Caret nach rechts/links bewegt.

    • Offizieller Beitrag

    Zudem sollte der ToolTip auch verschwinden, wenn man das Caret nach rechts/links bewegt.

    Wenn die Maus bewegt wird oder eine beliebige Taste gedrückt wird, verschwindet der Tip.

    Diese Events werte ich im Skript aus. OHK basiert aber auch auf Auswertung des OnKey-Events. Somit wird beim Aufruf über OHK das Skript ausgeführt (Position und Länge des Calltips sind korrekt), aber die Einstellungen des Calltips werden gleichzeitig zurückgesetzt auf Default (weiß), weil das Event auch genutzt wird um das Verschwinden des Calltip (besser gesagt den Auslöser dafür) zu erkennen.

    Neil hat empfohlen, mit OnTimer oder OnIdle und der Prüfung auf SCI_CALLTIPACTIVE das Verschwinden des Calltip zu erkennen. Da werde ich mich mal dran probieren.

    Ich habe in v0.9 die Auswertemöglichkeit von "$variable = eine_funktion()" wieder entfernt. Das behinderte doch mehr als es nutzte. Dadurch konnten deine Zuweisungen

    Global $g_ispBlue = 0x268bd2 ; 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82

    nicht erkannt werden.

    Jetzt wird ausschliesslich nach "$variable = 0xABC123" in den Zeilen gesucht. Hinter dem Hex-Wert wird dann abgeschnitten.

  • Bei mir verschwindet der Tip nicht, wenn ich das Caret nach rechts/links bewege... und solange der Tip angezeigt wird, kann ich auch Zahlen (0-9) eingeben, ohne dass er verschwindet... und er verschwindet auch nicht bei Ctrl + Z und Ctrl + Y oder Ctrl + A... auch bei Sonderzeichen nicht... bis auf )... wird dann in weiß angezeigt... nur bei Buchstaben verschwindet er sofort.

    Wenn der Farbwert nicht aus 6 Hex-Werten besteht, verhält sich das auch merkwürdig...

    Global $iTest1 = 0xFFF


    Beim ersten Ctrl + Shift + F11 springt das Caret (wenn es z. B. zwischen 0x und FFF steht) vor das 0x, dann vor das =, der Tip wird aber erst beim dritten Ctrl + Shift + F11 angezeigt. ;)

    • Offizieller Beitrag

    Bei mir verschwindet der Tip nicht, wenn ich das Caret nach rechts/links bewege

    Da hatte ich mich vertan, es wird das Standardverhalten von Calltip verwendet, also Beenden bei Mausklick oder Pfeil-Auf/Ab, Enter. Das werde ich mal mit Einbauen.

    Wenn der Farbwert nicht aus 6 Hex-Werten besteht, verhält sich das auch merkwürdig...

    Ja, wegen der vorher möglichen Zuweisungserkennung mit Funktionen hatte ich fest auf Hex mit Länge 6 geprüft. Das werde ich mal noch großzügiger gestalten. :P