Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-01-24大人になる

IEでWindows Common Control (3) - StatusBar

| 02:16 |  IEでWindows Common Control (3) - StatusBar - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  IEでWindows Common Control (3) - StatusBar - Ci.nsIZIGOROu

よーし、今日はこれを最後にするお。

f:id:ZIGOROu:20080125015439p:image

ソース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:hta="urn:HTMLApplication" xml:lang="ja" lang="ja">
  <head>
    <title>Status Bar</title>
    <style type="text/css">
      div#commonCtlContainer object#statusbar {
        display: block;
        margin: 0 auto;
        background-color: glay;
      }
    </style>
  </head>
  <body>
    <div id="commonCtlContainer">
      <object classid="clsid:8E3867A3-8586-11D1-B16A-00C0F0283628" id="statusBar" width="100%" height="20">
        <param name="ShowTips" value="true" />
        <param name="Style" value="0" />
      </object>
    </div>
    <script type="text/javascript">
      // <![CDATA[
for (var i = 0; i < 8; i++) {
  statusBar.Panels.Add(i + 1, "test" + (i + 1), "test" + (i + 1), i);

  with ({ panel: statusBar.Panels.Item(i + 1) }) {
    panel.Bevel = i % 3;
  }
}

statusBar.attachEvent('PanelClick', function(panel) { alert(panel.Text); });
      // ]]>
    </script>
  </body>
</html>

サンプル

メモ

IPanels, IPanelはnoncreatableなのでStatusBarからAddして作る

まぁ表題通りなんですけど、

[id(0x00000002), helpstring("Adds a Panel object to a Panels collection and returns a reference to the created Panel."), helpcontext(0x000335ff)]
IPanel* Add(
                [in, optional] VARIANT* Index, 
                [in, optional] VARIANT* Key, 
                [in, optional] VARIANT* Text, 
                [in, optional] VARIANT* Style, 
                [in, optional] VARIANT* Picture);

って定義なんだけど、Indexは1から始まり、Keyはuniqueじゃなきゃダメ。

Textに関しては後で書くけど、Styleに依存する。

Pictureは今の所どうやって指定するか分からんw

PanelのStyle, Bevel
[id(0x0000000a), propget, helpstring("Returns/sets the style of a StatusBar Panel object"), helpcontext(0x00033621)]
HRESULT Style([out, retval] PanelStyleConstants* psStyle);

[id(0x0000000a), propput, helpstring("Returns/sets the style of a StatusBar Panel object"), helpcontext(0x00033621)]
HRESULT Style([in] PanelStyleConstants psStyle);

[id(0x00000003), propget, helpstring("Returns/sets the bevel appearance of a Panel object, inset, raised, or none"), helpcontext(0x0003361a)]
HRESULT Bevel([out, retval] PanelBevelConstants* psBevel);

[id(0x00000003), propput, helpstring("Returns/sets the bevel appearance of a Panel object, inset, raised, or none"), helpcontext(0x0003361a)]
HRESULT Bevel([in] PanelBevelConstants psBevel);

と言う定義なので、それぞれ

  • PanelStyleConstants
  • PanelBevelConstants

を見るんですが、

typedef [uuid(8E3867A9-8586-11D1-B16A-00C0F0283628), helpstring("Panel Style constants"), helpcontext(0x0003360f)]
enum {
    sbrText = 0,
    sbrCaps = 1,
    sbrNum = 2,
    sbrIns = 3,
    sbrScrl = 4,
    sbrTime = 5,
    sbrDate = 6,
    sbrKana = 7
} PanelStyleConstants;

typedef [uuid(8E3867A8-8586-11D1-B16A-00C0F0283628), helpstring("Panel Bevel constants"), helpcontext(0x0003360b)]
enum {
    sbrNoBevel = 0,
    sbrInset = 1,
    sbrRaised = 2
} PanelBevelConstants;

って定義になってて、それぞれのバリエーションでサンプルは出力してるって感じ。

でStyle指定なんですが、表示見てもらえれば分かるかと思いますが、PanelStyleConstants.sbrText(=0)を指定した時じゃないとTextは表示されません。悪しからず。

StatusBarのイベント

試しにやってみて出来てびっくりした次第なのですが、attachEventで普通にattach出来ちゃったお、超驚きなんすけどw

イベントに関してはIStatusBarEventsで定義してあって、今回は、

[id(0x00000001), helpstring("Similar to the standard Click event, but the PanelClick event occurs when a user presses and then releases a mouse button over any of the StatusBar control's Panel objects."), helpcontext(0x000335f6)]
void PanelClick(Panel* Panel);

を使った。

ハンドラに対してPanelオブジェクトが渡るので、指定したPanelのTextプロパティalertしてます。

その他

Font, Pictureの指定方法が分からない。

  • IFontDisp
  • IPictureDisp

を調べれば分かるはず。

あとどうも内部的にShift_JIS決め打ちの悪寒。

感想

フォントさえ指定出来れば意外とHTAで使えそうな気がした。

がHTMLでいいんじゃね的な考えは常に付きまとうんだけどw

KimesdarSKimesdarS2019/02/13 04:35Interested in HARD ROCK? How about KISS? The band is on a tour at the moment all across USA and Canada. Visit https://www.radiotargujiu.ro/oras-gri/ to know more about KISS tour dates in 2019.