Startseite › Foren › Deutsches LiveCode-Forum › mouseword ???
- Dieses Thema hat 17 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren von Klaus Major.
-
AutorBeiträge
-
-
Januar 16, 2019 um 00:29 Uhr #9986
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
-
Januar 16, 2019 um 00:34 Uhr #9988
Das Gleiche gilt für eine Zeile in einer Liste.
mouseline gibt es scheinbar auch nicht 🙁 -
Januar 16, 2019 um 13:13 Uhr #10004
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
-
Januar 16, 2019 um 22:17 Uhr #10019
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
-
Januar 16, 2019 um 22:28 Uhr #10021
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.
-
Januar 17, 2019 um 00:44 Uhr #10023
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.
-
Januar 17, 2019 um 01:30 Uhr #10025
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. 😉
-
Januar 17, 2019 um 01:40 Uhr #10027
> 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 !
-
Januar 17, 2019 um 12:38 Uhr #10029
Erzähl doch mal mehr darüber, was Du vorhast, da finden wir sicher eine bessere Lösung!
-
Januar 17, 2019 um 16:12 Uhr #10037
> 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
-
Januar 17, 2019 um 16:24 Uhr #10039
Zeig doch mal den Inhalt Deiner Liste und ein paar Deiner verwendeten Skripte.
-
Januar 17, 2019 um 18:16 Uhr #10041
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
-
Januar 17, 2019 um 19:05 Uhr #10043
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
-
Januar 18, 2019 um 00:34 Uhr #10052
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
-
Januar 18, 2019 um 00:42 Uhr #10054
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
-
Januar 18, 2019 um 01:09 Uhr #10060
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 backspacekeyOk, 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 !
-
Januar 18, 2019 um 01:31 Uhr #10062
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
-
Januar 18, 2019 um 03:37 Uhr #10067
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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.