`
buliedian
  • 浏览: 1237627 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ZT:通过消息实现自定义输入框(InputBox)

阅读更多

C++Builder提供了两个显示输入对话框的函数:InputBoxInputQuery(其中InputBox也是通过调用InputQuery实现),这个输入对话框有很多缺点,在以前的文章中我曾提到过利用修改VCL源码来实现自定义输入对话框,后来在Torry.net看到一篇文章是利用自定义消息的方法来实现,原文是Delphi代码,ccrun(老妖)用C++改写,并适当修改让显示效果更好一些:

基本思路:在输入对话框显示出来以前,Post一条消息给主窗体,由主窗体负责修改输入对话框窗体的属性和输入文字编辑框的属性,在主窗体中通过重载WndProc函数来响应自定义消息。

代码及效果图如下:
.h文件中:
public:
void __fastcallWndProc(TMessage&Msg);

.cpp文件中:
//自定义一个消息,通知主窗体进行输入框的设置
#defineMY_INPUT_BOXWM_USER+101
//---------------------------------------------------------------------------
//重载主窗体的WndProc实现自定义消息的处理
void__fastcallTfrmMain::WndProc(TMessage&Msg)
{
if(Msg.Msg==MY_INPUT_BOX)
{
//Msg.WParam
// 0:普通模式,1:密码框模式
//Msg.LParam
// 0:普通模式,1:带图片的模式


TForm*frm=Screen->Forms[0];
if(frm!=this)//输入框窗体
{
//将输入对话框的字体设为和主窗体一样,建议将主窗体字体设为宋体9号
frm->Font->Assign(Font);

//改变OK和Cancel按钮的标题
HANDLEhBtnOK=FindWindowEx(frm->Handle,NULL,"TButton","OK");
HANDLEhBtnCancel=FindWindowEx(frm->Handle,NULL,"TButton","Cancel");
if(hBtnOK)
SetWindowText(hBtnOK,"确定(&O)");
if(hBtnCancel)
SetWindowText(hBtnCancel,"取消(&C)");

//是否需要显示一个图片
if(Msg.LParam==1)
{
//新增一个图片在窗体左下角,指定其Owner为输入框窗体,
//这样当输入框窗体关闭时自动释放TImage的资源

TImage*img=newTImage(frm);
img->Picture->Assign(Application->Icon);
img->Left=11;
img->Top=60;
img->Parent=frm;
img->Show();
}

//是否为密码框式 // 63 63 72 75 6E 2E 63 6F 6D
if(Msg.WParam==1)
{
HANDLEhEdit=FindWindowEx(frm->Handle,NULL,"TEdit",NULL);
if(hEdit)
SendMessage(hEdit,EM_SETPASSWORDCHAR,WPARAM('*'),0);
}
}
}
TForm::WndProc(Msg);
}
//---------------------------------------------------------------------------
// 抱歉,这个提示又来了,为了防止不负责任的转载者,只好在此留些信息。
// by ccrun(老妖) info@ccrun.com
// 欢迎访问 C++Builder研究 - http://www.ccrun.com
//---------------------------------------------------------------------------

原先的InputBox(图1)
void__fastcallTfrmMain::btnOldStyleClick(TObject*Sender)
{
StringstrText=InputBox("原先的输入对话框","请输入一些字符:","");
if(strText.Trim().Length()>0)
ShowMessage(strText);
}

(图1) 可以看到窗体上字符显示不全,并且两个按钮的标题也是英文的。

//---------------------------------------------------------------------------
改良后的效果(图2)
void __fastcallTfrmMain::btnNewStyleClick(TObject*Sender)
{
PostMessage(Handle,MY_INPUT_BOX,0,0);//重点是这一句
StringstrText=InputBox("新的输入对话框","请输入一些字符:","");
if(strText.Trim().Length()>0)
ShowMessage(strText);
}

(图2) 经过改良后,字符显示就比较漂亮了,按钮标题也是中文的。

//---------------------------------------------------------------------------
带图片的效果 (图3)
void __fastcallTfrmMain::btnWithImageClick(TObject*Sender)
{
//Msg.LParam=1:带图片的模式
PostMessage(Handle,MY_INPUT_BOX,0,1);
StringstrText=InputBox("带图片效果的输入框", "请输入一些字符:","呵呵,带图片的");
if(strText.Trim().Length()>0)
ShowMessage(strText);
}

(图3)带图片效果的输入框

//---------------------------------------------------------------------------
密码输入框效果(图4)
void __fastcallTfrmMain::btnPwdStyleClick(TObject*Sender)
{
//Msg.WParam=1:密码框模式
PostMessage(Handle,MY_INPUT_BOX,1,0);
StringstrText=InputBox("密码输入框","请输入您的密码:","123");
if(strText.Trim().Length()>0)
ShowMessage(strText);
}

(图4) 密码输入框的效果

分享到:
评论

相关推荐

    pyqt各种输入框inputbox

    pyqt各种输入框inputbox:包括密码输入、数字数入,combobox输入,多行输入

    C/C++调用vbs实现InputBox

    总之,通过C/C++调用VBScript实现`InputBox`功能,是一种灵活且实用的方法,特别是在没有使用MFC或其他图形库的情况下。这不仅能够快速地为程序添加用户交互功能,而且还能让初学者更好地理解和掌握Windows API以及...

    C# 自定义输入对话框。需要的请带走。技术不复杂,对您有参考意义就是我最大的贡献。

    本资源提供了一个C#自定义输入对话框的示例,帮助开发者更好地理解和实现这样的功能。 自定义输入对话框通常包括以下组件: 1. **窗口设计**:首先,我们需要创建一个新的Windows窗体(`System.Windows.Forms.Form`...

    C#中的输入框

    //C#在PC环境下使用的输入框InputBox // //用法:在资源管理器中添加引用Input.cs //InputBox.ShowInputBox( 标题字符串 , 说明字符串 , 输入框的默认值字符串 ) //有疑问联系:孙浩 QQ:43212170 Email:43212170@...

    VB6.0使用InPutBox显示密码输入框.rar

    VB6.0使用InPutBox显示密码输入框,InPutBox大部分情况下是用于输入数据,... lTemp = SetTimer(Me.hwnd, NV_INPUTBOX, 1, AddressOf TimerProc)  sTemp = InputBox("请输入密码", "密码输入框")  Err_Out: End Sub

    易语言源码易语言自定义信息框&输入框按钮标题源码.rar

    然而,如果要自定义输入框的标题或按钮文字,同样需要使用API函数,如`InputBox`。在API调用中,可以指定对话框的标题、默认输入文本以及确认和取消按钮的标题。 3. **源码分析**: 压缩包中的源码文件“易语言...

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

    针对这种情况,开发者可以选择通过修改VCL(Visual Component Library)源码来创建自定义的输入对话框,以实现更丰富、更个性化的功能。 VCL是Borland C++ Builder中的组件库,它提供了丰富的用户界面组件,如按钮...

    《计算机程序设计基础》教学课件:8_5自定义过程(1).ppt

    总结起来,自定义过程的编写和调用是VB编程中的基本技能,通过自定义函数和子过程,程序员可以构建复用性强、逻辑清晰的代码,以解决各种计算和控制流问题。学习这部分内容有助于理解程序设计的基本原理,提高编程...

    QML_InputBox.rar

    在QML代码中,你可以通过创建InputBox对象来添加一个输入框。基本的InputBox声明如下: ```qml InputBox { id: inputBox placeholderText: "请输入..." text: "默认文本" } ``` `id`用于标识该组件,`...

    用InputBox函数创建一个可输入数据的对话框.xlsm

    用InputBox函数创建一个可输入数据的对话框

    c#自定义文本框

    在C#编程中,自定义文本框(Custom TextBox)是一个常见的需求,特别是在开发具有...`InputBox.cs`文件应该包含了实现这些功能的具体代码,通过阅读和学习该文件,开发者可以更好地理解和掌握自定义控件的设计与实现。

    C#中的InputBox

    这并不意味着在C#中无法实现类似的功能,相反,通过自定义编写一个类,我们可以轻松地创建出与VB.NET中`InputBox`功能相当的组件。 #### 自定义InputBox类详解 为了在C#中实现类似`InputBox`的功能,我们需要创建...

    js实现输入框输入的自动匹配功能

    在JavaScript编程中,输入框自动匹配功能是一种常见的用户体验...给定的文件`InputAutoFix.js`、`autoFix.css`和`test.html`正是这样的一个实现,通过组合这些文件,我们可以创建一个功能完备的输入框自动匹配组件。

    InputBox_Inputbox_delphi_

    注意,虽然`InputBox`函数提供了基本的文本输入功能,但它不支持更复杂的输入验证或自定义界面元素。如果你需要更高级的用户交互,比如日期选择、多行文本输入等,可能需要使用其他控件,如`TDateTimePicker`或`...

    自定义控件vb自定义控件textbox等等

    自定义输入框控件可能意味着创建一个具有更多功能的对话框,比如支持多行文本输入、包含验证功能,或者提供更复杂的UI设计。 在VB项目中,`Form1.frm`和`Form1.frx`文件代表了主窗体(Form1)的定义和资源,`...

    按键精灵输入框文档内容提取代码

    【按键精灵输入框文档内容提取代码】是一种自动化工具的编程...这个例子展示了如何查找并读取一个名为"InputBoxName"的输入框中的内容,然后通过消息框显示出来。实际应用中,你可以根据具体需求修改和扩展这部分代码。

    c# 版InputBox

    以下是一个简化的代码示例,展示了如何创建这样一个自定义InputBox: ```csharp public partial class CustomInputBox : Form { public string Result { get; private set; } public CustomInputBox() { ...

    ios-列表底部输入框_RPBottomInputBox.zip

    4. **布局调整**:根据应用需求,可能需要自定义输入框的位置和大小,以及键盘出现时视图的滚动行为。 5. **集成到列表视图**:确保输入框与列表视图之间的交互正确,比如在用户输入时刷新列表数据。 6. **测试和...

    易语言自适应尺寸的输入框源码

    3. 使用布局管理器:虽然易语言本身不内置像其他高级语言那样的布局管理器,但可以通过自定义代码实现类似的功能。例如,定义一个函数,计算输入框相对于窗口或其他参照控件的比例,从而实现自适应布局。 四、源码...

Global site tag (gtag.js) - Google Analytics