質問

用していただきたいと思い複数の異なる価値観(時間、圧力、名...)からユーザーです。いカスタマイズinputbox.そのうちの一の値です。

道があるでしょうかこれを解決する状況、又はその他の成分を使用しますか?

役に立ちましたか?

解決

フランソワについてはその通りである。また、限定のツールだが備えられています。 InputBox 単純な設計のための複雑な入力できるようには設計されていません延長する取扱い複数の値。

のページのリンク おコメントは一例ですが、ので不思うな誤解です。かかったとのことで数を読み込みを取得します。を中心に MyAsk 機能を行います。(無視する TAppendThread クラスの宣言しています。では絶対に無駄にはなりません。) MyAsk 入力データの一覧と促し、価値観、それぞれに、 InputBox 要求値からのユーザーです。そしてわかりやすいのです。でき換えるようになります:

procedure MultiInputBox(const Prompts: array of string; var Values: array of string]);
var
  i: Integer;
begin
  Assert(Length(Prompts) = Length(Values));
  for i := 0 to High(Prompts) do begin
    Values[i] := InputBox(Application.Title, Prompts[i], Values[i]);
  end;
end;

呼ばれるようになります:

TempTime := TimeToStr(DefaultTime);
TempPressure := IntToStr(DefaultPressure);
TempName := DefaultName;
MultiInputBox(['Time', 'Pressure', 'Name'], [TempTime, TempPressure, TempName]);
TimeToUse := StrToTime(TempTime);
PressureToUse := StrToInt(TempPressure);
NameToUse := TempName;

ことになる ひどい インタフェースのユーザーです。が戻りのないことを解除するときは、ありませんの指示にかかる取り調べでは、もはや強制フォーマットデータです。きんはるかに良い状態になるのである。だデザインのカスタム形状を取得する正確な情報にあります。ご利用のツールと設計法についての最も簡単なものです。なレジスト。

が必要な場合に、圧力、氏名、その形態と入力します。を使用 TDateTimePicker の時間を考えてみましょう TSpinEdit 数値の入力を使用 TEdit の名前です。入 TLabel 制御次にそれぞれの入力をユーザがどう各管理するものとします。を入れてOKボタンと"Cancel"ボタンをクします。定その他様々な形特性などのボーダースタイルのキャプション.がほとんど バーコード 書き込んでいます。まったく新しい追加のコードを検証するための入力値がっているか確認してください自分たちで作るものだ。"

利用し、創造していくかについて、populate初期値でmodally読み込むための新たな価値観がでお選びいただけます。

var
  form: TDatePressureNameDialog;
begin
  form := TDatePressureNameDialog.Create(nil);
  try
    form.TimePicker.Value := DefaultTime;
    form.PressureEdit.Value := DefaultPressure;
    form.NameEdit.Text := DefaultName;
    if form.ShowModal = mrOK then begin
      TimeToUse := Frac(form.TimePicker.Value);
      PressureToUse := form.PressureEdit.Value;
      NameToUse := form.NameEdit.Text;
    end;
  finally
    form.Free;
  end;
end;

通知のものかチェックの結果 ShowModal 方法。をまとめて見ることができるのか、ユーザーを押しOK、取消あります。できないこと InputBox, は、常に文字列を返します.(InputQuery できる情報の違い二つの機能がるだけではないは機能の値を使おう。)

さんのこの新しい形式のクラス重量下にご注意願います。のものが最大の効果を発揮できるようにプロジェクトサイズの SysUtils形態 ます。すでにみんなありますので、最悪の年です。を追加する形でプロジェクトにおいて少なくとも一つの形に影響しませんのプロジェクトサイズのもので、特にない形で私は、上記の情報のみを持つ。

他のヒント

TEDIT -

あなたは「InputBox関数」によって、正確に何を意味するのですか?さまざまなことを行うことができ、入力用部品、多くの異なる種類があります。名前については、TEDITは非常に良いです - しかし、時間のために、あなたはカレンダーコントロールをすることができ、圧力のためにあなたは数字のために偉大に見えるコントロールを使用することもできます。

はい、フォームをデザイン!

Dialogs.InputBoxは、ユーザから1つの文字列を取得するために迅速かつ簡単に設計されています。
あなたがもっと欲しい場合は、エントリーフォームを設計する必要があります。
あなたが基本的な対話をしたい場合は、Dialogs.InputQueryのコードを見て、そしてあなた自身の手順をコーディングするための出発点としてそれを使用することができます。

あなたは、実際の契約をしたい場合は、

、あなたは掘ると実際のフォームをコーディングする必要があります。

ロブのケネディは右..です入力ボックスは良いオプションではありません... 正確に何を保存しようとしていますか?エグゼスペース、ressourcesまたはソースコード?それともあなたは自分の「緑」のコードで環境を保存したい?

あなたがのInputQuery機能を見てみる場合は、

あなたは何それがないことTFormはを作成し、それはサムスのTButtons / TLabels / TEDIT、位置やショーフォームをモーダルを作成していることがわかります。

あなたは、検証コントロールをカスタマイズし、それらを配置しても、ヒントを追加することができますそばにあなたが...あなたのプロジェクトに追加する新しいフォームで行うだろうまさに...

新しいフォームに移動します...

あなたは、あなたのフォームプロジェクトオプションに入り、フォームのオプションを選択し、右に自動作成されたくないすべてのフォームを移動を作成した後に自動作成するすべての形式を設定する必要はありません。

私が最も一般的にこれらの非自動作成したフォームに使用するパターンは、次のようなものです。

Function GetValuesFromDialog : boolean;
var
  dlg : tValuesDialog;
begin
  result := false;
  dlg := tValuesDialog.Create(nil);  
  try
    // set initial values in dialog
    dlg.SetValues( rData );
    // show the dialog
    result := dlg.ShowModal = mrOk;
    // pull values from dialog
    if result then
      dlg.GetValues( rData );
  finally
    dlg.free;
  end;
end;

にgetValues / SetValues方法がルーチンに使用される値を保持しているレコードまたはクラスからダイアログを取り込みます。私は、フォームの外側からフォーム上のコントロールを操作する代わりに、フォーム自体でそれを行うためのルーチンを記述しようとしたことがありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top