FC2ブログ
googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Flex3]コンボボックスのツールチップ2011-01-06(Thu)

今回はFlexのコンボボックスに表示されるツールチップの表示位置についてです。

前回までは・・・ありません。

ということで、ListItemRendererです!

ComboBoxのプロパティにある[itemRenderer]のデフォルトは
ListItemRendererなのですが、このままだと表示位置が非常に邪魔なところにでてくる。

リストの上に見事に被さってくれます。

なので、見易くするために手っ取り早くListItemRendererをextendsして
新しく作ります。

。。。で、できたのがこれ。
-------------------------------------------------
ex.components.renderer.NewListItemRenderer
-------------------------------------------------

package ex.components.renderer
{
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;

import mx.controls.listClasses.ListItemRenderer;
import mx.core.IToolTip;
import mx.events.InterManagerRequest;
import mx.events.ToolTipEvent;
import mx.managers.ISystemManager;
import mx.managers.ToolTipManager;

public class NewListItemRenderer extends ListItemRenderer
{
public function NewListItemRenderer()
{
super();
addEventListener(MouseEvent.MOUSE_MOVE, itemRendererMouseMoveHandler);
}

/**
* Positions the ToolTip object.
*
* @param The Event object.
*/
override protected function toolTipShowHandler(event:ToolTipEvent):void
{
var toolTip:IToolTip = event.toolTip;

// Calculate global position of label.
var sm:ISystemManager = systemManager.topLevelSystemManager;
var sbRoot:DisplayObject = sm.getSandboxRoot();
var screen:Rectangle;
var pt:Point = new Point(mouseX, mouseY);
pt = label.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);

}

/**
* マウス移動時のイベントハンドラ
* @param event
*/
protected function itemRendererMouseMoveHandler(event:MouseEvent):void {
var currentToolTip:IToolTip = ToolTipManager.currentToolTip;
if (!currentToolTip)
return;

// 表示位置に合わせてツールチップを再作成する
var tooltipEvent:ToolTipEvent = new ToolTipEvent(ToolTipEvent.TOOL_TIP_SHOW);
tooltipEvent.toolTip = currentToolTip;
dispatchEvent(tooltipEvent);
}

}
}


やってる内容は、元のtoolTipShowHandlerの
protected function toolTipShowHandler(event:ToolTipEvent):void
{
  var pt:Point = new Point(0, 0);
:
}

override protected function toolTipShowHandler(event:ToolTipEvent):void
{
  var pt:Point = new Point(mouseX, mouseY);
:
}
に変更して、表示位置をマウスの位置に移動。

あと、マウスの動きに合わせてチップを移動させました。

public function NewListItemRenderer()
{
  super();
  addEventListener(MouseEvent.MOUSE_MOVE, itemRendererMouseMoveHandler);
}

itemRendererMouseMoveHandlerの、ToolTipManager.currentToolTipで表示中のツールチップを取ってきて
表示位置を変更するために、TOOL_TIP_SHOWイベントを発行してます。

関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

コメント

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。