inputBoxを使って、[ok][cancel]以外のオリジナルのボタンを追加したいのですが、そのようなことはできるのでしょうか?
ご教授お願いします。
InputBoxは、内部でInputQueryを呼び出していて、InputQueryは、呼ばれるとそのつどTFormのインスタンスを生成し、ボタンなどを配置しています。
同じように、TFormを作成し、コンポーネントを生成して配置してやれば、たいていのことは出来ます。
InputBoxの中にコンポーネントを動的生成するということなのでしょうか?
Halbow です。
> InputBoxの中にコンポーネントを動的生成するということなのでしょうか?
いえ、そうではなくて、Delphi のフォームデザイナは、ダイアログをつくる
のが簡単にできますよね。InputBox() のボタンを追加した程度のダイアログ
ボックスなら10分もあればできるんではないのですか、ということだと
思います。そのユニットファイルを使って
function MyInputBox(const ACaption, APrompt, ADefault: string): string;
という関数をつくるのも数分で済むのでは。
function
お返事ありがとうございます。
ということは、InputBox() の中に、追加することは、難しいということなのでしょうか?
どうしても、InputBox()の中に追加したいのですが・・・・・
にしのさんや、Halbowさんがおっしゃっていることは、InputBoxを使うのではなくて、ダイアログで代用できるのではと言うことだと思います。プロジェクトにダイアログを追加して、それにTEditBoxなどを追加すれば簡単にできます。
難しいですが、無理ではありません。
技術向上のためであれば、やる価値があると思います。
ただ、実用的ではありません。
Halbow です。
> inputBoxを使って、[ok][cancel]以外のオリジナルのボタンを追加したいのですが
ちょっとやってみました。
{ Private 宣言 }
public
procedure WMApp(var MsgTMessage);message WM_APP;
procedure MyButtonClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
PostMessage(Handle,WM_APP,0,0);
InputBox('Test','テストです','Default');
end;
procedure TForm1.WMApp(var MsgTMessage);
var
i:integer;
Frm:TForm;
begin
Frm := nil;
for i := 0 to Screen.FormCount-1 do
if Screen.Forms[i].ClassName = 'TForm' then Frm := Screen.Forms[i];
if not Assigned(Frm) then exit;
with TButton.Create(Frm) do begin
Parent := Frm;
Caption := 'Click Me!';
Top := 3;
Left := 100;
OnClick := MyButtonClick;
end;
end;
procedure TForm1.MyButtonClick(Sender: TObject);
begin
((Sender as TButton).Parent as TForm).Color := Random($1000000);
end;
フォームデザイナでそういう使い捨てのフォームを作るのって、
意外とおっくうに感じてしまいますよね(いや、少なくともわたしは^^;)。
CreateMessageBoxでメッセージボックスをつくり、
Alignなどを駆使してラベルの下に、Editを配置させる ということもできますね。
そうすれば標準的なボタンは簡単に付けることができますし、
キャプションもある程度(キャプションがあまりに長いとはみ出すかも?)なら変えることができます。
> CreateMessageBox
CreateMessageDialogでした。失礼しました。
Halbow です。
> フォームデザイナでそういう使い捨てのフォームを作るのって、
> 意外とおっくうに感じてしまいますよね(いや、少なくともわたしは^^;)。
Delphi のフレームワークを見てみると、Windows からは目に見えない
Application ウィンドウだけがメインウィンドウで、他の Form1 などは
ダイアログです。Delphi の IDE はそれ自体が精巧なダイアログエディタ
であると見ることができます。Delphi IDE より素晴らしいダイアログエディタ
はありません。気軽にダイアログを作れることが Delphi の最大のメリット
であると思います。ですから「使い捨てのフォームを作る」のこそ、Delphi
がもっとも活躍できる場面だと思っています。
いろいろしらべてみて
ダイアログで代用できそうなのですが
Editやボタンなどのコンポーネントの追加の仕方が
わかりません。
簡単なサンプルのようなものがあれば
お願いします。
フォームの代わりにダイアログを用意して、TEditやボタンを追加すれば良いだけです。
MyDialogというフォームにボタンを並べる
MyDialogに s:string; を宣言する
ボタンクリック時にsに値を代入しModalResult:=mr_OK するようにする
↓ダイアログを表示させる
var
R:string;
begin
MyDialog.s:='';
MyDialog.showmodal;
R:=MyDialog.s
(Rの値を使用)
end;
ツイート | ![]() |