twapi::systemtray

システムトレイはwinicoを使うのが定番だけど、twapiにもシステムトレイにアイコンを追加する機能があるのを見つけたので、忘れないために簡単なサンプルを書いておく。

アイコンを読み込む関連(twapi/resource.tcl参照)

::twapi::load_icon_from_fileファイルからicoを読み込む
::twapi::load_icon_from_moduleDLLやEXEからicoを読み込む
::twapi::load_icon_from_systemシステムOEMからicoを読み込む
::twapi::free_iconアイコンのハンドルを解放

マニュアル:http://twapi.sourceforge.net/resource.html

システムトレイ関連(twapi/shell.tcl参照)

::twapi::systemtray addiconシステムトレイにアイコン追加。idを返す
::twapi::systemtray modifyiconidのパラメータ(アイコンとか)を変更
::twapi::systemtray removeiconシステムトレイから削除

マニュアル:http://twapi.sourceforge.net/shell.html

これだけ。引数のパラメータや定数はresource.tcl、shell.tclを読むこと。 アイコンをロードして、そのアイコンのハンドルをsystemtrayでaddiconするだけのようだ。

サンプル

クリックでアイコンの切り替え、ダブルクリックでメッセージ表示、右クリックでコンテキストメニューの表示。

package require Tk
package require twapi

set state 1
set ico1 [twapi::load_icon_from_system INFORMATION]
set ico2 [twapi::load_icon_from_system WARNING] 
 
proc ico_hook {id type loc time} {
    puts $id,$type,$loc,$time
    switch $type {
        lbuttonup {
            switch_state
            update_systemtray $id
        }
        lbuttondblclk {
            tk_messageBox -message "Ouch!"
        }
        contextmenu {
            $::popup post {*}$loc
        }
    }
}

proc quit {id} {
    twapi::systemtray removeicon $id
    exit
}

proc switch_state {} {
    if {$::state == 1} {
        set ::state 2
    } else {
        set ::state 1
    }
}

proc update_systemtray {id} {
    twapi::systemtray modifyicon $id -hicon [set ::ico$::state]
}

wm withdraw .

set id [twapi::systemtray addicon $ico1 ico_hook]
update_systemtray $id

set ::popup [menu .popup -tearoff 0]
$::popup add command -label "Exit" -command {
    quit $id
}

コメントをどーぞ



CategoryTclTk


|New|Edit|Freeze|Diff|History|Attach|Copy|Rename|
Last-modified: 2015-08-21 (Fri) 07:37:49
HTML convert time: 0.008 sec.