3

私たちの Flex アプリはブラウザー ウィンドウに合わせて自動的にサイズ変更されます。さまざまなスケーリングの問題に非常に簡単に対処しましたが、残っているのはツールチップです。画面上の間違った場所に表示され、ウィンドウ サイズに基づいて適切にスケーリングされません。ツールチップは自動的に配置されるため、これにどのように対処すればよいでしょうか?

明確にするために、組み込みのフレックス ツールチップを使用しています。そして問題は、ツールチップが表示されたときにアプリのサイズが変更されたときにツールチップが動かないことではありません。アプリのサイズを変更すると、他のすべてが自動的に正しく更新されても、ツールチップがすべて間違った場所に表示されるようになります。

4

4 に答える 4

3

これに対する解決策が見つかったかどうかはわかりませんが、より簡単なアプローチがあります。このコードは、キャプチャ フェーズ中 (表示前) に tooltip-show イベントにフックし、含まれる要素 (「この」場合はドキュメント) のスケールに基づいて適切にスケールおよび配置しparentApplicationます。また、私の場合、スケーリング時にツールチップがステージから外れないようにするのに役立つコードも少し含まれています (そのため、最初の数行だけが必要になる場合がありますt.scaleX) t.scaleY

import mx.events.ToolTipEvent;

addEventListener(ToolTipEvent.TOOL_TIP_SHOW, handleToolTipShow, true, 0, true);

private function handleToolTipShow(event:ToolTipEvent):void
{
    if (event && event.toolTip)
    {
        var t:IToolTip = event.toolTip;

        // Scale the tip itself
        t.scaleX = this.scaleX;
        t.scaleY = this.scaleY;

        // Scale the offsets
        var xOffset:int = 10 * this.scaleX;
        var yOffset:int = 10 * this.scaleY;

        // Set the default positioning 
        t.x = parent.mouseX + xOffset;
        t.y = parent.mouseY + yOffset;

        // Set the adjusted height and width
        var th:Number = t.height * this.scaleX;
        var tw:Number = t.width * this.scaleY;

        var rightEdge:int = t.x + tw + xOffset;
        var playerRightEdge:int = parent.width;
        var bottomEdge:int = t.y + th + yOffset;
        var playerBottomEdge:int = parent.height;

        // Offscreen right
        if (rightEdge > playerRightEdge)
        {
            t.move(parent.mouseX - xOffset - tw, parent.mouseY + yOffset);
        }

        // Offscreen bottom
        if (bottomEdge > playerBottomEdge)
        {
            t.move(parent.mouseX + xOffset, parent.mouseY - yOffset - th);
        }
    }
}
于 2008-12-31T18:52:06.597 に答える
0

がステージ上の位置を変更するタイミングToolTipManagerを認識していないため、この問題に対する優れた解決策はないと思います。修正は、ほとんど Flex Framework 自体に適用する必要があります。動作しているように見えるものをまとめましたが、Flex Framework にモンキーパッチを適用する必要があります。currentTargetToolTip

  1. 作成したパッケージmx.managers.ToolTipManager.asのプロジェクトにコピーします。mx.managers

  2. このメソッドをファイルの末尾に追加します。

    public static function positionToolTip() : void {
        ToolTipManagerImpl(impl).positionTip();
    }
    
  3. アプリケーションのサイズ変更イベントでこのメソッドを呼び出します。

于 2008-12-20T05:11:26.200 に答える
0

http://strutsforflex.blogspot.com/2008/03/how-to-set-custom-tooltipmanager.html はるかにシンプル

于 2009-12-29T03:50:51.893 に答える
0

contentToGlobal() を使用して座標をグローバルに変換してみてください

于 2009-06-17T06:46:34.377 に答える