2016-11-04 3 views
1

ツールチップがあり、Shiftキーが押されていれば、より詳細な情報が表示されます。次のコードは、これまでの作品:WoW Addon - キーが押されている間の動的なツールチップ

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キーが保持されている場合のみ動作。また、マウスカーソルがmyAddonFrame上にある限り、SHIFTを放しても詳細情報が表示されます。しかし、私はそれがダイナミックにしたい!ここ

私の質問は:
どうすればマウスカーソルが枠にとどまるとき、ツールチップは、SHIFTキーに従って自分自身をリフレッシュすることができますか?
私はWoWのアイテムにカーソルを置いて、SHIFTキーを押している間だけ、そのアイテムが現在着用しているアイテムと比較されるようなことに気付いています。私はちょうど同じツールチップ内で、この効果を正確に欲しいです。

誰かが正しい方向に私を押し込むことができることを願っています。私はMODIFIER_STATE_CHANGEDを使ってみましたが、うまく動作しませんでした。

ああ、と私たちはtoolipsについて話している間に...ここにボーナス質問です:
は彼らに少しをフォーマットすることが可能ですか?太字、イタリック、フォントサイズ、ライン内の1つの単語のカラーチェンジなど?私は特にhere (wowprogramming.com)を見つけられませんでしたが、多分私はそれを見落としました。溶液に関心ものについて解か

--- ---

IはNathanyelのコードスニペットを使用し、それを少し調整しました。私はすべてのフレームに1つのXMLファイルを使用し、関数に対応する1つの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に感謝します。 :)あなたがツールチップのための新しいフレームを使用する必要があり、

答えて

0

このイベントは確かにキーですが、フレームにそれを登録する必要がありますように、コードの影響を受け、好ましくは、1:

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キーを押したときにツールチップを再入力するだけで、関数がキーの新しい状態に反応します。
ナプキンコードスラッシュコピー&私はこのメソッドを使用したアドオンからペーストしているので、完璧ではないかもしれませんが、コンセプトを伝えるのに十分です。

+1

MODIFIER_STATE_CHANGEDに試してみると、私はいつも同じフレームを使用していました(実際、このアドオンは現在1つの単一フレームのみで構成されています)。それはいつも問題だったかもしれません。私はあなたのアプローチを今夜試してみて、結果を教えてあげます。ありがとうございました! :) – nehegeb

+1

まあ、それは本当に助けて!私は上記の質問に最終的な解決策を統合しました。再度、感謝します! – nehegeb

関連する問題