Probleme mit DropDownMenu

Mitglied seit
13.07.2012
Beiträge
4
Reaktionspunkte
0
Das Dropdown Menu wird fehlerfrei dargestellt. Zummindest denke ich das. :-) Ich habe nicht soviel Ahnung von Addonsprogrammierung, da ich mich lieber mit C beschäftgt habe.
Ich stelle mal hinein, was ich aus einigen Foren erlesen konnte und, was daraus entstanden ist. :-) Mein Problem ist, dass er auf den Klick nicht so reagiert wie er sollte. Eigendlich sollte er anhand der in Table vorhandenen Strings Beispiel: Table={String1,String2,String3} die Auswahl an den Partner senden. So wähle ich String 2 drücke drauf und bekomme anhand von prints immer die Meldung nil (Name) nim (Value) nil(id) <--- letzteres habe ich auch garnicht deklariert. :-)

Addon.lua
Code:
function DropDownMenu_Initialize()
for i,v in pairs(Table) do
local info = UIDropDownMenu_CreateInfo();
info = {};
info.text = Table[i];
info.value = Table[i];
info.func = Foo; --This function is ran when you select the option
UIDropDownMenu_AddButton(info,1);
end
end 

function Foo()

local optionName =  UIDropDownMenu_GetText(DropDownMenu);
UIDropDownMenu_SetSelectedValue(DropDownMenu, optionName);
--- hier kommt halt die SendchatMessage(..)
end
Addon.xml
Code:
	<Frame name="DropDownMenu" inherits="UIDropDownMenuTemplate" id="124">
		<Anchors>
				<Anchor point="CENTER">
					<Offset x="10" y="-75" />
				</Anchor>
			</Anchors>
		<scripts>
			<OnLoad>
				UIDropDownMenu_Initialize(DropDownMenu, DropDownMenu_Initialize);
			</OnLoad>
			<OnShow>
				UIDropDownMenu_Initialize(DropDownMenu, DropDownMenu_Initialize);
			</OnShow>
		</Scripts>
	</Frame>
 
die Variable ist Lokal. Das ist als hättest du die Variable in einer Funktion in C erstellt und versuchst sie in int main aufzurufen. Für events benutze bitte kein XML, ist nicht all zu schön.
 
Zuletzt bearbeitet von einem Moderator:
die Variable ist Lokal. Das ist als hättest du die Variable in einer Funktion in C erstellt und versuchst sie in int main aufzurufen. Für events benutze bitte kein XML, ist nicht all zu schön.
Schönen dank erstmal für deine Antwort. Ich habe nun die info als Globalevariable. Weiterhin bleibt das Problem bestehen. Ich weiß nach all den vielen Meinungen und schreibweisen im Internet garnicht mehr wie ich daraus nun eine SendChatMessage bauen soll. Welche Variable soll ich dafür nehmen? optionName ist (global) immernoch nil. Würdest du mir bitte helfen. :-)Habe nun bisweilen nur die Locals zu Globals gemacht.
 
Hier mal ein Beispiel:
Gerade nicht getestet (Kein Abo momentan ^^), sollte aber funktionieren. Ansonsten Fehlermeldung zeigen.
Code:
local Table = { "String1", "String2", "String3" };

local dropDownMenu = CreateFrame("Frame", "DropDownMenuXYZ", UIParent, "UIDropDownMenuTemplate");
dropDownMenu:SetPoint("CENTER");

local function dropDownMenu_Function(self)
	UIDropDownMenu_SetSelectedID(dropDownMenu, self:GetID());
	
	print("Text: "..tostring(UIDropDownMenu_GetText(dropDownMenu)).." - Value: "..tostring(self.value).." - ID: "..self:GetID());
end

local function dropDownMenu_Initialize()
	for _, tableText in next, Table do
		local info = UIDropDownMenu_CreateInfo();
		info.text = tableText;
		info.value = tableText;
		info.func = dropDownMenu_Function;
		UIDropDownMenu_AddButton(info);
	end
end

