ComboBox [Component Without XML]
[b][color=Blue]不需要任何的XML文件,便可以如下代码所示,使用 ComboBox:[/color][/b][language=lua]local function comboCallBack(frm, sText)
DEFAULT_CHAT_FRAME:AddMessage("ComboBox : ["..sText.."]");
end
local combo = createComboBox(frame, 20, -24, 135, 26, 6, comboCallBack);
comboboxRelayoutDropDownFrame(combo)
local combo2 = createComboBox(frame, 20 + 135, -24, 135, 26, 6, comboCallBack);
combo2.widget.strList = {[1] = "Aaaa",}
comboboxRelayoutDropDownFrame(combo2)
local combo3 = createComboBox(frame, 20 + 135, -200, 135, 26, 6, comboCallBack);
combo3.widget.strList = {
[1] = "Aaaa",
[2] = "Bbbb",
[3] = "Cccc",
[4] = "Dddd",
[5] = "Eeee",
[6] = "Ffff",
[7] = "Gggg",
[8] = "Hhhh",
[9] = "Iiii",
[10] = "Jjjj",
[11] = "Kkkk",
}
comboboxRelayoutDropDownFrame(combo3)[/language]
[img]http://file.cwowaddon.com/addons/forumid_3/20070810_67d7c649374a37ce6ecfSjOxHY3ijnpg.jpg[/img] [img]http://file.cwowaddon.com/addons/forumid_3/20070810_07fbefa0e8687032c878na4qJut2Rj5C.jpg[/img] [img]http://file.cwowaddon.com/addons/forumid_3/20070810_3db212c1c021f44cd6f5l0sbExjY1zZr.jpg[/img] [img]http://file.cwowaddon.com/addons/forumid_3/20070810_763b1073e64afeff9618iNja7oUoNHQc.jpg[/img]
[b][color=Blue]将下面的代码保存至文件,在插件的 toc 文件中包括它,就可以轻松的使用 ComboBox[/color][/b]
[language=lua]-- Component ComboBox Code
local frmSingle = nil
local function DropDownFrame_OnClickItem()
local rootFrm = this:GetParent():GetParent():GetParent()
local sText = this:GetText()
rootFrm.widget.edit:SetText(sText)
if rootFrm.widget.funCallBack then
rootFrm.widget.funCallBack(rootFrm, sText)
end
end
local function createVScrollBar(parent)
local frm = CreateFrame("Frame", nil, parent)
frm:SetWidth(18)
frm:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 0, 0)
frm:SetPoint("BOTTOM", parent, "BOTTOM", 0, 0)
local silder = CreateFrame("Slider", nil, frm)
silder:SetPoint("LEFT", frm, "LEFT", 0, 0)
silder:SetPoint("RIGHT", frm, "RIGHT", 0, 0)
silder:SetPoint("TOP", frm, "TOP", 0, -17)
silder:SetPoint("BOTTOM", frm, "BOTTOM", 0, 17)
silder:SetThumbTexture("Interface\\Buttons\\UI-ScrollBar-Knob")
local texture = silder:GetThumbTexture()
texture:SetTexCoord(7/32, 25/32, 7/32, 24/32)
texture:SetWidth(18)
texture:SetHeight(17)
silder:SetMinMaxValues(1, 10)
silder:SetValueStep(1)
silder:SetValue(1)
local btnScrollUp = CreateFrame("Button", nil, frm)
btnScrollUp:SetWidth(32)
btnScrollUp:SetHeight(32)
btnScrollUp:SetPoint("TOP", frm, "TOP", 0, 7)
btnScrollUp:SetNormalTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Up")
btnScrollUp:SetPushedTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Down")
btnScrollUp:SetDisabledTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Disabled")
btnScrollUp:SetHighlightTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Highlight", "ADD")
btnScrollUp:SetHitRectInsets(6, 7, 7, 8)
local btnScrollDown = CreateFrame("Button", nil, frm)
btnScrollDown:SetWidth(32)
btnScrollDown:SetHeight(32)
btnScrollDown:SetPoint("BOTTOM", frm, "BOTTOM", 0, -8)
btnScrollDown:SetNormalTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Up")
btnScrollDown:SetPushedTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Down")
btnScrollDown:SetDisabledTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Disabled")
btnScrollDown:SetHighlightTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Highlight", "ADD")
btnScrollDown:SetHitRectInsets(6, 7, 7, 8)
local widget = {
frm = frm,
silder = silder,
btnScrollUp = btnScrollUp,
btnScrollDown = btnScrollDown,
}
frm.widget = widget
-- Event Handle
btnScrollUp:SetScript("OnClick", function()
local rootFrm = this:GetParent():GetParent():GetParent():GetParent()
local silder = rootFrm.widget.dropdown.scrollBar.silder
local iMin, iMax = silder:GetMinMaxValues()
local iPos = silder:GetValue()
if iPos > iMin then
silder:SetValue(iPos - 1)
end
end)
btnScrollDown:SetScript("OnClick", function()
local rootFrm = this:GetParent():GetParent():GetParent():GetParent()
local silder = rootFrm.widget.dropdown.scrollBar.silder
local iMin, iMax = silder:GetMinMaxValues()
local iPos = silder:GetValue()
if iPos < iMax then
silder:SetValue(iPos + 1)
end
end)
silder:SetScript("OnValueChanged", function()
local rootFrm = this:GetParent():GetParent():GetParent():GetParent()
local btnItems = rootFrm.widget.dropdown.btnItems
local i
local iCount = table.getn(btnItems)
rootFrm.widget.scrollTop = this:GetValue()
for i = 1, iCount do
btnItems[ i ]:SetText(rootFrm.widget.strList[i + rootFrm.widget.scrollTop - 1])
end
end)
return widget
end
local function createDropDownFrame(parent, offsetX, offsetY, width, dropCount)
local height = dropCount * 26 + 8
local frm = CreateFrame("ScrollFrame", nil, parent)
frm:Hide()
frm:SetWidth(width)
frm:SetHeight(height)
frm:SetPoint("TOPLEFT", parent, "TOPLEFT", offsetX, offsetY)
frm:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = {left = 4, right = 4, top = 4, bottom = 4}
})
frm:SetBackdropColor(0, 0, 0)
local panel = CreateFrame("Frame", nil, frm)
panel:SetPoint("TOPLEFT", frm, "TOPLEFT", 4, -4)
panel:SetPoint("BOTTOMRIGHT", frm, "BOTTOMRIGHT", -4, 4)
local scrollBar = createVScrollBar(panel)
scrollBar.frm:Hide()
local i, btn, btnFontString, texture
local btnItems = {}
for i = 1, dropCount do
btn = CreateFrame("Button", nil, panel)
btn:SetPoint("LEFT", panel, "LEFT", 0, 0)
btn:SetPoint("RIGHT", scrollBar.frm, "LEFT", 0, 0)
btn:SetPoint("TOP", panel, "TOP", 0, (i - 1) * -26)
btn:SetHeight(26)
btn:SetHighlightTexture("Interface\\BUTTONS\\UI-Common-MouseHilight", "ADD")
texture = btn:GetHighlightTexture()
texture:SetTexCoord(0.125,0.875,0.125,0.875)
btnFontString = btn:CreateFontString(nil, "ARTWORK", "GameFontNormal")
btn:SetFontString(btnFontString)
btn:SetText("Button "..i)
btn:Hide()
btn:SetScript("OnClick", DropDownFrame_OnClickItem)
btnItems[ i ] = btn
end
local widget = {
frm = frm,
panel = panel,
scrollBar = scrollBar,
btnItems = btnItems,
}
frm.widget = widget
-- Event Handle
--[[frm:SetScript("OnShow", function()
end)]]
return widget
end
local function createHScrollBar(parent)
end
function createComboBox(parent, offsetX, offsetY, width, height, dropCount, funOnClickItem)
local frm = CreateFrame("Frame", nil, parent)
frm:SetWidth(width)
frm:SetHeight(height)
frm:SetPoint("TOPLEFT", parent, "TOPLEFT", offsetX, offsetY)
frm:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = {left = 4, right = 4, top = 4, bottom = 4}
})
frm:SetBackdropColor(0, 0, 0)
local panel = CreateFrame("Frame", nil, frm)
panel:SetPoint("TOPLEFT", frm, "TOPLEFT", 4, -4)
panel:SetPoint("BOTTOMRIGHT", frm, "BOTTOMRIGHT", -4, 4)
local btnDropdown = CreateFrame("Button", nil, panel)
btnDropdown:SetWidth(32)
btnDropdown:SetHeight(32)
btnDropdown:SetPoint("TOPRIGHT", panel, "TOPRIGHT", 7, 7)
btnDropdown:SetNormalTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Up")
btnDropdown:SetPushedTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Down")
btnDropdown:SetDisabledTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Disabled")
btnDropdown:SetHighlightTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Highlight", "ADD")
btnDropdown:SetHitRectInsets(6, 7, 7, 8)
local edit = CreateFrame("EditBox", nil, parent)
edit:SetPoint("TOPLEFT", panel, "TOPLEFT", 0, 0)
edit:SetPoint("RIGHT", btnDropdown, "LEFT", 6, 0)
edit:SetPoint("BOTTOM", panel, "BOTTOM", 0, 0)
edit:SetAutoFocus(false)
edit:SetJustifyH("CENTER")
edit:SetJustifyV("MIDDLE")
edit:SetFontObject("GameFontNormalSmall")
dropdown = createDropDownFrame(frm, 0, -26, width, dropCount)
local widget = {
frm = frm,
panel = panel,
btnDropdown = btnDropdown,
edit = edit,
dropdown = dropdown,
root = true,
dropCount = dropCount,
scrollTop = 1,
strList = {},
funCallBack = funOnClickItem
}
frm.widget = widget
-- Event Handle
btnDropdown:SetScript("OnClick", function()
local widget = this:GetParent():GetParent().widget
if frmSingle ~= nil and frmSingle ~= widget.dropdown.frm then
frmSingle:Hide()
frmSingle = widget.dropdown.frm
end
if widget.dropdown.frm:IsShown() then
widget.dropdown.frm:Hide()
frmSingle = nil
else
widget.dropdown.frm:Show()
frmSingle = widget.dropdown.frm
end
end)
edit:SetScript("OnTabPressed", function() this:ClearFocus() end)
edit:SetScript("OnEnterPressed", function() this:ClearFocus() end)
edit:SetScript("OnEscapePressed", function() this:ClearFocus() end)
edit:SetScript("OnEditFocusLost", function() this:HighlightText(0, 0) end)
edit:SetScript("OnEditFocusGained", function() this:HighlightText() end)
return frm
end
function comboboxRelayoutDropDownFrame(frm)
local i
local iStrCount = table.getn(frm.widget.strList)
local iBtnCount = table.getn(frm.widget.dropdown.btnItems)
local dropdown = frm.widget.dropdown
if iStrCount == 0 then
for i = 1, iBtnCount do
dropdown.btnItems[ i ]:Hide()
end
dropdown.frm:SetHeight(iBtnCount * 26 + 8)
dropdown.scrollBar.silder:SetMinMaxValues(1, 1)
dropdown.scrollBar.frm:Hide()
elseif frm.widget.dropCount >= iStrCount then
for i = 1, iStrCount do
dropdown.btnItems[ i ]:Show()
dropdown.btnItems[ i ]:SetText(frm.widget.strList[ i ])
end
dropdown.frm:SetHeight(iStrCount * 26 + 8)
dropdown.scrollBar.silder:SetMinMaxValues(1, 1)
dropdown.scrollBar.frm:Hide()
else
for i = 1, iBtnCount do
dropdown.btnItems[ i ]:Show()
dropdown.btnItems[ i ]:SetText(frm.widget.strList[ i ])
end
dropdown.frm:SetHeight(iBtnCount * 26 + 8)
dropdown.scrollBar.silder:SetMinMaxValues(1, iStrCount - iBtnCount + 1)
dropdown.scrollBar.frm:Show()
end
frm.widget.scrollTop = 1
dropdown.scrollBar.silder:SetValueStep(1)
dropdown.scrollBar.silder:SetValue(1)
end[/language] 很不错哦,比自带那个模板好很多了。 好东西, 能做套控件集合就好了. [quote]原帖由 [i]simonw[/i] 于 2007-8-10 12:41 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=12790&ptid=1314][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
好东西, 能做套控件集合就好了. [/quote]
好多事情要做。。。有空了可能会做吧 前天你弄了一晚上就为了这个? [quote]原帖由 [i]jilingshu[/i] 于 2007-8-10 17:42 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=12836&ptid=1314][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
前天你弄了一晚上就为了这个? [/quote]
最近就在弄这个。。。 fr 数据库快跟我做....~ 已经3个月了 [quote]原帖由 [i]月色狼影[/i] 于 2007-9-4 05:18 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=16549&ptid=1314][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
fr 数据库快跟我做....~ 已经3个月了 [/quote]
在搞 File 页的东西。。。把过滤搞完回头弄数据库的事情
页:
[1]