我們的Flex應用程序會自動調整瀏覽器窗口的大小,我們已經很容易地解決了一大堆縮放問題,但剩下的就是提示。它們顯示在屏幕上的錯誤位置,沒有根據窗口大小正確縮放。由於工具提示自動定位,我們如何解決這個問題?Flex Tooltip在可調整大小的應用程序中定位
爲了說明我正在使用內置的flex工具提示。問題不在於當應用在顯示時調整大小時,工具提示不會移動。這就是說,如果我調整應用程序的大小,即使其他所有內容都能正確自動更新,工具提示現在也會顯示在錯誤的位置。
我們的Flex應用程序會自動調整瀏覽器窗口的大小,我們已經很容易地解決了一大堆縮放問題,但剩下的就是提示。它們顯示在屏幕上的錯誤位置,沒有根據窗口大小正確縮放。由於工具提示自動定位,我們如何解決這個問題?Flex Tooltip在可調整大小的應用程序中定位
爲了說明我正在使用內置的flex工具提示。問題不在於當應用在顯示時調整大小時,工具提示不會移動。這就是說,如果我調整應用程序的大小,即使其他所有內容都能正確自動更新,工具提示現在也會顯示在錯誤的位置。
我不認爲有這個問題的一個很好的解決方案,因爲ToolTipManager
不知道currentTarget
爲ToolTip
更改舞臺上的位置。該解決方案几乎必須進入Flex框架本身。我將一些似乎可行的東西封存在一起,但它需要修改Flex框架。
複製mx.managers.ToolTipManager.as
到創建mx.managers
包項目。
將此方法添加到文件的底部。
public static function positionToolTip() : void {
ToolTipManagerImpl(impl).positionTip();
}
在您的應用程序的resize事件中調用此方法。
不知道你是否找到了這個解決方案,但有一個更簡單的方法。這段代碼在捕獲階段(在顯示之前)鉤住工具提示顯示事件,根據包含元素的比例來適當縮放和放置它 - 在「本」情況下,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);
}
}
}
嘗試轉換使用contentToGlobal座標到全球()
您使用的是內置的工具提示或您自己的? – PEZ 2008-12-19 14:47:59