UIDropDownMenu_Initialize(dropDownMenu, dropDownMenu_Initialize);
UIDropDownMenu_SetSelectedID(dropDownMenu, 1);
 
Zuletzt bearbeitet von einem Moderator:
Sehr schön, es funktioniert. Aber ein Problem bleibt mir dann dennoch.Wie bekomme ich dieses Objekt jetzt in meinen hauptframe eingebunden. Bei Xml war das ja einfach reinsetzen. :-) Aber nun weiß ich nicht wie ich das in Lua mache. :-) Vielen lieben dank erstmal!

Edit: Habe nun herumexperimentiert.

Mein Frame mit dem ich es verbinden möchte heißt Verwaltungs_Frame.
Nun habe ich den Set Point verändert.

dropDownMenu:SetPoint("CENTER","Verwaltungs_Frame",10,-75);

Aber ich bekomme eine Fehlermeldung, dass er das Objekt bzw die Region nicht finden kann.

Fehlermeldung:
Date: 2012-07-14 11:10:27
ID: 1
Error occured in: Global
Count: 1
Message: ..\AddOns\Verwaltung\Verwaltung.lua line 71:
DropDownMenuXYZ:SetPoint(): Couldn't find region named 'Verwaltungs_Frame'
 
Zuletzt bearbeitet von einem Moderator:
Nimm die Anführungszeichen und Schlusszeichen weg. Falls immer noch ein Fehler besteht bitte den Script liefern wie du das Frame erstellst (auch Info mitgeben ob du es in einer anderen Datei erstellst).
 
Nimm die Anführungszeichen und Schlusszeichen weg. Falls immer noch ein Fehler besteht bitte den Script liefern wie du das Frame erstellst (auch Info mitgeben ob du es in einer anderen Datei erstellst).
Also mein Hauptframe liegt in einer XML Datei. Verwendung.xml und die Dropbox soll nun in diesen Frame gestellt werden so,dass ich wenn ich den Mainframe schließe auch die Dropbox schließen kann. Bisweilen hatte das ja auch sehr gut geklappt als ich das Dropmenu in Xml hatte konnte ich es ja direkt deklarieren. Habe die Anführungszeichen gelöscht aber was ist mit Schlusszeichen gemeint? Das ; hab ich, auch wenn ich net verstehe nun auch gelöst. Selbe Problem... die Position verändert sich abolsut nicht. Das Script gebe ich mal die Abgespreckte Version. :-) Knöpfe usw sind ja unrelevant.

Code:
<Ui xmlns="http://www.blizzard.com/wow/ui/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
 <script file="Verwaltung.lua"/> 
  <Frame name="Verwaltungs_Frame" strata="DIALOG" parent="UIParent" toplevel="true" movable="true" enableMouse="true" hidden="false">
	<scripts>
	</Scripts>  
	<TitleRegion>
		<Size x="210" y="230"/>
		<Anchors><Anchor point="TOP"/></Anchors>
	</TitleRegion>
	<Size>
		<AbsDimension x="420" y="230" />
	</Size>
	<Anchors>
		<Anchor point="CENTER" />
	</Anchors>
	<Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" title="true">
		<BackgroundInsets>
			<AbsInset left="11" right="12" top="12" bottom="11" />
		</BackgroundInsets>
		<EdgeSize>
			<AbsValue val="32" />
		</EdgeSize>
	</Backdrop>
	<Layers>
      <Layer level="ARTWORK">
        <Texture name="RBM_Mainframe_Header"
          file="Interface\DialogFrame\UI-DialogBox-Header">
          <Size>
            <AbsDimension x="260" y="64"/>
          </Size>
          <Anchors>
            <Anchor point="TOP">
              <Offset>
                <AbsDimension x="0" y="12"/>
              </Offset>
            </Anchor>
          </Anchors>
        </Texture>
		<!-- Frontstrings-->
      </Layer>
    </Layers>
	<Frames>
		<!-- Buttons-->
	</Frames>
  </Frame>
  </Ui>

