Kaze-Gumi

日記

2008-09-22-01(月)

パネル内にアイコンを表示してランチャーっぽいのを作る

基本的なことをだらだら書いてきたが、そろそろ実例っぽいことをやってみる

ラベル自身マウスクリックなどのイベントは持っているのだが
基本的に1つのラベル内での左クリックは1つしか指定できない

ランチャー的なパネルを作る場合、複数のアイコンの配置、機能割り当てが必要になる
その方法はいくつかあるが、ここでは「OverlayLabel」を使うことにする
hookよりわかりやすいかと思う

shortcut2.dllを使ったことある人なら
ラベル内に*shortcutを置くみたいなもんと言えばわかりやすいだろう

まずは下準備

*label launcherPanel
launcherIconSize 32 ; *
launcherIconMargin 8 ; *
launcherPanelWidth $(launcherIconSize+launcherIconMargin)*6$
launcherPanelHeight $launcherIconSize+launcherIconMargin$
launcherPanelPaintingMode ".multicolor"
launcherPanelBorderMethod ".raised"
launcherPanelColors c9c9c9
launcherPanelGradientColors 888888
launcherPanelGradientType ".vertical"
launcherPanelAlwaysOnTop true

launcherPanelMoveable true
launcherPanelMoveModifierKey ".none"

launcherPanelResizeBorder 2 0
launcherPanelResizeBorderSteps $launcherIconSize+launcherIconMargin$ 0

launcherPanelX -$launcherPanelWidth/2$c
launcherPanelY -$launcherPanelHeight$

行末に「; *」をつけてあるのは、xLabel設定ではなく、計算用に使う独自のevarsである
とりあえず横に32x32アイコン6個並べられるようにベースパネルを作成した
「ResizeBorder」の上下を0にして、上下幅変更はできないようにしてある
また、「ResizeBorderSteps」は、1アイコン表示分(余白量8を含む)ずつ増減するように設定

ここにアイコンを並べていく

*launcherPanelOverlayLabel 4 4 32 32 launch1 #s
*launcherPanelOverlayLabel 44 4 32 32 launch2 #s
*launcherPanelOverlayLabel 84 4 32 32 launch3 #s
*launcherPanelOverlayLabel 124 4 32 32 launch4 #s
*launcherPanelOverlayLabel 164 4 32 32 launch5 #s
*launcherPanelOverlayLabel 204 4 32 32 launch6 #s

一応、わかりやすいように最初はそのまま数値を入れている
これだけでは何も表示されない
領域確保みたいなものである

*(ラベル名)OverlayLabel x y width height prefix #(オプション)

書式はこうなっている
prefix部分が重要になってくるのだが、ここで指定したものが個別設定のprefixとなっていく

x,y位置は、親ラベル(ここではlauncherPanel)内を基準とする
上に書いた「launch1」の表示位置「ベースパネルの中の4,4」という具合になる
width,heightは、今回は32x32アイコンを並べるので、それぞれ32
オプションの記述は「#」の後に文字を並べるのだが
とりあえずショートカットアイコンとして使うのであれば「#s」としておく
でないとクリックできない

ここから「launch1」〜「launch6」までの詳細設定を行うわけだが
書き方は基本はxPaintClassに準拠する
設定によっては、6個分同じことを書くことになるので
同じ設定になる箇所は1つグループ設定を作って、それに「AddToGroup」することにする
といっても今回はアイコンファイルを表示するだけなので共通箇所は少ないのだが

;; launchグループの用意
launchPaintingMode ".icon"
launchIconExtractionSize 32

これだけw
「IconExtractionSize」は、アイコンファイル内に複数のサイズがある場合、指定したものを使う設定
これを32にしておかないと、16x16を拡大表示してしまったりするので指定しておく

あと、ツールチップ表示も使うのだが
こっちは全部統一しておく方が見栄えもわかりやすさもあるだろうから
「Global」指定でやっておくことにする

GlobalTooltipFont "MS UI Gothic"
GlobalTooltipFontCharSet "SHIFTJIS_CHARSET"
GlobalTooltipHeight 12
GlobalTooltipColor ffffcc

