|
プログラムを作っていくと、いろんなメッセージを表示したくなってくる場合が多くなっていきます。例えば、起動時に、フォームのキャプション(タイトル)に表示させたい場合、
Form1.Caption := 'これはテストプログラムです!'; |
を OnShowイベントに記述すれば、以下のようになります。
また、画面の中にメッセージ文字を置きたい場合には、[Standard]内にあるLabelコンポーネントを配置して、そのCaptionを好きな内容にする事が出来ますし、また、[Win32]内のStatusBarコンポーネントを配置して、ステータスバーに文字を記入する事も出来ます。
(カウンタ表示等、繰り返し処理内で表示を変更させたい場合には、表示変更直後に「Label1.Update;」や「Label1.Refresh;」「StatusBar1.Update;」や「StatusBar1.Refresh;」等を行って再描画させる必要があります)
そうではなく、画面を開けてメッセージを表示させたい場合があります。一時的な警告メッセージなどを表示するには、MessageDlg関数を利用する事が出来ます。1行の注意文、警告文、エラー文、確認文、等を表示する際によく利用されます。
例えば、ボタンを配置し、ボタンをクリックした時に
MessageDlg('メッセージを表示',mtInformation,[mbOk],0); |
とすれば、
のように表示されます。
1つ目の引数は、表示したい1行メッセージです。
2つ目の引数は、画面に表示したい内容を示します。
| 警告文 | mtWarning |
| エラー文 | mtError |
| 情報文 | mtInformation |
| 確認文 | mtConfirmation |
| その他 | mtCustom |
3つ目には表示させたいボタンを指定します。以下のようにすれば押したボタンが何かを確認して処理させる事が出来ます。
if MessageDlg('よろしいですか?',mtConfirmation,
[mbYes, mbNo],0) = mrYes then begin
// 「はい」の処理
end
else begin
// 「いいえ」の処理
end; |
ボタン | 3つ目の引数 | 戻り値 |
OK | mbOK | mrOk |
キャンセル | mbCancel | mrCancel |
はい | mbYes | mrYes |
いいえ | mbNo | mrNo |
中止 | mbAbort | mrAbort |
再試行 | mbRetry | mrRetry |
無視 | mbIgnore | mrIgnore |
すべて | mbAll | mrAll |
すべていいえ | mbNoToAll | mrNoToAll |
すべてはい | mbYesToAll | mrYesToAll |
次に、別画面で、文字を複数行にしたい場合、いろんな画像を表示させたい場合、文字入力をしたい場合、などは、以下のようにします。
@ メニュー「ファイル」→「新規作成」→「フォーム」を実行します。
A 新たにフォームが作成されますので、今までのように自由にフォームを作成します。なお、フォームのNameプロパティには、分かりやすい名前を付けておくのが良いと思われます。例えば、数値入力をしたいのならば、「InputNum」等のような名前にします。
B ある程度、フォームを作成したら、メニュー「ファイル」→「名前を付けて保存」を実行します。ここでは「tes002.pas」として保存しています。
C メニュー「表示」→「プロジェクト マネージャ」を実行して下さい。このプログラム(プロジェクト)で用意するファイル群を見る事が出来ます。ここでダブルクリックすると、そのフォームが表示されますので便利に利用出来ます。
D メイン画面のtes001.pasで、数値入力画面 tes002.pas を表示させるには、まず、tes001.pasの最初の方にある
unit tes001;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
〜 |
の uses節の中に、「tes002.pas」を追加します。拡張子「.pas」は省略します。
unit tes001;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
tes002 ;
type
〜 |
EボタンのOnClickイベントに、
を追加します。すると、ボタンを押したら、上記の数値入力画面が表示されるようになります。
なお、「ShowModal」の代わりに「Show」で画面表示を行わせる事も出来ます。「ShowModal」で表示させた画面は、画面を閉じない限り、元の画面を触る事は出来ません。「Show」で表示させた画面は、画面を閉じなくても、元の画面操作が出来るようになっています。扱いがかなり違ってきますので注意して下さい。
次に、数値入力をした後、その入力した数値をどのようにすれば受け渡せるのか、についてですが、おおよそ、2つのパターンがあります。
1つは、InputNum側のフォームのクラス定義にある「public」内に変数を定義し、その変数を使って数値を出し入れします。
もう1つは、別にユニットを作成し、外部変数として定義をして、それぞれのuses節に登録して使用する方法です。
後者は、プログラムが複雑化して、いろんな変数を、いろんな画面で複雑に使い回す場合に利用します。
基本的には、前者のパターンで、数値入力画面の処理は、数値入力ユニット内で、行うようにします。
数値入力画面のtes002.pas側で、
type
TInputNum = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
private
{ Private 宣言 }
public
{ Public 宣言 }
end; |
を
type
TInputNum = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
private
{ Private 宣言 }
public
{ Public 宣言 }
NumA : Integer ;
NumB : Integer ;
BtnF : Boolean ; // True:OK False:Cancel
end; |
のように追加記入します。そして[OK]処理内で
NumA := StrToInt(Edit1.Text);
NumB := StrToInt(Edit2.Text);
BtnF := True ; // "OKを押したよ"
close ; // 画面を閉じる |
のように書きます。
数値入力側を作ったら、メイン画面側をそれに対応させます。
数値入力フォームを表示させた後、OKボタンを押していれば、数値Aと数値Bの内容を足し算して、Label1に表示させる、というような場合、
InputNum.ShowModal ;
if (InputNum.BtnF) then begin
Label1.Caption := 'A+B='
+ IntToStr(InputNum.NumA + InputNum.NumB);
end; |
のように書きます。
【ソース・プログラム】
プログラムが複雑になってくると、画面を分けたり、プログラムを分けたり、する事になって、1つのプロジェクト内に沢山のファイルを作って行く事になります。そのため、プログラムが複雑化しても、後でメンテナンスし易くするため、や、他の人が見ても分かりやすいように、また、中身を見なくても画面や関数を自由に利用出来るように(ブラックボックス化出来るように)、なるべくシンプル・明確に作る事が重要になってきます。
そのためには、1つのファイルは、その中身だけで問題を収束させる事、外部との入出力を分かりやすいようにしておく事、クラス定義出来るものはなるべくクラス定義しておく事、が大切で、別ユニットで外部変数定義をする、というような事は、なるべく避けましょう。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
▲PREV
▼NEXT
|