inputBoxについて


理恵  2003-12-17 21:51:04  No: 6270

inputBoxを使って、[ok][cancel]以外のオリジナルのボタンを追加したいのですが、そのようなことはできるのでしょうか?
ご教授お願いします。


にしの  2003-12-17 22:06:21  No: 6271

InputBoxは、内部でInputQueryを呼び出していて、InputQueryは、呼ばれるとそのつどTFormのインスタンスを生成し、ボタンなどを配置しています。
同じように、TFormを作成し、コンポーネントを生成して配置してやれば、たいていのことは出来ます。


理恵  2003-12-18 04:43:42  No: 6272

InputBoxの中にコンポーネントを動的生成するということなのでしょうか?


Halbow  2003-12-18 05:07:05  No: 6273

Halbow です。

> InputBoxの中にコンポーネントを動的生成するということなのでしょうか?

いえ、そうではなくて、Delphi のフォームデザイナは、ダイアログをつくる
のが簡単にできますよね。InputBox() のボタンを追加した程度のダイアログ
ボックスなら10分もあればできるんではないのですか、ということだと
思います。そのユニットファイルを使って

function MyInputBox(const ACaption, APrompt, ADefault: string): string; 

という関数をつくるのも数分で済むのでは。

function


理恵  2003-12-18 23:30:10  No: 6274

お返事ありがとうございます。
ということは、InputBox() の中に、追加することは、難しいということなのでしょうか?
どうしても、InputBox()の中に追加したいのですが・・・・・


HOta  2003-12-18 23:35:25  No: 6275

にしのさんや、Halbowさんがおっしゃっていることは、InputBoxを使うのではなくて、ダイアログで代用できるのではと言うことだと思います。プロジェクトにダイアログを追加して、それにTEditBoxなどを追加すれば簡単にできます。


にしの  2003-12-19 01:25:09  No: 6276

難しいですが、無理ではありません。
技術向上のためであれば、やる価値があると思います。
ただ、実用的ではありません。


Halbow  2003-12-21 11:18:27  No: 6277

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;


たかみちえ  URL  2003-12-23 20:13:16  No: 6278

フォームデザイナでそういう使い捨てのフォームを作るのって、
意外とおっくうに感じてしまいますよね(いや、少なくともわたしは^^;)。

  CreateMessageBoxでメッセージボックスをつくり、
Alignなどを駆使してラベルの下に、Editを配置させる ということもできますね。
  そうすれば標準的なボタンは簡単に付けることができますし、
キャプションもある程度(キャプションがあまりに長いとはみ出すかも?)なら変えることができます。


たかみちえ  URL  2003-12-23 20:14:36  No: 6279

> CreateMessageBox
CreateMessageDialogでした。失礼しました。


Halbow  2003-12-23 22:11:11  No: 6280

Halbow です。

>   フォームデザイナでそういう使い捨てのフォームを作るのって、
> 意外とおっくうに感じてしまいますよね(いや、少なくともわたしは^^;)。

Delphi のフレームワークを見てみると、Windows からは目に見えない
Application ウィンドウだけがメインウィンドウで、他の Form1 などは
ダイアログです。Delphi の IDE はそれ自体が精巧なダイアログエディタ
であると見ることができます。Delphi IDE より素晴らしいダイアログエディタ
はありません。気軽にダイアログを作れることが Delphi の最大のメリット
であると思います。ですから「使い捨てのフォームを作る」のこそ、Delphi
がもっとも活躍できる場面だと思っています。


理恵  2003-12-25 02:56:52  No: 6281

いろいろしらべてみて
ダイアログで代用できそうなのですが
Editやボタンなどのコンポーネントの追加の仕方が
わかりません。
簡単なサンプルのようなものがあれば
お願いします。


HOta  2003-12-26 01:20:51  No: 6282

フォームの代わりにダイアログを用意して、TEditやボタンを追加すれば良いだけです。


るるとん@K  2004-01-17 07:06:15  No: 6283

MyDialogというフォームにボタンを並べる
MyDialogに s:string; を宣言する
ボタンクリック時にsに値を代入しModalResult:=mr_OK するようにする
↓ダイアログを表示させる
var
R:string;
begin
MyDialog.s:='';
MyDialog.showmodal;
R:=MyDialog.s
(Rの値を使用)
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加