Edit:
Nochmal den Lua script
Code:
local dropDownMenu = CreateFrame("Frame", "DropDownMenuXYZ", UIParent, "UIDropDownMenuTemplate");
dropDownMenu:SetPoint("Right",Verwaltungs_Frame,-150,300)

local function dropDownMenu_Function(self)
        UIDropDownMenu_SetSelectedID(dropDownMenu, self:GetID());
        print("Text: "..tostring(UIDropDownMenu_GetText(dropDownMenu)).." - Value: "..tostring(self.value).." - ID: "..self:GetID());
end

local function dropDownMenu_Initialize()
        for _, tableText in next, Table do
                local info = UIDropDownMenu_CreateInfo();
                info.text = tableText;
                info.value = tableText;
                info.func = dropDownMenu_Function;
                UIDropDownMenu_AddButton(info);
        end
end

UIDropDownMenu_Initialize(dropDownMenu, dropDownMenu_Initialize);
UIDropDownMenu_SetSelectedID(dropDownMenu, 1);

Edit 2:
Habe nun den Parameter im CreateFrame, der das Zielframe bestimmt auf das richtige Frame gelegt. Nun zeigt er ... ein kleines Stück des Dropdown Menus in der Mitte des Frames an... aber die hälfte ist immernoch auf dem Globalen Bildschirm. :-) Versuche mein bestes um zu helfen, entschuldigt,wen ich dabei noch etwas unbeholfen bin. :-D


Edit 3: Habe nun nochmal hingeschrieben wie ich es mit dem Zielframe meinte. Ich kann leider nicht alles in Lua schreiben. :-) Bin ich nicht wirklich gut drin. Gibt es wirklich keine möglichkeit die beiden zu verbinden? Wäre wirklich schade...
Code:
local dropDownMenu = CreateFrame("Frame", "DropDownMenuXYZ", Verwaltungs_Frame, "UIDropDownMenuTemplate");
dropDownMenu:SetPoint("Right",Verwaltungs_Frame,-150,300)
 
Zuletzt bearbeitet von einem Moderator:
Du kannst natürlich weiterhin das XML von dir benutzen. Das war nur ein Beispiel mit den Funktionen. Wie man sie benutzt, Sachen abrufen kann und so... :-)

Deine XML (NAME verändert & SetSelectedID hinzugefügt)
Code:
<Frame name="DropDownMenuXYZ" inherits="UIDropDownMenuTemplate" id="124">
	<Anchors>
		<Anchor point="CENTER">
			<Offset x="10" y="-75" />
		</Anchor>
	</Anchors>
	<scripts>
		<onload>
			UIDropDownMenu_Initialize(DropDownMenuXYZ, XYZ_DropDownMenu_Initialize);
			UIDropDownMenu_SetSelectedID(DropDownMenuXYZ, 1);
		</onload>
	</Scripts>
</Frame>

Die Funktionen (Bereits alles angepasst)
Code:
function XYZ_DropDownMenu_Function(self)
	UIDropDownMenu_SetSelectedID(DropDownMenuXYZ, self:GetID());
	print("Text: "..tostring(UIDropDownMenu_GetText(DropDownMenuXYZ)).." - Value: "..tostring(self.value).." - ID: "..self:GetID());
end

function XYZ_DropDownMenu_Initialize()
	for _, tableText in next, Table do
		local info = UIDropDownMenu_CreateInfo();
		info.text = tableText;
		info.value = tableText;
		info.func = XYZ_DropDownMenu_Function;
		UIDropDownMenu_AddButton(info);
	end
end

P.S.: Sorry, dass die Antwort so spät ist...
 
Zuletzt bearbeitet von einem Moderator:
ein anführungszeichen unterscheidet sich von einem schlusszeichen nur darin, dass das anführunszeichen zuerst kommt und am schluss das schlusszeichen.
Beispiel: Anführungszeichen--> "...." <-- Schlusszeichen

Habe nie mit Dropdowns in Lua gearbeitet, eher mit Events. Kann deshalb leider nicht viel Helfen... (vorallem schon lange nichts mehr in Lua gemacht)
 
Zurück