604
社区成员
发帖
与我相关
我的任务
分享
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
TPoint GetAveCharSize(TCanvas *Canvas)
{
char Buffer[52];
for (int i = 0; i < 26; i++)
Buffer[i] = char(i + 'A');
for (int i = 0; i < 26; i++)
Buffer[i + 26] = char(i + 'a');
TPoint ptResult;
::GetTextExtentPoint(Canvas->Handle, Buffer, 52, PSIZE(&ptResult));
ptResult.x = ptResult.x / 52;
return ptResult;
}
bool __fastcall Dialogs::InputQuery(const String ACaption, const String APrompt, String &Value)
{
bool bResult = false;
TLabel *Prompt;
TEdit *Edit;
TButton *Button;
TPoint DialogUnits;
int ButtonTop, ButtonWidth, ButtonHeight;
TForm *Form = new TForm(Application);
try
{
Form->Font->Name = "宋体"; // 更改输入对话框窗体的字体为宋体
Form->Font->Size = 9; // 更改输入对话框窗体的字号为9号
Form->Canvas->Font = Form->Font;
DialogUnits = GetAveCharSize(Form->Canvas);
Form->BorderStyle = bsDialog;
Form->Caption = ACaption;
Form->ClientWidth = MulDiv(180, DialogUnits.x, 4);
Form->Position = poScreenCenter;
Prompt = new TLabel(Form);
Prompt->Parent = Form;
Prompt->Caption = APrompt;
Prompt->Left = MulDiv(8, DialogUnits.x, 4);
Prompt->Top = MulDiv(8, DialogUnits.y, 8);
Prompt->Constraints->MaxWidth = MulDiv(164, DialogUnits.x, 4);
Prompt->WordWrap = true;
Edit = new TEdit(Form);
Edit->Parent = Form;
Edit->Left = Prompt->Left;
Edit->Top = Prompt->Top + Prompt->Height + 5;
Edit->Width = MulDiv(164, DialogUnits.x, 4);
Edit->MaxLength = 255;
Edit->Text = Value;
if (Edit->Text == "Password") // 如果传进来的默认字符串是"Password"
Edit->PasswordChar = '*'; // 则将输入框变成星号样式的
Edit->SelectAll();
ButtonTop = Edit->Top + Edit->Height + 15;
ButtonWidth = MulDiv(50, DialogUnits.x, 4);
ButtonHeight = MulDiv(14, DialogUnits.y, 8);
Button = new TButton(Form);
Button->Parent = Form;
Button->Caption = "确定"; // 确定按钮,原先的标题是"OK"
Button->ModalResult = mrOk;
Button->Default = True;
Button->SetBounds(MulDiv(38, DialogUnits.x, 4), ButtonTop, ButtonWidth,
ButtonHeight);
Button = new TButton(Form);
Button->Parent = Form;
Button->Caption = "取消"; // 取消按钮,原先标题为"Cancel"
Button->ModalResult = mrCancel;
Button->Cancel = True;
Button->SetBounds(MulDiv(92, DialogUnits.x, 4), Edit->Top + Edit->Height + 15,
ButtonWidth, ButtonHeight);
Form->ClientHeight = Button->Top + Button->Height + 13;
if (Form->ShowModal() == mrOk)
{
Value = Edit->Text;
bResult = True;
}
}
__finally
{
delete Form;
}
return bResult;
}