我试过WM_COPYDATA,但是只能传递字符串,结构体都没有成功过如果这个不行,还有什么好的方法么?我要的是传递结构,不要告诉我用Socket啊,就是不想用Socket
解决方案 »
- Delphi公司律师函,咨询报价
- 见鬼了!!!----------窗体大小不受控了???
- 有什么好办法让客户了解我们开发出的软件?
- delphi里oraquery里field属性里的lookup选项啥意思
- 有没有将QuickReport报表导出到Excel的控件?
- quick report问题,请各位大侠帮帮忙。
- 帮我分析错误,关于做测试版时间限制,谢谢,问题runned出错,代码如下: 急,马上给分
- 请问谁做过[施耐德]AndOver continuum系统的开发或使用?
- 如何使Edit控件获得焦点?
- 怎样使DBGrid处于编辑状态?
- dbGrid在滚动条滚动时有没有事件发生???
- 怎么屏蔽FrontPage中的右键菜单?
WM_COPYDATA可以传递指针
有没有源代码?大家要看清楚我的帖子啊...不要贴一些简单的例子过来,我都看过了
不管是File Mapping还是WM_COPYDATA,都是针对字符串的例子~~~~
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMCOPYDATA(var Msg: TWMCOPYDATA); message WM_COPYDATA;
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
var
vHandle: THandle;
vCopyDataStruct: TCopyDataStruct;
vRect: TRect;
begin
vHandle := FindWindow('TForm1', nil);
vCopyDataStruct.dwData := SizeOf(vCopyDataStruct);
vCopyDataStruct.cbData := SizeOf(vRect);
vRect := BoundsRect;
vCopyDataStruct.lpData := @vRect;
SendMessage(vHandle, WM_COPYDATA, 0, Integer(@vCopyDataStruct));
end;procedure TForm2.WMCOPYDATA(var Msg: TWMCOPYDATA);
var
vRect: TRect;
begin
//BoundsRect := PRect(Msg.CopyDataStruct^.lpData)^;
//or
Move(Msg.CopyDataStruct^.lpData^, vRect, SizeOf(vRect));
BoundsRect := vRect;
end;end.//....
procedure TForm1.Button1Click(Sender: TObject);
var
vHandle: THandle;
vCopyDataStruct: TCopyDataStruct;
vRect: TRect;
begin
vHandle := FindWindow('TForm2', nil);
if vHandle = 0 then Exit;
vCopyDataStruct.dwData := SizeOf(vCopyDataStruct);
vCopyDataStruct.cbData := SizeOf(vRect);
vRect := BoundsRect;
vCopyDataStruct.lpData := @vRect;
SendMessage(vHandle, WM_COPYDATA, 0, Integer(@vCopyDataStruct));
end;procedure TForm1.WMCOPYDATA(var Msg: TWMCOPYDATA);
var
vRect: TRect;
begin
// BoundsRect := PRect(Msg.CopyDataStruct^.lpData)^;
// or
Move(Msg.CopyDataStruct^.lpData^, vRect, SizeOf(vRect));
BoundsRect := vRect;
end;
//....
如果我把Rect换成一个结构
Type tempstru=record
str:string;
i:integer;
str2:string;
end;
要怎么做呢?
不知道你的Rect例子测试过没有。我刚才测试了一下tempstru这个结构,不行
string是一个指针,存储空间是不定的~~你传给其他程序string有什么用?它只是四个字节~~
如下结构都行~~type tempstru=record
str: ShortString;
i: integer;
str2: ShortString;
end;type tempstru=record
str: string[20];
i: integer;
str2: string[20];
end;type tempstru=record
str: array[0..19] of Char;
i: integer;
str2: array[0..19] of Char;
end;
因为我用你传Rect结构的方法,来测试包含String类型的结构时,失败了你能帮我弄一个简单的例子吗?我就是要传递包含String的结构给另一个程序啊或者说,一个包含任何多个数据类型的结构,如何传递呢?
我总是取不到值