当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

通过修改VCL源码实现自定义输入对话框

      通过修改VCL源码实现自定义输入对话框

    在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;
          end;
          Edit := TEdit.Create(Form);
          with Edit do
          begin
            Parent := Form;
            Left := Prompt.Left;
            Top := Prompt.Top + Prompt.Height + 5;
            Width := MulDiv(164, DialogUnits.X, 4);
            MaxLength := 255;
            Text := Value;
            if Text = 'Password' then  // 如果传进来的默认字符串是"Password"
              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
 

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