Home>Monologue> Part of Script factory. scriptfactory@mac.com .

Basic Dialog Items

Contents

Introduction

前回は、とりあずかんたんなDialogの作り方を説明しましました。今回は、より使えるdialogを目指して、Popup MenuやList Box、Group Boxの作り方を説明します。これらはDITL resourceをちょこっといじっただけではダメで、「CNTL」リソースを作ってやらなければなりません。いささか無念ではありますが、すべては網羅できないかも知れません。何しろ、これからが本番。まじめにやると膨大な量になりそうですので、取りあえずは実用度の高いものにまずは限ろうと思います。

List Box

まずは、一番簡単で実用度の高そうなList Boxを解説します。簡単のため以下のようにList Boxだけの役に立ちそうもないdialogを作ってみます。

List Box Dialog

取りあえずは、前回と同じようにDLOG リソースを設定して、真っ白なDITLをリソースを用意します。そして、おもむろにpaletteから「control」をDrag&Dropで生成します。

CNTL on DITL

そして、「Resource」Menuから「Open CNTL」を選んで下さい。そうすると、CNTL リソースを作るか?と聞いてくるので、ぜひ作りましょう。どんなIDのCNTLを作るかは、もしくはDITL リソースのitemがどのCNTLを参照するのかは、DITL resourceの上に置いたcontrolをdouble clickして表示されるdialogの中のResource IDという欄で設定します。。

こうして作った、CNTL リソースを開くと以下のようになっています。

New CNTL

基本的に。このdialogで「ProcID」を設定することにより、どんな種類のControlを作るのかを指定します。そして、Valueを設定することにより、そのControlのdefaultの値を設定します。List BoxのProcIDは356です。

Valueに値を設定すると、List Boxの何番目のitemをあらかじめ選択しておくかを指定できます。0ということは、何にも選択しておかないということです。

List Boxの大きさを設定します。これは「BoundsRect」で設定します。なんか、欄が4つあるので、位置まで指定できそうですが、実際に意味を持つのは「3つ目の欄」ー「1つ目の欄」が高さになり、「4つ目の欄」ー「2つ目の欄」が幅になります。だから、一つ目の二つ目は、0としてしまって最後の二つを使って、幅と高さを指定するのが良いでしょう。位置はDITL リソースの上でズリズリ動かして設定します。

というわけで、ここまでで以下のように設定しました。

CNTL of List Box

他のfieldはList Boxの場合は意味がありません。

ここで、CNTL リソースを閉じて(必ず閉じて下さい)、DITL リソースに戻ると以下のようになっています。

List Box on DITL

ここで、適当に、List Boxの位置を調整して出来上がりです。

さて、List Boxの中身ですが。。。残念ですが、ResEdit上では設定できないみたいです。Dialog Dumperが吐いてくれるCodeをいじるしかありません。とりあえず、このリソースファイルをDialog Dumperで処理してみます。

-- ListBox 
set |dListBox| to {size:[200, 200], style:standard window, closeable:true, name:"Simple Dialog", contents:[¬ 
    {class:list box, bounds:[28, 39, 178, 139], contents:["・・・"]} ¬ 
        ] ¬ 
    } 
 
dd auto dialog |dListBox| with grayscale

ここで、ちょっと以下のように、List Boxの中身を付け加えてやって出来上がりです。

-- ListBox 
set |dListBox| to {size:[200, 200], style:standard window, closeable:true, name:"Simple Dialog", contents:[¬ 
    {class:list box, bounds:[28, 39, 178, 139], contents:["Frist", "Scecond", "Third"]} ¬ 
        ] ¬ 
    } 
 
dd auto dialog |dListBox| with grayscale

このCodeを生成するリソースファイルはこちらからDownloadして下さい。

Group Box

さてつぎは、役に立ちそうにないけど、ちょっと凝ったdialogなら絶対使わないと、わけの分からないdialogになっちゃうので以外と大事と思われるGroup Boxについてです。

先ほどのList Boxを作ったdialogに付け加えてこんなdialogを作ってみます(ほとんど役に立ちそうにないですが)。

GroupBox Dialog

CNTLリソースを作るところまではいいでしょう。DITL リソース上でパレットからcontrolをdrag&dropしてもう一つcontrolを作ります。そして、Resource メニューから「Open CNTL」を選ぶと新しいCNTL リソースを作るかどうか聞いてくるので、OKとすると、こんどはID 129のCNTL リソースが作られるでしょう。まずは前述の通り、ProcIDを設定します。Group BoxのProcIDは、160です。

