[心得] MUSHclient 自製 MiniWindow 簡易模組

看板mud_sanc (Sanctuary - 聖殿)作者 (hmml)時間12年前 (2013/11/23 02:33), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/1
  這是自製的簡易製作 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
文章代碼(AID): #1IZwDlTV (mud_sanc)
文章代碼(AID): #1IZwDlTV (mud_sanc)