Und hier noch mal ein komplettes Beispiel. Gesendet wird zwar an das eigene Fenster, aber du kannst ja das
Handle des gewünschten Fensters angeben.
Delphi-Quellcode:
type
TMyRecord =
packed record
b: Boolean;
s:
string[255];
end;
PMyRecord = ^TMyRecord;
type
TForm1 =
class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMCOPYDATA(
var msg: TWMCOPYDATA);
message WM_COPYDATA;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMCOPYDATA(
var msg: TWMCOPYDATA);
var
MyRecord: PMyRecord;
begin
MyRecord := msg.CopyDataStruct.lpData;
CheckBox1.Checked := MyRecord.b;
Edit1.Text := MyRecord.s;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyRecord: PMyRecord;
cds: TCopyDataStruct;
begin
GetMem(MyRecord, sizeof(TMyRecord));
try
MyRecord.b := True;
MyRecord.s := '
Hello world';
cds.dwData := 0;
cds.cbData := sizeof(TMyRecord);
cds.lpData := MyRecord;
SendMessage(
Handle, WM_COPYDATA,
Handle, Integer(@cds));
finally
FreeMem(MyRecord, sizeof(TMyRecord));
end;
end;
Im Anhang noch mal komplett mit zwei Fenstern.