あるのに使用delphi inputboxに複数の値?
-
18-09-2019 - |
質問
用していただきたいと思い複数の異なる価値観(時間、圧力、名...)からユーザーです。いカスタマイズ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 や 形態 ます。すでにみんなありますので、最悪の年です。を追加する形でプロジェクトにおいて少なくとも一つの形に影響しませんのプロジェクトサイズのもので、特にない形で私は、上記の情報のみを持つ。
他のヒント
あなたは「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方法がルーチンに使用される値を保持しているレコードまたはクラスからダイアログを取り込みます。私は、フォームの外側からフォーム上のコントロールを操作する代わりに、フォーム自体でそれを行うためのルーチンを記述しようとしたことがありません。