在一个函数内,如何调用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();
}
//.......
}