2016-11-04 2 views
1

Ich habe einen Tooltip und ich möchte, dass er detailliertere Informationen anzeigt, wenn die SHIFT Taste gedrückt gehalten wird. Der folgende Code funktioniert so weit:WoW Addon - Dynamischer Tooltip, während die Taste gedrückt wird

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 

Das funktioniert aber nur, wenn die SHIFT-Taste gedrückt wird, bevor die Maus schwebt die myAddonFrame. Es wird auch die detaillierten Informationen anzeigen, selbst wenn Sie SHIFT loslassen, solange der Mauszeiger auf dem myAddonFrame bleibt. Aber ich will es dynamisch!

Meine Frage hier ist:
Wie kann ich die Tooltip machen Schlüssel aktualisieren sich nach der SHIFT, wenn der Mauszeiger auf dem Rahmen bleibt?
Ich habe etwas im Sinn, wenn ich über einen Gegenstand in WoW schwebe und nur solange ich die SHIFT Taste halte, wird dieser Gegenstand mit dem verglichen, was ich gerade trage. Ich möchte genau diesen Effekt, nur im selben Tooltip.

Ich hoffe, dass jemand mich in die richtige Richtung schieben kann. Ich habe versucht, MODIFIER_STATE_CHANGED zu verwenden, aber ich habe es nicht funktioniert.

Oh, und während wir über toolips sprechen werden ... hier ist ein Bonus-Frage:
Ist es möglich, sie ein wenig zu formatieren? Fett, kursiv, Schriftgröße, Farbänderungen für ein einzelnes Wort in einer Zeile usw.? Ich habe nichts besonderes gefunden here (wowprogramming.com), aber vielleicht habe ich es übersehen.

--- --- GELÖST
Für die, die in der Lösung interessiert:

ich verwendet, um den Code-Schnipsel von Nathanyel und es ein wenig angepasst. Da ich nur eine XML-Datei für alle Frames und eine entsprechende LUA-Datei für die Funktionen verwende, wollte ich dort keinen neuen Frame erstellen. Aber ich habe einen Weg gefunden, den vorhandenen myAddonFrame auch für den dynamischen Tooltip zu verwenden.
Mein Code oben von perfekt funktioniert und ich hatte nur folgendes hinzufügen:

-- [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 

Das ist es! Danke an Nathanyel für den Denkanstoß. :)

Antwort

0

Dieses Ereignis ist in der Tat der Schlüssel, aber wie Sie es an einem Rahmen registrieren müssen, vorzugsweise die eine durch den Code betroffen ist, sollten Sie einen neuen Rahmen für Ihren Tooltip verwenden:

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") 

Diese fügt einfach den Tooltip erneut ein, wenn eine der Umschalttasten gedrückt wird, und Ihre Funktion kann auf den neuen Status des Schlüssels reagieren.
Servietten Code, slash einige Kopie & Paste aus einem Addon, wo ich diese Methode verwendet, so dass es nicht perfekt sein könnte, aber genug, um das Konzept zu vermitteln.

+1

Während ich den MODIFIER_STATE_CHANGED versuchte, benutzte ich immer den gleichen Frame (tatsächlich besteht dieses Addon im Moment aus nur einem einzigen Frame). Das könnte die ganze Zeit das Problem gewesen sein. Ich werde heute Abend einen Versuch machen und Ihnen meine Ergebnisse erzählen. Danke für jetzt! :) – nehegeb

+1

Nun, das hat wirklich geholfen! Ich habe die letzte Lösung in die obige Frage integriert. Danke noch einmal! – nehegeb

Verwandte Themen