ダイアログを表示する
|
| PROCEDURE TEST; | |
| VAR | |
| x1,y1,x2,y2,height:REAL; | |
| BEGIN | |
| GetRect(x1,y1,x2,y2); | |
| height:=RealDialog('高さを入力して下さい','50'); | 手続き「RealDialog」を使って実数を入力する為のダイアログを表示します。 ダイアログを閉じると値が変数「height」に格納されます。 |
| IF NOT DidCancel THEN | 関数「DidCancel」を使ってダイアログ上で「Cancel」ボタンが押されたかどうか判定します。 もし「Cancel」ボタンが押されたら柱状体を作成せずにプログラムを終了します。 |
| BEGIN | |
| BeginXtrd(0,height); | 手続き「BeginXtrd」にダイアログで入力した高さ(変数height)をパラメータとして与えます。 |
| Rect(x1,y1,x2,y2); | 柱状体の底面の形を書きます。 |
| EndXtrd; | 柱状体の作成が終わったらかならず「EndXtrd」を呼んでください。 |
| END; | |
| END; | |
| Run(TEST); |
PROCEDURE TEST;
VAR
x1,y1,x2,y2,height:REAL;
BEGIN
GetRect(x1,y1,x2,y2);
height:=RealDialog('高さを入力して下さい','50');
IF NOT DidCancel THEN
BEGIN
BeginXtrd(0,height);
Rect(x1,y1,x2,y2);
EndXtrd;
END;
END;
Run(TEST);
少しプログラムは長くなりますが、ボタンやチェックボックスを自由に配置できます。
自由度は高いですが、いくつかの処理を自分で制御しなければなりません。
以下のプログラムを実行するとカスタムダイアログを表示します。
「OK」ボタンか「Cancel」ボタンを押すと、ダイアログが閉じてプログラムを終了します。
| PROCEDURE TEST; | |
| CONST | |
| kDialogWidth=200; | ダイアログの横幅を定数で宣言しています。 |
| kDialogHeight=320; | ダイアログの縦幅を定数で宣言しています。 |
| VAR | |
| item,dx1,dx2,dy1,dy2,i:INTEGER; | |
| PROCEDURE centerBounds(VAR x1,y1,x2,y2:INTEGER); | ダイアログの表示座標を割り出すサブルーチンです。 画面の中央に表示されるように計算し、座標を返します。 |
| VAR | |
| sx1,sx2,sy1,sy2:INTEGER; | |
| BEGIN | |
| GetScreen(sx1,sy1,sx2,sy2); | 手続き「GetScreen」を使って画面の大きさを取得します。 |
| x1:=(sx1+sx2)/2-kDialogWidth/2; | ダイアログの左上のX座標を計算します。 |
| y1:=(sy1+sy2)/2-kDialogHeight/2; | ダイアログの左上のY座標を計算します。 |
| x2:=(sx1+sx2)/2+kDialogWidth/2; | ダイアログの左下のX座標を計算します。 |
| y2:=(sy1+sy2)/2+kDialogHeight/2; | ダイアログの左下のY座標を計算します。 |
| END; | |
| Begin | |
| CenterBounds(dx1,dy1,dx2,dy2); | 12行目のサブルーチン(CenterBounds)を呼んでいます。 |
| BeginDialog(1,1,dx1,dy1,dx2,dy2); | カスタムダイアログの定義を開始します。 最初のパラメータはダイアログの番号です。1〜20までの任意の番号を与えます。 2番目はダイアログの種類ですが、現在は1しか与えられません。 3番目以降はダイアログの座標ですがこれは「CenterBounds」で取得した座標をそのまま与えています。 |
| AddButton('OK',1,1,120,290,190,310); | 「OK」ボタンを作成します。最初のパラメータはボタンの名前です。 2番目はアイテム番号です。重複しないように各アイテムは1〜50までの番号を与えます。尚、プッシュボタンに1番を与えるとデフォルトボタン(二重枠のボタン)になります。 3番目はボタンの種類です。プッシュボタンなので1を与えます。 4番目以降はボタンの座標です。 |
| AddButton('Cancel',2,1,40,290,110,310); | 22行目と同じように「Cancel」ボタンを与えます。 |
| AddField('編集ボックス1',3,2,10,10,190,30); | 編集可能なフィールドを作成します。 最初のパラメータはフィールドの初期値で、2番目はアイテム番号です。 3番目はフィールドの種類(2=編集不可能)です。 4番目以降はフィールドの座標です。 |
| AddField('編集ボックス2',4,2,10,40,190,60); | 24行目と同じように編集可能なフィールドを作成します。 |
| AddField('テキスト1',5,1,10,70,190,90); | |
| AddField('テキスト2',6,1,10,100,190,120); | |
| AddField('チェックボックス1',7,2,10,130,190,210); | |
| AddField('チェックボックス2',8,2,10,160,190,240); | |
| AddField('ラジオボタン1',9,3,10,190,190,210); | |
| AddField('ラジオボタン2',10,3,10,220,190,240); | |
| AddField('ラジオボタン3',11,3,10,250,190,270); | |
| EndDialog; | |
| GetDialog(1); | |
| SetItem(9,TRUE); | |
| REPEAT | |
| DialogEvent(item); | |
| IF (item=7) OR (item=8)THEN | |
| SetItem(item,NOT ItemSel(item)); | |
| IF (item>=9)AND(item<=11)THEN | |
| BEGIN | |
| FOR i:=9 TO 11 DO | |
| Setitem(item,TRUE); | |
| END; | |
| UNTIL(item=1)OR (item=2); | |
| ClrDialog; | |
| END; | |
| Run(TEST); |