作者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