首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

在一个函数内,怎么调用TEdit的输入,输入完毕后,再继续执行到结束

2012-03-04 
在一个函数内,如何调用TEdit的输入,输入完毕后,再继续执行到结束如a(){......需要先到TEdit输入框中:输入

在一个函数内,如何调用TEdit的输入,输入完毕后,再继续执行到结束

a()
{
......

需要先到TEdit输入框中:输入一个值后,然后按回车,再返回

.......

}
我听一些网友说,用
MsgResult   =   TargetControl-> Perform(MY_MYMESSAGE,   0,   0);

MsgResult   =   SendMessage(TargetControl-> Handle,   MYMESSAGE,   0,   0)
能实现,但我不知以上两个函数的参数是什么意思及如何调用。
请高手指点


[解决办法]
MsgResult = SendMessage(TargetControl-> Handle, MYMESSAGE, 0, 0)的意思是那目标控件发出一个自定义的消息MyMessage,事实上你还要为这个消息写一个消息处理函数.专门来处理收到这个消息后应该做什么。SendMessage可以直接调用。而处理函数要自己写:
.h文件中加
#define WM_MYMESSAGE WM_APP+1//自定义消息
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,CMMessage)
//决定WM_MYMESSAGE消息交给CMMessage 函数处理
END_MESSAGE_MAP(TForm)
.cpp中加
void __fastcall TForm1::CMMessage(TMessage &msg)
{
if(msg.WParam == 0){
ShowMessage( "消息收到了!! ");
}
}
这样就可以了。
[解决办法]
上面的代码
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,CMMessage)
END_MESSAGE_MAP(TForm)

MsgResult = SendMessage(TargetControl-> Handle, MYMESSAGE, 0, 0)

CMMessage函数一辈子也处理不到MYMESSAGE消息的。
SendMesaage是把消息发到到控件句柄 而你写的MessageMap是过滤的Form的消息。

wood542344() 你测试怎么通过的?
[解决办法]
.cpp
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------

void __fastcall TForm1::CMMessage(TMessage &msg)
{
if(msg.WParam == 1)
{
ShowMessage( "收到消息 ");
}
}
//---------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == 13)
{
SendMessage(Handle,WM_MYMESSAGE,1,0);
}
}
.h

#ifndef Unit1H
#define Unit1H
//---------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#define WM_MYMESSAGE WM_APP+1//自定义消息
//---------------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
TEdit *Edit1;
void __fastcall Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
private:// User declarations
public:// User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall CMMessage(TMessage &msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,CMMessage)
//决定WM_MYMESSAGE消息交给CMMessage 函数处理
END_MESSAGE_MAP(TForm)
};
//---------------------------------------
extern PACKAGE TForm1 *Form1;

[解决办法]
bool bEnter;

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key){


if(Key==13){
Key=0;
bEnter=true;
}
}
a(){
//......

//需要先到TEdit输入框中:输入一个值后,然后按回车,再返回
bEnter=false;
while(!bEnter){
Application-> ProcessMessages();
}
//.......
}

热点排行