0

複数行の APrompt を使用しようとする場合: つまり

sPrompt := 'some text' + #13#10#10 + 'some more info...' + #13#10 +
           'Blah, Blah' + #13#10#10 + 'What is your input?';

InputQuery 関数は文字列を文字列の配列として受け取り、配列内の最長の文字列に従って Form の MaxWidth を計算します。

上記の例では、InputQuery フォームは文字列の長さ (約 50 文字) によって計算されます。最長の行はそのほんの一部ですが。

その結果、非常に幅の広い InputQuery ボックスが表示され、多くの空のスペースが表示されます。とてもプロフェッショナルに見えません。

各行を保持する文字列の配列を作成しようとすると:

var saPrompt: array of string;
    sInputString: String;
Begin
   SetLength(saPrompt,4);
   saPrompt[0] := 'some text' + #13#10#10;
   saPrompt[1] := 'some more info...' + #13#10;
   saPrompt[2] := 'Blah, Blah' + #13#10#10;
   saPrompt[3] := 'What is your input?';
   sInputString := '???';

   If InputQuery('I Need Input?',saPrompt,sInputString) then

InputQuery 関数のこれらのパラメーターを取得するオーバーロード関数が存在しないため、コンパイルできません。Vcl.Dialogs Unit の Overload InputQuery 関数を見てきましたが、機能しません。

複数行のプロンプトで InputQuery 関数を使用するための正しい構文を知っている人はいますか?

Embarcadero RAD Studio XE2 - Delphi を使用しています

「役立つ」回答をお寄せいただきありがとうございます。

4

1 に答える 1

0
function GetPassword:string;
var 
  saPrompt,saVal: array of string;
begin
 SetLength(saPrompt,1);
 saPrompt[0] := #30'Enter password';
 SetLength(saVal,1);
 saVal[0] := '??????';
 if InputQuery('Password',saPrompt,saVal) 
    then result:=saVal[0] else return:='';
end;

このコードは Delphi XE2 で機能します。以前のバージョンは試していません。これは一目瞭然だと思います(Delphiの経験があれば)。乾杯クリストフ

于 2013-01-23T09:31:01.640 に答える