العثور على كلمة الماوس فوق لمكون النص (فليكس / أكشن)
-
03-07-2019 - |
سؤال
هل من الممكن (إذا كان الأمر كذلك كيف) لمعرفة ما هو كلمة المؤشر / الماوس فوق عندما تتحرك على: عنصر وشكرا على اي معلومات.
المحلول
وهنا طريقة واحدة للقيام بذلك: تحتاج إلى إنشاء مكون الخاص الذي يمتد MX: عنصر نص. كنت MyText
في هذا المثال. هنا هو رمز الكامل لMyText
:
<?xml version="1.0" encoding="utf-8"?>
<mx:Text xmlns:mx="http://www.adobe.com/2006/mxml" mouseMove="onMouseMove(event)" initialize="init()">
<mx:Script>
<![CDATA[
// Text formats
private var normalTextFormat:TextFormat;
private var highlightTextFormat:TextFormat;
// Saved word start and end indexes
private var wordStartIndex:int = -1;
private var wordEndIndex:int = -1;
private function init():void
{
normalTextFormat = textField.getTextFormat();
normalTextFormat.color = 0;
highlightTextFormat = textField.getTextFormat();
highlightTextFormat.color = 0xFF0000;
}
private function onMouseMove(event:MouseEvent):void
{
// Clear previous word highlight
textField.setTextFormat(normalTextFormat, wordStartIndex, wordEndIndex);
var charIndexUnderMouse:int = textField.getCharIndexAtPoint(event.localX, event.localY);
wordStartIndex = charIndexUnderMouse;
wordEndIndex = charIndexUnderMouse;
// Find start of word
while (text.charAt(wordStartIndex) != " " && wordStartIndex > 0)
{
wordStartIndex--;
}
// Find end of word
while (text.charAt(wordEndIndex) != " " && wordEndIndex < text.length)
{
wordEndIndex++;
}
// Highlight character
textField.setTextFormat(highlightTextFormat, wordStartIndex, wordEndIndex);
}
]]>
</mx:Script>
</mx:Text>
وانه يعمل من خلال الوصول إلى أساليب الكائن الحقل النصي داخل عنصر النص، والعثور على مؤشر الطابع تحت إحداثيات الماوس ومن ثم العثور على كلمة الطابع ينتمي إليها. هذا هو مثال سريع، وربما كنت بحاجة لجعله أكثر تفصيلا للاستخدام العالم الحقيقي.
نصائح أخرى
وتحتاج إلى استخدام فئة TextSnapshot. يمكنك الاستيلاء عليها من سيطرة النص من الممتلكات textSnapshot. TextSnapshot لديه وظيفة hitTestTextNearPos () التي يمكنك استخدامها لتحديد الطابع الماوس المستخدم قريب.
...
var startIndex:Number;
...
private function textMouseMoveHandler(event:MouseEvent):void
{
var snapshot:TextSnapshot = text.textSnapshot;
var index = snapshot.hitTestTextNearPos(event.x, event.y);
snapshot.setSelected(startIndex, index, true);
}
// I do not know how you want to begin the selection, so I put it here in the MouseEnter event.
private function textMouseEnterHandler(event:MouseEvent):void
{
var snapshot:TextSnapshot = text.textSnapshot;
startIndex = snapshot.hitTestTextNearPos(event.x, event.y);
}
ولست متأكدا كيف تريد للتعامل مع البدء في الاختيار، ولكن شيئا من هذا القبيل يجب أن تعمل.