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
- 設定記述
- 2008-10-08-01 xPopup.dll
- 2008-10-08-02 何はともあれxPopupの最低限の設定を書いてみる
- 2008-10-08-03 xPopupのセパレータやらタイトル行やら
- xlabel
- 2009-05-24-01 labelのcreateとdestroyを1アクションで
- 2008-09-22-01 パネル内にアイコンを表示してランチャーっぽいのを作る
- 2008-09-21-01 パネルを前面に出したり、半透明にさせてみたり