Delphi XE2:InputQuery显示框宽度过大

时间:2012-10-22 01:19:35

标签: delphi vcl

尝试使用多线路时:即

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

由于存在No Overload函数,我无法编译以获取InputQuery函数的这些参数。 我查看了Vcl.Dialogs单元中的Overload InputQuery函数,但无法使其工作。

有没有人知道在多行提示下使用InputQuery函数的正确语法?

我正在使用Embarcadero RAD Studio XE2 - Delphi

提前感谢任何“有用”的回复。

1 个答案:

答案 0 :(得分: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。 Haven没有尝试过以前的版本。 我原以为这是不言自明的(如果你有一些Delphi的经验)。 干杯 克里斯托夫