当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

中文按钮星号密码输入对话框的实现

在BCB中有两个函数可以实现输入对话框:InputBox和InputQuery,其实InputBox也是调用了InputQuery,这个函数有几个缺点:
  (1).输入对话框上的按钮是英文的。
  (2).不能实现星号密码的效果。
但在实际编程中经常会遇到这样的问题。全是中文的界面和提示,可是在输入对话框中却是英文的按钮,显的有些不协调,而且有时在Win2k下做的程序,换在Win98下的时候,输入对话框中的提示会显示不完整。通常在Form中可以通过更改默认字体为宋体9号来解决,但是在输入对话框中可不可以呢?答案是肯定的,方法就是:修改VCL源码!

以下方法介绍了在BCB 6.0 企业版中通过修改VCL源码实现自定义输入对话框。

1. 在BCB6安装目录的Source\\Vcl目录下找到dialogs.pas,并copy一份到你的工程目录下.

2. 打开刚才复制过来的dialogs.pas,修改其中的InputQuery函数代码(1857-1927行):
   修改后的代码如下:
   
function InputQuery(const ACaption, APrompt: string;
  var Value: string): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;
  Form := TForm.Create(Application);
  with Form do
    try
      Font.Name := \'宋体\'; // 更改输入对话框窗体的字体为宋体
      Font.Size := 9;      // 更改输入对话框窗体的字号为9号
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        Caption := APrompt;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
        WordWrap := True;
          PasswordChar := \'*\';     // 则将输入框变成星号样式的
        SelectAll;
      end;
      ButtonTop := Edit.Top + Edit.Height + 15;
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := \'确定\'; // 确定按钮,原先的标题是\"OK\"
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := \'取消\'; // 取消按钮,原先标题为\"Cancel\"
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接