我爱黑客网首页 设为首页
加入收藏
联系我们
 首 页  技术文章 下载中心 站长学院 交流论坛
 软件:
 文章:        教程:
 推荐: 我爱黑客网论坛
 
 
 
 
   
黑软: Q Q 软件 木马间谍 探嗅监听 溢出攻击 加密解密 漏洞扫描 脚本注入 远程控制 综合利用 聊天工具  
 
技术文章: 爱黑新闻 | 黑客攻防 | 网络技术 | 程序设计 | 系统操作 | 本站动态 | 业界动态 | 安全公告 | 病毒公告 | 八卦黑客
 
 
您当前的位置:我爱黑客 -> 程序设计 -> C++ -> C++视图 -> 文章内容  
栏目导航
· C++综合 · C++通信
· C++视图 · C++图象
· C++系统 · C++多媒体
· C++界面 · C++文件
· C++数据库 · C++网络
热门文章
· 用TreeView浏览目录
· 如何取得Memo的行和列..
· 改变DBGrid的颜色
· 如何在RichEdit中实现..
· 在BCB中实现TRichEdit..
· 通过修改VCL源码实现自..
· 雕虫小计—颜色渐变的..
· 如何快速自动生成并定..
· 打印Memo的文本信息
· CB编程中动态更改自定..
· 直接发送数据到打印机..
· 在C++Builder中自定义..
相关文章

· [图文] 通过消息实现..
· 通过端口获取IDE硬盘..
· More Effective C++..
· [图文] AJAX应用于BL..
· 木马病毒变种更猖狂..
· 通过.NET Framework..
· 通过.NET Framework..
· Windows 2000和Wind..
· 通过注册表配置Wind..
· [图文] 通过 Windows..
查看更多与通过修改VCL源码实现自定义输入对话框相关内容

通过修改VCL源码实现自定义输入对话框
作者:幽火  来源:www.5ihack.com  发布时间:2007-1-8 17:29:44  发布人:ghostfire

减小字体 增大字体

  通过修改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
    begin
     Parent := Form;
     Caption := '取消'; // 取消按钮,原先标题为"Cancel"
     ModalResult := mrCancel;
     Cancel := True;
     SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
      ButtonWidth, ButtonHeight);
     Form.ClientHeight := Top + Height + 13;     
    end;
    if ShowModal = mrOk then
    begin
     Value := Edit.Text;
     Result := True;
    end;
   finally
    Form.Free;
   end;
end;
   修改完成以后保存这个文件。
3. 在当前工程中加入刚才修改过的dialogs.pas,具体操作:Project-->Add to Project-->找到该文件,添加进来即可。
4. 设置一下工程选项:Project-->Options-->Packages-->取消Build with runtime packages前面的对钩,确定。
5. 在程序中加入使用InputBox或InputQuery函数的代码。以下为例子:
//---------------------------------------------------------------------------
// by ccrun(老妖)(www.ccrun.com)
// 普通的输入对话框效果
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   String strTemp = "";
   InputQuery("标题", "提示", strTemp);
   ShowMessage(strTemp);
}
//---------------------------------------------------------------------------
// 星号密码的输入对话框效果,与上面代码不同的是,将Default字符串设为Password
// 就可以实现星号密码了。这样做是为了防止所有的输入对话框全变成星号。
// 这里的"Password"要与刚才修改dialogs.pas中的字符相对应。
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   String strTemp = "Password";
   InputQuery("标题", "提示", strTemp);
   ShowMessage(strTemp);
}

查看更多与通过修改VCL源码实现自定义输入对话框相关内容

[ ] [返回上一页] [打 印] [收 藏]
上一篇文章:
下一篇文章:
      雕虫小计—颜色渐变的进度条       在BCB中实现TRichEdit的自动格式化
∷相关文章评论∷   (评论内容只代表网友观点,与本站立场无关!) [发表评论]
 
 
 
 
晋ICP备05008232   维护网络安全、传播安全技术才是我们的目标! 
 
关于本站 - 网站帮助 - - 下载声明 - 友情连接 -网站地图