[心得] MUSHclient 自製 MiniWindow 簡易模組
這是自製的簡易製作 MiniWindow 模組,弄這個是為了省卻一些參數設定上的
麻煩,如:標題列的寬高估算,關閉鈕的製做等等重複卻常常必須微調的東西,好
專心去弄要顯示的內容,及功能。雖然參數還是有點多,但比重頭做起方便多了。
當然還是很粗糙就是了...
它用三個函數分出三個部份:
CreateMiniWin:建立 MiniWindow 的基本框架。基本上只會用到一次。
CreateBU:簡易製作按鈕的外型和文字。如果按鈕很多,就會常常用到,
文字是置中的,左右基本上會等寬,上下就比較沒把握。要用
圖片的話,請自行大編修(其實也不是很大...),但我認為
文字還是比較直觀,圖有時候還是無法意會。
Button_Operation:按鈕的功能。裡面有關閉鈕的功能先寫在裡面,但它是
隱藏而非移除,因為視窗不能移除自己,即使用timer
也不能。這個函數是用MUSHclient的作者定義的函數:
WindowAddHotspot 中,滑鼠行為對應參數的"鼠鍵壓下"
參數。如果要讓按鈕更生動,更像一般按鈕,請自行修
改 CreateBU 裡的 WindowAddHotspot,把沒設的對應參
數全加上名字,一個個額外新增動作函數吧!設法跟本
項一樣。我只要實用就好了...好吧!我承認我不會弄...
寫的格式就像這樣:
<script>
<![CDATA[
--資料檔,如果必需有的話,請寫在最上
local tablename = {...}
--下面就是函數,基本上沒順序問題,整齊好找最重要!
--建立視窗的函數
function CreateMiniWin (...)
end
--建立按鈕的函數
function CreateBU (...)
end
--按鈕功能的函數,模組裡的關閉按鈕功能己先寫在這裡。
function Button_Operation(flags,hotspot_id)
end
--按鈕功能的函數2,若想區別各個按鈕的程式碼,就分別去寫。
function Button_Operation2(flags,hotspot_id)
end
--按鈕功能的函數3,依此類推...
function Button_Operation3(flags,hotspot_id)
end
--觸發、別名或計時器的功能函數
function Universal_Alias (name, line, wildcards) --三個固定的參數名
CreateMiniWin(...)
CreateBU (...)
主要內容,如果有資料表,建議寫在同一個<script>標籤裡,這樣可以
用 local 來將用完的資料從記憶體卸載,也能讓別的函數去載入表。但
必須寫在函數的前頭,不然它會找不到表。
name 是 timer trigger 及 alias 的 label,沒設定的話,MUSHclient
會自己生成。
wildcards是一個table表,只有別名和觸發才有(應該啦!),它就是
%1、%2、%3...這些參數的內容,要取出這些內容,使用wildcards[1]、
wildcards[2]、wildcards[3]...順序一模一樣,叫法不一樣而己。
WindowShow (WinID,true) --顯示 Mini 視窗!!這個要最後執行,才能顯示完整內容。
end
]]></script>
<aliases>
<alias
match="^(spn)(t|co|ch|n|r|hh|h)(\S*)$"
enabled="y"
echo_alias="y"
script="Universal_Alias"
regexp="y"
send_to="12"
sequence="100"
>
<send></send>
</alias>
</aliases>
.類推下去
.
.
精華區裡 15 > 3 > 1 > 1 有 MiniWindow 的函數介紹,因為這個資源只有
官方的英文版,必須自行翻譯(多虧有Google),出發點是讓"本人"方便查閱用
的,所以是"不負責任"編撰,自然也不會發文(絕對不是避免洗版和被噓~)。
內容如下,直接複製到 plugin 檔案裡的<script><![CDATA[ ]]></script>
標籤,注意!角色檔的觸發、別名、計時器無法使用 MiniWindow 函數,一定要
寫在 plugin 裡面。
--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
--如果不需要標題列,將"標題文字"參數設為""即可。
--加外框為選項,需要時設為1,不需要時設為0,不需""。
--立刻顯示也是選項,但依流程,這時顯示也只有空白視窗,其實也不太實用。方法同上。
--預設關閉按鈕也是選項,基本上普遍都會設,所以也把它列入,不過
--它必須有 CreateBU 及 Button_Operation 兩個函數在才能夠發揮作用。方法同上。
--顯示位置是採九宮格,設了這個左,上兩參數就沒什麼用。參數對應位置如下:
-- 值│說明 │Lua標記
--│0 │延展顯示 │miniwin.pos_stretch_to_view │
--│1 │延展顯示 │miniwin.pos_stretch_to_view_with_aspect │
--│2 │延展顯示 │miniwin.pos_stretch_to_owner │
--│3 │延展顯示 │miniwin.pos_stretch_to_owner_with_aspect │
--│4 │左上 │miniwin.pos_top_left │
--│5 │中上 │miniwin.pos_top_center │
--│6 │右上 │miniwin.pos_top_right │
--│7 │右中 │miniwin.pos_center_right │
--│8 │右下 │miniwin.pos_bottom_right │
--│9 │中下 │miniwin.pos_bottom_center │
--│10│左下 │miniwin.pos_bottom_left │
--│11│左中 │miniwin.pos_center_left │
--│12│正中 │miniwin.pos_center_all │
--│13│瓷磚式排列 │miniwin.pos_tile │
--└─┴───────┴─────────────────────┘
--其它設定內容如下:
-- 值│說明 │Lua標記
--│1 │置底 │miniwin.create_underneath │
--│2 │絕對位置 │miniwin.create_absolute_location │
--│4 │透明 │miniwin.create_transparent │
--│8 │忽略鼠標 │miniwin.create_ignore_mouse │
--│16│保持現有的熱點│miniwin.create_keep_hotspots │
--└─┴───────┴─────────────────────┘
--需要多種特性時,使用它們加法的合即可。參數2會導致顯示位置參數無效,並採用
--左、上兩個參數的設定。
--[[function CreateMiniWin ( 視窗ID ,
左 ,上 ,寬 ,高 ,
顯示位置 , 其它設定 , 底色 ,
字型,字型大小,字型ID,
標題文字? , 標題列底色 , 標題文字顏色,
加外框? , 立刻顯示? , 預設關閉按鈕?)]]
function CreateMiniWin ( WinID ,
WinL , WinU , WinW , WinH ,
Location , OtherSet , BackColour,
Font , FontSize , FontID ,
TitleText , TitleBarColour , TitleTextColour ,
RectOpSet , ShowNow,CrOFF )
--建立視窗
WindowCreate (WinID,WinL, WinU, WinW, WinH,
Location, OtherSet,
ColourNameToRGB(BackColour))
--載入字型
WindowFont (WinID, FontID, Font, FontSize,
false, false, false, false,
1,4)
--字型高度
FontH = WindowFontInfo(WinID,FontID,1)
--是否要外框
if RectOpSet == 1 then WindowRectOp (WinID, 5, 0, 0, 0, 0, 10, 15) end
--是否要標題列
if TitleText ~= "" then
WindowRectOp (WinID, 2, 3, 3, WinW-3, FontH+8,
ColourNameToRGB(TitleBarColour))
WindowText (WinID,FontID,TitleText,
35,5,0,0,
ColourNameToRGB(TitleTextColour),
false)
end
--建立關閉視窗的按鈕
if CrOFF == 1 then
CreateBU (WinID,"Button_Operation",'Hideit_'..WinID,
WinW-(WindowTextWidth (WinID, FontID,"關 閉")*1.5),3,WinW-3,4,
FontID,TitleBarColour,"關 閉",
"",TitleTextColour)
end
--是否是立刻顯示
if ShowNow == 1 then WindowShow (WinID,true) end
end --function CreateMiniWin
--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
--[[建立按鈕CreateBU ( 視窗ID , 滑鼠行為函數ID , 熱點ID ,
左 , 上 , 右 ,上下間距「不含字高」 ,
字型ID , 字型顏色 ,
按鈕名稱 , 氣泡提示 , 按鈕顏色 )]]
function CreateBU ( winID , funcName , keyID ,
buL , buU , buR , buD ,
FONT , FONT_COLOUR ,
BuName , BuNote , Bu_Colour )
--熱點
WindowAddHotspot(winID,keyID ,
buL,buU,buR,buU+WindowFontInfo(winID,FONT,1)+buD/2,
"",
"",
funcName,
"",
"",
BuNote, 1, 0)
--按鈕顏色
if Bu_Colour ~= nil then
WindowRectOp (winID,
2 ,
buL,buU,buR,buU+WindowFontInfo(winID,FONT,1)+buD/2,
ColourNameToRGB(Bu_Colour))
end --Bu_Colour 判斷
--按鈕外框
WindowRectOp (winID,
5 ,
buL-1,buU,buR,buU+WindowFontInfo(winID,FONT,1)+(buD),
5, 15)
--按鈕文字
WindowText (winID, FONT,BuName ,
buL+(buR-buL-WindowTextWidth (winID, FONT,BuName))/2, buU+buD/2,
0 ,0 ,
ColourNameToRGB(FONT_COLOUR),
false)
end --end function CreateBU
--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
--flags為滑鼠點擊行為的辨認值,方便的有四種:
--flags : 16 單擊滑鼠左鍵
--flags : 32 單擊滑鼠右鍵
--flags : 18 Ctrl + 滑鼠左鍵
--flags : 34 Ctrl + 滑鼠右鍵
--完整的請去精華區看
--hotstpot_id : 按鈕的ID。如果要簡單設定,直接用別名的名稱當ID。
-- 用按鈕來執行別名是比較容易的設定方式。
function Button_Operation (flags , hotspot_id)
if string.match(hotspot_id , 'Hideit_') then
hotspot_id = string.match(hotspot_id , 'Hideit_(.+)')
WindowShow (hotspot_id , true)
end
end -- function Button_Operation
--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.196.45
推
11/23 08:09, , 1F
11/23 08:09, 1F
推
11/23 16:03, , 2F
11/23 16:03, 2F
推
11/30 23:19, , 3F
11/30 23:19, 3F
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
26