2014-01-11 3 views
0

Я использую flex sdk 3.6 Я использую всплывающую подсказку на datagrid. Эта подсказка html с некоторыми HTTP-ссылками. когда я перемещаю мышь над всплывающей подсказкой всплывающей подсказкиflex links html in tooltip

может быть какая-то идея?

моего исходный код подсказки

package com 
{ 
    import mx.controls.ToolTip; 

    public class HTMLToolTip extends ToolTip 
    { 
     public function HTMLToolTip() 
     { super(); } 


     override protected function commitProperties():void{ 
      super.commitProperties(); 
      textField.htmlText = text; 
     } 
    } 
} 

ответ

0

ваши может таможню ItemRenderer и подсказка рендерер, а затем следить за событиями MOUSE_OUT и MOUSE_OVER.

i упаковываю эти функции в класс.

public class ToolTipUtil 
{ 
    /** 
    * register a tip 
    * 
    * @param target 
    * @param toolTipClazz 
    * 
    */  
    public static function registerTipsClass(target:IUIComponent, toolTipClazz:Class):void 
    { 
     var toolTip:IUIComponent = new toolTipClazz(); 
     registerTips(target, toolTip); 
    } 

    /** 
    * register a tip 
    * 
    * @param target 
    * @param toolTip 
    * 
    */  
    public static function registerTips(target:IUIComponent, toolTip:IUIComponent):void 
    { 
     toolTip.visible = false; 
     PopUpManager.addPopUp(toolTip, DisplayObject(target)); 

     target.addEventListener(MouseEvent.MOUSE_OVER, function mouseOverHandler(event:MouseEvent):void 
     { 
      if (!toolTip.visible) 
      { 
       toolTip.visible = true; 
       showTipsOnMouse(target, toolTip); 
      } 
     }); 

     target.addEventListener(MouseEvent.MOUSE_OUT, function mouseOutHandler(event:MouseEvent):void 
     { 
      if (toolTip.visible) 
       toolTip.visible = false; 
     }); 
    } 

    /** 
    * toolTip show on the target 
    * 
    * @param target IUIComponent 
    * @param toolTip IUIComponent 
    * 
    */  
    public static function showTipsOnTarget(target:IUIComponent, toolTip:IUIComponent):void 
    { 
     var height:Number = target.height; 
     var systemManager:ISystemManager = target.systemManager; 
     // Calculate global position of label. 
     var sm:ISystemManager = systemManager.topLevelSystemManager; 
     var sbRoot:DisplayObject = sm.getSandboxRoot(); 
     var screen:Rectangle; 
     var pt:Point = new Point(0, 0); 
     pt = target.localToGlobal(pt); 
     pt = sbRoot.globalToLocal(pt);   

     toolTip.move(pt.x, pt.y + (height - toolTip.height)/2); 

     if (sm != sbRoot) 
     { 
      var request:InterManagerRequest = new InterManagerRequest(InterManagerRequest.SYSTEM_MANAGER_REQUEST, 
       false, false, 
       "getVisibleApplicationRect"); 
      sbRoot.dispatchEvent(request); 
      screen = Rectangle(request.value); 
     } 
     else 
      screen = sm.getVisibleApplicationRect(); 

     var screenRight:Number = screen.x + screen.width; 
     pt.x = toolTip.x; 
     pt.y = toolTip.y; 
     pt = sbRoot.localToGlobal(pt); 
     if (pt.x + toolTip.width > screenRight) 
      toolTip.move(toolTip.x - (pt.x + toolTip.width - screenRight), toolTip.y); 
    } 

    /** 
    * toolTip show under the mouse 
    * 
    * @param target IUIComponent 
    * @param toolTip IUIComponent 
    * 
    */  
    public static function showTipsOnMouse(target:IUIComponent, toolTip:IUIComponent):void 
    { 
     var systemManager:ISystemManager = target.systemManager; 
     var sm:ISystemManager = systemManager.topLevelSystemManager; 
     var sbRoot:DisplayObject = sm.getSandboxRoot(); 

     var screenWidth:Number = systemManager.screen.width; 
     var screenHeight:Number = systemManager.screen.height; 
     // Position the upper-left of the tooltip 
     // at the lower-right of the arrow cursor. 
     var x:Number = DisplayObject(systemManager).mouseX + 11; 
     var y:Number = DisplayObject(systemManager).mouseY + 22; 

     // If the tooltip is too wide to fit onstage, move it left. 
     var toolTipWidth:Number = toolTip.width; 
     if (x + toolTipWidth > screenWidth) 
      x = screenWidth - toolTipWidth; 

     // If the tooltip is too tall to fit onstage, move it up. 
     var toolTipHeight:Number = toolTip.height; 
     if (y + toolTipHeight > screenHeight) 
      y = screenHeight - toolTipHeight; 

     var pos:Point = new Point(x, y); 
     pos = DisplayObject(systemManager).localToGlobal(pos); 
     pos = DisplayObject(sbRoot).globalToLocal(pos); 
     toolTip.move(pos.x, pos.y); 
    } 
} 

}

+0

Вы можете добавить образец, чтобы использовать его в datagrid, в моей программе использовался ToolTipManager.toolTipClass = ToolTipUtil; но ничего не появляется, спасибо – goldstark

0

попробовать это, он будет создавать только один HTMLToolTip, а затем, если вы хотите изменить содержание при наведении на разные строки, вы можете установить данные в HTMLToolTip, чтобы изменить содержание.

private var htmlToolTip:HTMLToolTip = new HTMLToolTip(); 

     protected function datagrid1_itemRollOverHandler(event:ListEvent):void 
     { 
      ToolTipUtil.showTipsOnMouse(event.itemRenderer, htmlToolTip); 
      htmlToolTip.data = event.itemRenderer.data; 
      htmlToolTip.visible = true; 
     } 

     protected function datagrid1_itemRollOutHandler(event:ListEvent):void 
     { 
      htmlToolTip.visible = false;     
     } 

     protected function datagrid1_creationCompleteHandler(event:FlexEvent):void 
     { 
      // TODO Auto-generated method stub 
      htmlToolTip.visible = false; 
      PopUpManager.addPopUp(htmlToolTip, Application.application as DisplayObject); 
     } 

<mx:DataGrid dataProvider="{dataArray}" itemRollOver="datagrid1_itemRollOverHandler(event)" 
      itemRollOut="datagrid1_itemRollOutHandler(event)" 
      creationComplete="datagrid1_creationCompleteHandler(event)"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Title" dataField="label"> 
     </mx:DataGridColumn> 
    </mx:columns> 
</mx:DataGrid> 
+0

, когда я перемещаю мышь, чтобы всплывающая подсказка исчезла. он не работает для меня – goldstark

+0

ли содержимое всплывающей подсказки будет меняться при наведении указателя мыши на itemRenderer или на всплывающую подсказку datagrid? вы можете просто, когда мышь над datagird, а затем показать всплывающую подсказку, подсказка добавить FlexMouseEvent.MOUSE_DOWN_OUTSIDE listner, чтобы скрыть всплывающую подсказку –

+0

изменение подсказки при перемещении мыши в другую строку в datagrid – goldstark