mouseword ???

Startseite Foren Deutsches LiveCode-Forum mouseword ???

Ansicht von 17 Antwort-Themen
  • Autor
    Beiträge
    • #9986
      Thorsten
      Teilnehmer

      Hallo

      Im Buchbeispiel Hangman wird die coole Funktion mousechar vorgestellt, mit dem der Buchstabe, über der sich die Maus befindet, bestimmt werden kann.
      Ich würde gerne bei einem Satz das jeweilige Wort herausbekommen, übder dem sich die Maus befindet.
      Ich habe mal mouseword probiert, aber das scheint es nicht zu sein.

      Any ideas ?

      Herzlichen Dank,

      Thorsten

    • #9988
      Thorsten
      Teilnehmer

      Das Gleiche gilt für eine Zeile in einer Liste.
      mouseline gibt es scheinbar auch nicht 🙁

    • #10004
      Klaus Major
      Keymaster

      Du suchst:
      the mousechar -> der aktuelle Buchstabe unter dem Cursor
      oder
      the mousetext -> das aktuelle WORT unter dem Cursor

      "the mouseline" gibt es auch, liefert aber nur die Position der Zeile unter dem Cursor in Form von: line x of field y

    • #10019
      Thorsten
      Teilnehmer

      Hallo Klaus

      > "the mouseline" gibt es auch, liefert aber nur die Position der Zeile unter dem Cursor in Form von: line x of field y

      Super, Danke !
      Ich kann ja mit "word 2" die Nummer x da rausholen

      > the mousetext -> das aktuelle WORT unter dem Cursor

      Prima, allerdings habe ich gerade das kurioses Phänomen, dass das Skript (on mouseUp) gar nicht ausgelöst wird.
      Habe mir zur Kontrolle eine answer eingefügt, aber die erscheint auch nicht !?!
      Neustart brachte auch nichts. Auch nicht ein Wechsel auf mouseDown.
      Durch Zufall habe dann entdeckt, dass es per rechte Maustaste ausgelöst wird !?! Wie kann das denn sein ?
      Auf Android klappt es so gar nicht 🙁

      Hier der Code:

      on mouseUp
         // answer "Test"
         put the mousetext into T
         // answer T
         put "file:" & specialFolderPath("resources") & "/data/" into SpecialPfad
         put url(SpecialPfad & T & "htm") into HTM
         set the HTMLTEXT of widget "Browser" to HTM
         show widget "Browser"
      end mouseDown
    • #10021
      Klaus Major
      Keymaster

      Ach so, ja, nur ein ge"lock"tes Feld kann einen "normalen" Mausklick empfangen.
      Ein bearbeitbares Feld nur einen Rechts-Klick (für Kontextmenüs etc.).

      Ich glaube, bei Deinem Skript fehlt ein Punkt . vor dem Suffix in SpecialPfad.

    • #10023
      Thorsten
      Teilnehmer

      Danke für die Info.
      Wie locke ich das Feld ?
      Das Attribut heißt wohl lockText und ich vermute den Befehl set.
      Im Buch finde ich aber nur Beispiele:
      set the EIGENSCHAFT of OBJEKT to WERT
      Ich habe das versucht:
      set lockText of field "Rubrik" to TRUE
      und es scheint zu funktionieren 🙂

      Mit dem Punkt hast Du Recht. Da die Worte mit einem Punkt enden, hatte ich den Verdacht, dass der Punkt mit übernommen wird.

    • #10025
      Klaus Major
      Keymaster

      Ja, locktext ist korrekt. Heisst möglicherweise "Lock Text" bei Dir im Inspektor.
      Großer Tip: In den Voreinstellungen von LC:
      General -> Property labels are -> Name of Livecode property
      anklicken, dann zeigt der Inspektor den Namen der Property, die Du auch im Skript verwenden kannst, anstatt nur der Beschreibung!

      Mit dem Punkt hast Du Recht. Da die Worte mit einem Punkt enden, hatte ich den Verdacht, dass der Punkt mit übernommen wird.

      Das ist die LC Definition von "word", alles was durch Leerzeichen, Komma, Punkt oder Semikolon etc. getrennt wird, wobei das "Trennzeichen" selber nicht Bestandteil des Wortes ist. 😉

    • #10027
      Thorsten
      Teilnehmer

      > Großer Tip: In den Voreinstellungen von LC:
      > General -> Property labels are -> Name of Livecode property
      anklicken, dann zeigt der Inspektor den Namen der Property, die Du auch im Skript verwenden kannst, anstatt nur der Beschreibung!

      Ja, da habe ich das ja her - hatte mir das beim Lesen des Buches gemerkt 😉

      > Das ist die LC Definition von "word", alles was durch Leerzeichen, Komma, Punkt oder Semikolon etc. getrennt wird, wobei das "Trennzeichen" selber nicht Bestandteil des Wortes ist. ?

      Ja, leider auch -
      Von einem Wort mit einem Bindestrich wird nur der Teil erkannt, der sich unter der Maus befindet...

      Gute Nacht !

    • #10029
      Klaus Major
      Keymaster

      Erzähl doch mal mehr darüber, was Du vorhast, da finden wir sicher eine bessere Lösung!

    • #10037
      Thorsten
      Teilnehmer

      > Erzähl doch mal mehr darüber, was Du vorhast, da finden wir sicher eine bessere Lösung!

      🙂
      Also, ich habe eine Liste, die pro Zeile verschiedene Begriffe und Namen von dazugehörigen HTM-Dateien beinhaltet.
      Nach den Begriffen möchte ich suchen können (das klappt schon prima).
      Ich lasse mir dann die Zeile in einem Extra-Feld anzeigen und möchte dann auf einen der Namen der HTM-Dateien klicken können, damit diese dann im Browser angezeigt wird. Das klappt auch schon Dank Deiner Hilfe ganz wunderbar - es sei denn, der Name der HTM-Datei beinhaltet ein -
      Dann erkennt mouseText nur den Anfang oder das Ende des Namens.

      Als Workaround habe ich mir überlegt, die erkannten Teilbegriffe innerhalb einer Switch-Routine den vollständigen Namen zuzuordnen.

      Sonnige Grüße,

      Thorsten

    • #10039
      Klaus Major
      Keymaster

      Zeig doch mal den Inhalt Deiner Liste und ein paar Deiner verwendeten Skripte.

    • #10041
      Thorsten
      Teilnehmer

      Ok hier ein Beispiel einer Zeile (von über 450) im Feld "Rep":

      142 JUCKEN · Kriebeln +b +e +h · {V: Ameisenlaufen} | agar. apis. Calc. CAUST. lyc. Merc. phos. Puls. Rhus-t. sep. sil. staph. SULPH.

      Zu Beginn die Zeilennummer, dann die Suchbegriffe mit speziellen Zuordnungen (+B etc.), dann ein Verweis, dann ein Trennungszeichen |, dann die Namen für die HTM-Dateien.

      Hier mein Code zum Suchen durch eine Eingabe im Feld "RubrikEingabe":

      on KeyUp
         put field "EingabeRubrik" into Eingabe
         put empty into field "Liste" // für die gefundenen Rubriken
         if number of chars of Eingabe > 1 Then // Suche beginnt ab 2 Zeichen
            repeat for each line l in field "Rep"
               if Eingabe is in l then
                  put l & return after field "Liste"
               end if
            end repeat
         else
            hide field "Rep"
            show field "Liste"
         end if
      end KeyUp

      Das funktioniert ganz prima, nur, wenn ich Zeichen mit Backspace lösche, wird nicht weiter gesucht, deswegen die Frage, wie ich das Drücken von Backspace mitbekomme, um entsprechend darauf zu reagieren (aber soweit bin ich noch nicht.

      In der Liste der gefundenen Zeilen wähle ich mit folgendem Code durch Anklicken ein aus:

      on mouseUp
         put empty into field "EingabeRubrik" // für eine neue Suche
         put the mouseline into Zeile
         put word 2 of Zeile into Zeile // das ist die Zeilennummer
         put return & return & line Zeile of field "Liste" into Rubrik // returns wegen der Optik
         replace " | " with return & return in Rubrik // Trennung von Begriffen und Dateiverweisen
         put Rubrik into field "Rubrik"
         set lockText of field "Rubrik" to TRUE // Kann ich auch etwas in ein gelocktes Feld setzen ?
         show field "Rubrik"
      end mouseUp

      Mit diesem Code rufe die HTM-Datei auf, wenn man auf einen Dateinamen klickt:

      on mouseUp
         put the mousetext into Arznei
         put "file:" & specialFolderPath("resources") & "/data/" into SpecialPfad
         put url(SpecialPfad & Arznei & ".htm") into HTM
         set the HTMLTEXT of widget "Browser" to HTM
         show widget "Browser"
      end mouseUp

      Hier will ich noch einbauen, dass geprüft wird, ob die Datei vorhanden ist und ggf. die Ersetzung bei einem Klick auf einen mit - getrennten Dateinamen.
      Aber fürs Erste funktioniert es schon mal und ich bin ganz happy mit Livecode 🙂

      Herzliche Grüße,

      Thorsten

    • #10043
      Klaus Major
      Keymaster

      Hi thorsten,

      ah, dake für die Info!

      Ein paar Tips:
      Du kannst per Skript so gut wie ALLES machen, und natürlich auch Text in ein gelocktes oder unsichtbares Feld packen. Also "lock"e Dein Feld einmal im Inspector, dann brauchst Du das nicht im Skript zu machen.

      Du kannst immer die Existenz einer Datei prüfen mit:

      on mouseUp
         put the mousetext into Arznei
         put specialFolderPath("resources") & "/data/" into SpecialPfad   
         put SpecialPfad & Arznei & ".htm" into HTM
         if there is a file HTM then
            put url("file:" & HTM) into tHTML
            set the HTMLTEXT of widget "Browser" to HTM
            show widget "Browser"
         end if
      end mouseUp

      Du kannst Deinem Feld einen "on backspacekey" Handler verpassen und entsprechend skripten.

      Gruß

      Klaus

    • #10052
      Thorsten
      Teilnehmer

      Hallo Klaus

      > Du kannst per Skript so gut wie ALLES machen, und natürlich auch Text in ein gelocktes oder unsichtbares Feld packen. Also "lock"e Dein Feld einmal im Inspector, dann brauchst Du das nicht im Skript zu machen.

      Prima, Danke, gemacht.

      > Du kannst immer die Existenz einer Datei prüfen mit:

      Super, Danke, gemacht.

      > Du kannst Deinem Feld einen "on backspacekey" Handler verpassen und entsprechend skripten.

      Danke
      Folgendes Problem:

      on backspacekey
         Anweisung
      end backspacekey

      Dann wird zwar die Anweisung ausgeführt, aber die Funktion der Rückschrittaste (Löschen des letzten Zeichens) nicht ausgeführt.

      on backspacekey
         pass backspacekey
         Anweisung
      end backspacekey

      Dann wird die Funktion der Rückschrittaste zwar ausgeführt, nicht aber die folgenden Funktionen...

      Gute Nacht,

      Thorsten

    • #10054
      Klaus Major
      Keymaster

      Hi Thorsten,

      ja, -> pass wasauchimmer verlässt den Handler sofort, alles Weitere wird nicht ausgeführt.
      Der Trick ist, eine Anweisung zeitverzögert zu "send"en, bevor Du etwas "pass"t 😎

      on backspacekey
         send "Anweisung" to this cd in 10 millisecs
         ## Sofern der Handler im aktuellen Kartenskript liegt.
         ## Sie verstehen schon... :-)
         ## 10 millsekunden reichen völlig aus, denke ich.
         pass backspacekey
      end backspacekey

      Gruß

      Klaus

    • #10060
      Thorsten
      Teilnehmer

      Hi Klaus

      > ja, -> pass wasauchimmer verlässt den Handler sofort, alles Weitere wird nicht ausgeführt.
      > Der Trick ist, eine Anweisung zeitverzögert zu "send"en, bevor Du etwas "pass"t ?

      > on backspacekey
      > send "Anweisung" to this cd in 10 millisecs
      > ## Sofern der Handler im aktuellen Kartenskript liegt.
      > ## Sie verstehen schon... 🙂
      > ## 10 millsekunden reichen völlig aus, denke ich.
      > pass backspacekey
      > end backspacekey

      Ok, und wo stehen dann meine anderen Anweisungen ?
      Irgendwie ist das Ganze etwas komisch.
      Ich habe folgenden Workaround gewählt:

      on backspacekey
         put field "EingabeArznei" into Eingabe
         delete last char of Eingabe ## Übernahme der fehlenden Funktion
         answer Eingabe ## Aber das wird gar nicht angezeigt ?!?
         put Eingabe into field "EingabeArznei"
         put empty into field "Arzneien"
         hide widget "Browser"
         hide field "Anleitung"
         show field "Arzneien"
         repeat for each line l in field "ArzneiAbk"
            if space & Eingabe is in l then
               put l & return after field "Arzneien"
            end if
         end repeat
      end backspacekey

      Es wird zwar das letzte Zeichen der Eingabe gelöscht, aber der Cursor steht dann zu Beginn der Eingabe und das Feld "Arzneien" erscheint nicht ?!?

      Danke für Deine Bemühungen !

    • #10062
      Thorsten
      Teilnehmer

      Hi Klaus

      Ich habe jetzt noch einen anderen Workaround gefunden (nachdem ich erst sehr viele Ersetzungen zum Vervollständigen der mit - Deteinamen eingebaut hatte):
      Ich habe jetzt in den Dateinamen den - durch den _ ersetzt und damit wird die ganze Zeichenfolge als Word erkannt. Es ist zwar optisch etwas unschön, aber dafür funktioniert es.

      Jetzt aber gute Nacht,

      Thorsten

    • #10067
      Klaus Major
      Keymaster

      Ach so! 😀

      Sorry, ich hatte das aber sowas von falsch verstanden, ich dachte, Du hättest einen Handler namens "Anweisung" irgendwo im Message Pfad, so sorry! 🙂

      So würde es klappen, das hier ins Kartenskript:

      command anweisung
         put empty into field "Arzneien"
         hide widget "Browser"
         hide field "Anleitung"
         show field "Arzneien"
      
         ## Ganz wichtig, wenn Du felder updaten willst:
         lock screen
         repeat for each line l in field "ArzneiAbk"
            if space & Eingabe is in l then
               put l & return after field "Arzneien"
            end if
         end repeat
         
         ## Und wieder:
         unlock screen
         ## Der verhundertfacht das Updaten des Feldes, da der Screen 
        ## Nur einmal am Ende des Loops aktualisiert werden muss.
        ## Das ist besonders spürbar bei wirklich großen Mengen an Daten,
        ## das Verb "verhundertfacht" ist wirklich nicht gelogen.
      
        ## Ist bei Dir hier vielleicht nicht unbedingt spürbar, 
        ## aber wirklich guter Skripting Stil.
      end anweisung

      Das hier ins Feldskript und alles ist wieder wunderbar 🙂

      on backspacekey
         send "Anweisung" to this cd in 10 millisecs
         pass backspacekey
      end backspacekey
Ansicht von 17 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.