ダイアログを表示する
|
| 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); | |
| x1:=(sx1+sx2)/2-kDialogWidth/2; | |
| y1:=(sy1+sy2)/2-kDialogHeight/2; | |
| x2:=(sx1+sx2)/2+kDialogWidth/2; | |
| y2:=(sy1+sy2)/2+kDialogHeight/2; | |
| END; | |
| Begin | |
| CenterBounds(dx1,dy1,dx2,dy2); | |
| BeginDialog(1,1,dx1,dy1,dx2,dy2); | |
| AddButton('OK',1,1,120,290,190,310); | |
| AddButton('Cancel',2,1,40,290,110,310); | |
| AddField('編集ボックス1',3,2,10,10,190,30); | |
| AddField('編集ボックス2',4,2,10,40,190,60); | |
| 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); |