各位好! 我用PostMessage函數發送字符串, 但不能完整接收所發送的內容. 而用SendMessage函數確可以準確接收. 請問這是為什麼呢?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;const
WM_PostMsg = WM_User + 300;
WM_SendMsg = WM_User + 301;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure WMPostMsg(var Msg: TMessage); message WM_PostMsg;
procedure WMSendMsg(var Msg: TMessage); message WM_SendMsg;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := Edit1.Text;
PostMessage(Form1.Handle, WM_PostMsg, 0, Integer(s));
end;procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
s := Edit1.Text;
SendMessage(Form1.Handle, WM_PostMsg, 0, Integer(PChar(s)));
end;//PostMessage方法發送的不能完整接收?
procedure TForm1.WMPostMsg(var Msg: TMessage);
var
p: PChar;
begin
p := PChar(Msg.LParam);
Memo1.Lines.Add('Post: ' + p);
end;//SendMessage方法發送的可以正常接收
procedure TForm1.WMSendMsg(var Msg: TMessage);
var
p: pchar;
begin
p := PChar(Msg.LParam);
Memo1.Lines.Add('Send: ' + p);
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;const
WM_PostMsg = WM_User + 300;
WM_SendMsg = WM_User + 301;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure WMPostMsg(var Msg: TMessage); message WM_PostMsg;
procedure WMSendMsg(var Msg: TMessage); message WM_SendMsg;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := Edit1.Text;
PostMessage(Form1.Handle, WM_PostMsg, 0, Integer(s));
end;procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
s := Edit1.Text;
SendMessage(Form1.Handle, WM_PostMsg, 0, Integer(PChar(s)));
end;//PostMessage方法發送的不能完整接收?
procedure TForm1.WMPostMsg(var Msg: TMessage);
var
p: PChar;
begin
p := PChar(Msg.LParam);
Memo1.Lines.Add('Post: ' + p);
end;//SendMessage方法發送的可以正常接收
procedure TForm1.WMSendMsg(var Msg: TMessage);
var
p: pchar;
begin
p := PChar(Msg.LParam);
Memo1.Lines.Add('Send: ' + p);
end;end.
解决方案 »
- delphi webbrowser1 中 单选 如何选定单选框的值 有 0 和 1
- 碰到这种情况,SQL应该怎样写?
- 请教各位,新增,修改,删除,查询,审核和反核在delphi 6中用sql server语句完全控制的写法.
- How to install Delphi 5.0 or Delphi 5.5 at windows2000?
- 请问一下,大家一般在程序中用那种写日志的方法啊.
- 菜鸟问题!!不好意思,来接分吧!!
- 用comport控件,如何自定义波特率. brcustom
- 大清早一来就发现收藏夹被clear了....
- 在线等45分钟,Sybase sql语句,大家看看是否可行!(我不想用存储过程)
- 这种想法怎么实现??????????
- 请问一下,为什么delphi Sin(35) 的结果与windows 内的计算器结果不一样??
- 如何实现像下拉菜单一样的窗体
var
s: string;
begin
s := Edit1.Text + #0;
PostMessage(Form1.Handle, WM_PostMsg, 0, Integer(s));
end;
var
s: string; <<<--- 不要使用局部变量。因为Post不是立即响应,等到接受的时候,局部变量的内存已经被释放。指针所指的地址无效了。
begin
s := Edit1.Text;
SendMessage(Form1.Handle, WM_PostMsg, 0, Integer(PChar(s)));
end;