我有一个工具提示,我希望它显示更详细的信息,如果按下/按住SHIFT键。到目前为止,下面的代码可以正常工作:
function myAddonFrame_OnEnter(self)
myAddon_GenerateTooltip(self)
end
function myAddonFrame_OnLeave(self)
GameTooltip:Hide()
end
function myAddon_GenerateTooltip(self)
GameTooltip:SetOwner(self or UIParent, "ANCHOR_LEFT")
GameTooltip:SetText(“myAddon”, 0.7, 0, 1)
GameTooltip:AddLine(" ", 1, 1, 1)
if IsShiftKeyDown() then
-- Show some more details, if the SHIFT key is pressed.
GameTooltip:AddLine(“Some detailed stuff about god and the world.”, 1, 1, 1)
GameTooltip:AddLine(“Even more great stuff to read.”, 0.9, 0.8, 0.1, 1)
else
-- Basic information to be displayed when no button is pressed.
GameTooltip:AddLine(“Some basic information. Yaaay!“, 1, 1, 1)
GameTooltip:AddLine(" ", 1, 1, 1)
GameTooltip:AddLine(“Hold SHIFT for more information…”, 0.5, 0.5, 0.5)
end
GameTooltip:Show()
end
但这只适用于在鼠标悬停在myAddonFrame上之前按住SHIFT键。即使在释放SHIFT之后,只要鼠标光标停留在myAddonFrame上,它也会显示详细信息。但我希望它是动态的!
我的问题是:
当鼠标光标停留在框架上时,如何使工具提示根据SHIFT键自行刷新?
我的想法是,当我在《魔兽世界》中将鼠标悬停在一件物品上时,只要我按住SHIFT键,该物品就会与我目前的穿着进行比较。我想要完全相同的效果,只是在相同的工具提示。
哦,当我们谈论工具的时候…这里有一个额外的问题:
能不能稍微调整一下格式?粗体、斜体、字体大小、一行中单个单词的颜色变化等?我没有发现任何特别的东西在这里(wowprogramming.com),但也许我忽略了它。
—SOLVED—
对解决方案感兴趣的人:
我使用了Nathanyel的代码片段并对其进行了一些调整。因为我为所有框架使用一个XML文件,为函数使用一个相应的LUA文件,所以我不想在那里创建一个新框架。但是我找到了一种方法,可以使用现有的myAddonFrame
作为动态工具提示。
我的代码从上面的工作完美,我只需要添加以下内容:
-- [ALL THE CODE ABOVE!]
function myAddonFrame_OnLoad(frame)
frame:RegisterEvent("MODIFIER_STATE_CHANGED") -- Needed for the dynamic tool tip.
end
function myAddonFrame_OnEvent(frame, event, ...)
-- Fired, when any keyboard key is pressed.
local key, state = select(1, ...)
if (event == "MODIFIER_STATE_CHANGED") then
-- Switch the dynamic tooltip when the SHIFT key is held.
if myAddonFrame:IsMouseOver() and ((key == "LSHIFT") or (key == "RSHIFT")) then
myAddon_GenerateTooltip(frame)
end
end
end
就是这样!感谢Nathanyel的思想食粮。:)
该事件确实是关键,但由于您需要将其注册到一个框架,最好是受代码影响的框架,因此您应该为工具提示使用一个新框架:
local myFrame = CreateFrame("GameTooltip","myFrame",UIParent,"GameTooltipTemplate")
myFrame:SetScript("OnEvent",function(self, event, arg, ...)
if myFrame:IsShown()
and event == "MODIFIER_STATE_CHANGED"
and (arg = "LSHIFT" or arg = "RSHIFT") then
myAddon_GenerateTooltip() -- might need a parameter
end
end
myFrame:RegisterEvent("MODIFIER_STATE_CHANGED")
这只是在按下Shift键时重新填充工具提示,您的函数可以对键的新状态做出反应。
餐巾纸代码,斜线一些复制& &;粘贴从我使用这种方法的插件,所以它可能不是完美的,但足以传达的概念。