2016-11-04 11 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 

그러나 Shift 키가 유지되는 경우에만 이렇게 마우스가 myAddonFrame을 가져갈 전에. 또한 마우스 커서가 myAddonFrame에 남아있는 한 SHIFT를 해제 한 후에도 자세한 정보를 표시합니다. 그러나 나는 그것이 역동적 이길 원한다! 여기

내 질문은 :
가 어떻게 마우스 커서가 프레임에 유지하면 툴팁이 SHIFT 키에 따라 자체를 새로 만들 수 있습니까?
와우에서 항목 위로 마우스를 가져 가면 Shift 키를 누르고있는 동안 만 해당 항목이 현재 착용하고있는 항목과 비교됩니다. 같은 툴팁 내에서 정확하게이 효과를 원합니다.

누군가가 올바른 방향으로 나를 밀어 줄 수 있기를 바랍니다. MODIFIER_STATE_CHANGED을 사용해 보았지만 작동시키지 못했습니다.

우리가 toolips에 대해 이야기하는 동안

아, 그리고 ... 여기에 보너스 질문 :
이 그들에게 약간의 서식을 가능은? 굵은 체, 이탤릭체, 폰트 크기, 줄의 한 단어에 대한 색 변경 등? 나는 특별한 것을 찾지 못했다 here (wowprogramming.com),하지만 아마도 그것을 간과했다. 이 솔루션에 관심이있는 사람의 경우이 해결

--- ---
:

나는 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에게 감사드립니다. :)

답변

0

그 사건은 참으로 중요합니다,하지만 당신은 프레임에 등록해야로서, 바람직하게는 코드에 의해 영향을받는 사람은, 당신은 당신의 툴팁을위한 새로운 프레임을 사용해야합니다

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를 시도하는 동안 나는 항상 동일한 프레임을 사용했습니다. 실제로이 추가 기능은 지금 단 하나의 단일 프레임으로 구성됩니다. 그것은 항상 문제 였을 것입니다. 나는 당신의 접근 방식을 오늘 밤 시도하고 내 결과를 말할 것입니다. 지금 고마워! :) – nehegeb

+1

글쎄, 정말 도움이! 위의 질문에 최종 해결책을 통합했습니다. 다시 한 번 감사드립니다! – nehegeb