作者hmml (hmml)
看板mud_sanc
標題[心得] MUSHclient 自製 MiniWindow 簡易模組
時間Sat Nov 23 02:33:16 2013
這是自製的簡易製作 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
1F:推 justinj :推 11/23 08:09
2F:推 elvrael :推,這東西好用 11/23 16:03
3F:推 Hamano :推~ 11/30 23:19