次にTitleを設定します。ここは、Group Boxのtitleとして表示されます。

そして、BoundsRectで大きさを設定します。大きさの調整は、無念ですが、CNTL リソースとDITL リソースをいったり来たりして、ちょっとずつ調整する他はない様です。いちいち対象としているCNTL リソースを閉じないとDITL リソースの上に反映されないのが、たまに傷ですが、まあScript writingだけで大きさと位置を調整するよりは、ずっとストレスが少ないでしょう。

というわけで、以下のように設定しました。

CNTL of GroupBox

DITL リソース上では以下のように表示されるでしょう。もちろん、位置は適当に調整して下さい。

GroupBox on DITL

そして、Dialog Dumperを通すと以下のようなCodeが生成されるでしょう。

-- GroupBox 
set |dGroupBox| to {size:[200, 200], style:standard window, closeable:true, name:"Simple Dialog", contents:[¬ 
    {class:list box, bounds:[28, 39, 178, 139], contents:["・・・"]}, ¬ 
    {class:group box, bounds:[12, 11, 192, 161], name:"Group Box title"} ¬ 
        ] ¬ 
    } 
 
dd auto dialog |dGroupBox| with grayscale

ちなみに、ProcIDを164と設定すると、以下のようなSecondary GroupというスタイルのGroup Boxが生成されます。

Secondary Box Dialog

以上のNormalなGroupBoxとSecondary Group StyleのGroup Boxを生成する、リソースファイルはここからDownloadしてださい。

Popup Menu

かなりいろんなことができますが、取りあえずは典型的な物を紹介します。以下のようなPopup Menuだけのdialogを作ってみます。

Normal Popup

例によって、CNTL リソースを作るところまではいいでしょう。normalなPopup menuのProcIDは1008です。そして、Popup Menuの内容を設定するには、「MENU」リソースを利用します。以下のようなMENU リソースを作って下さい。idは128としましょう。

MENU Resource

そして、CNTL リソースの方で、どのMENUリソースを参照するかは「Min」の欄でそのidを指定します(なぜ、Minで指定するかは、凄まじく謎です)。ここでは、Minを128と設定します。

あとは、例によってBoundsRectとTitleを設定します。BoundsRectは、Popup MenuとTitleを含んだ大きさで、そのうちTitleがどれくらいの幅を占めるかは、「Max」の欄でで設定します(これも凄まじく謎です)。CNTLとDITLをいったり来たりしてうまいこと調整して下さい(CNTLをいちいち閉じなければならないのが、とても苦痛ですが)。popup menuのdefaultの項目はValueに番号を設定することによって行えます。とりあえず、以下のように設定してみました。

CNTL of Normal Popup

DITLリソース上では以下のように表示されるでしょう。

Popup on DITL

そして、このリソースファイルをDialog Dumperを通すと以下のようなcodeが生成されるはずです。

-- NormalPopupMenu 
set |dNormalPopup| to {size:[224, 141], style:standard window, closeable:true, name:"Simple Dialog", contents:[¬ 
    {class:pop up, bounds:[33, 42, 183, 62], name:"Popup Title", name width:80, contents:["First", "Second", "Third"]} ¬ 
        ] ¬ 
    } 
 
dd auto dialog |dNormalPopup| with grayscale

以上のPopup menuを生成する、リソースファイルはここからDownloadしてださい。

Summary

以下にCNTL resouceのProcIDと、それに対応すcontrolをまとめてみました。

ProcID control CNTL resourceの設定
356 List Box Value -- あらかじめ選択しておくitem
BoundsRect -- List Boxの大きさ
160 Group Box Tile -- Group Boxの名前
BoundsRect -- Group Boxの大きさ
164 Secondary Group Box Tile -- Group Boxの名前
BoundsRect -- Group Boxの大きさ
1008 Popup Menu BoundsRect -- Popup Menu全体の大きさ
Title -- Popup Menuのtitle
Max -- Titleの幅
Min -- Popup Menuの内容となるMENU resourceのid
Value -- defaultのmenu item


This page was last built on Wed, Feb 17, 2016 ; 10:00:42 AM . Thanks for checking it out!