「Global」指定で記述すると、すべてのxPaintClass設定でのデフォルト値として扱われる

では、「launch1」の設定を書いてみる

launch1AddToGroup launch
launch1Icon $litestepdir$litestep.exe,0
launch1OnLeftClick !About
launch1Tooltip "!Aboutを実行します"

とりあえずこれだけ書けばいい
「Icon」は、アイコンファイルを指定してもよいが、実行ファイル内のアイコン指定も可能
上のように、「,0」とすることによって、何番目のアイコンを使うとか指定してやる
もちろん、dllアイコンとかも使える

あとは、「launch1」と同じように残りも設定を書いていく

launch2AddToGroup launch
launch2Icon explorer.exe,1
launch2OnLeftClick explorer
launch2Tooltip "エクスプローラを起動します"

(launch3以下略)

「OnLeftClick」には、実行ファイルだけでなく
関連付けしてあるファイルや、!Bangなども指定できる
「OnRightClick」で右クリックにも割り当てられる

「*launcherPanelOverlayLabel」の記述には、ダイレクトに数値をいれたが
以下のようにすれば、いちいち計算せんでもよい

*launcherPanelOverlayLabel $launcherPanelHeight*0+4$ 4 $launcherIconSize$ $launcherIconSize$ launch1 #s
*launcherPanelOverlayLabel $launcherPanelHeight*1+4$ 4 $launcherIconSize$ $launcherIconSize$ launch2 #s
*launcherPanelOverlayLabel $launcherPanelHeight*2+4$ 4 $launcherIconSize$ $launcherIconSize$ launch3 #s
*launcherPanelOverlayLabel $launcherPanelHeight*3+4$ 4 $launcherIconSize$ $launcherIconSize$ launch4 #s
*launcherPanelOverlayLabel $launcherPanelHeight*4+4$ 4 $launcherIconSize$ $launcherIconSize$ launch5 #s
*launcherPanelOverlayLabel $launcherPanelHeight*5+4$ 4 $launcherIconSize$ $launcherIconSize$ launch6 #s

かけ算がミソである
prefixとかけ算部分の数字を変更するだけできれいに等間隔で準備できる

x位置にある「launcherPanelHeight」は「launcherIconSize + launcherIconMargin」なので
そのまま位置計算に使っているが、「$(launcherIconSize+launcherIconMargin)*0+4$」と同義
ベースパネルの縱幅をちょっといじりたいというのなら、後者のものに書き直す必要がある

これだけではなんだか味気ないので、時計も表示させてみる
先に書いた「launcherPanelWidth」は6個のアイコン分しか確保してないので
時計表示分だけ、ちょっと増やす(80pixにしてみた)

launcherPanelWidth $(launcherIconSize+launcherIconMargin)*6+80$

*launcherPanelOverlayLabel -80 4 80 $launcherPanelHeight/2-4$ launchclock1 #
*launcherPanelOverlayLabel -80 $launcherPanelHeight/2$ 80 $launcherPanelHeight/2-4$ launchclock2 #s

launchclock1Font "MS UI Gothic"
launchclock1FontHeight 12
launchclock1Text "[date('yyyy-mm-dd')]"

launchclock2Font "Arial"
launchclock2FontColor 0000aa
launchclock2FontBold true
launchclock2FontHeight 14
launchclock2Text "[time('ii:nn:ss')]"

launchclock2OnRightClick timedate.cpl

時刻も#sにして、右クリックしたら「日付と時刻」プロパティを出せるようにしてみた

まあこんな感じで作っていく
このランチャーパネルの表示をトグル(表示ON/OFF切り替え)したいなら

!labelToggle launcherPanel

これをホットキーとかに割り当てておけば
必要なときだけ表示(リソース上にはある)切り替えできる

!labelCreate launcherPanel
!labelDestroy launcherPanel

これでラベル作成・削除でもいいけど、たかが知れてる量だろうから
表示トグルでいいだろう

Relay Keyword's Recent Title

Recent Images

img-03img-02img-01img-01img-01img-01img-02img-01img-02img-01

Prev: パネルをリサイズしてみたり | Next: LS使っててまずい部分 | 2008-09 | 2008 | RSS | 最新の日記