server:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, RzPanel, jpeg, RzShellDialogs;
const
WM_CopyDateDestory = wm_user + 100; //self define message
type
TPerson = packed record
Name :string[10];
Age :Integer;
end;
type
Tserver = class(TForm)
RzPanel1: TRzPanel;
RzPanel2: TRzPanel;
RzPanel3: TRzPanel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
Image_D: TImage;
RzPanel4: TRzPanel;
RzPanel5: TRzPanel;
Image_s: TImage;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure _WM_COPYDATA(var _Msg :TMessage);message WM_COPYDATA;
end;
var
server: Tserver;
_PictureMemoryStream :TMemoryStream;
implementation
{$R *.dfm}
procedure Tserver._WM_COPYDATA(var _Msg :TMessage);
var
_CopyData :TCopyDataStruct;
_Person :TPerson;
_MemStream :TMemoryStream;
_MemSize :Cardinal;
_Buf :array of Char;
begin
if _Msg.Msg = WM_COPYDATA then
begin
if _Msg.WParam = $02 then
begin
_CopyData := PCopyDataStruct(_Msg.LParam)^;
_Person := TPerson(_CopyData.lpData^);
Edit3.Text := _Person.Name + IntToStr(_Person.Age);
end
else if _Msg.WParam = $03 then
begin
_MemStream := TMemoryStream.Create;
_CopyData := PCopyDataStruct(_Msg.LParam)^;
_MemSize := _CopyData.cbData;
//mothod 1 ---------------------------------------------------------------
SetLength(_Buf, _MemSize);
Move(_CopyData.lpData^, _Buf[0], _MemSize);
_MemStream.WriteBuffer(_Buf[0], _MemSize);
//------------------------------------------------------------------------
//mothod 1 ---------------------------------------------------------------
//_MemStream.WriteBuffer(_CopyData.lpData^, _MemSize);
//------------------------------------------------------------------------
_MemStream.SaveToFile('d:/1.jpg');
_MemStream.Free;
Image_D.Picture.LoadFromFile('d:/1.jpg');
end
else if _Msg.Msg = WM_CopyDateDestory then
begin
if _PictureMemoryStream <> nil then
begin
_PictureMemoryStream.Free;
_PictureMemoryStream := nil;
end;
end;
end;
end;
procedure Tserver.Button1Click(Sender: TObject);
var
_CopyData :TCopyDataStruct;
_Person :TPerson;
begin
_Person.Name := Edit1.Text;
_Person.Age := StrToInt(Edit2.Text);
_CopyData.dwData := 0;
_CopyData.cbData := SizeOf(_Person);
_CopyData.lpData := @_Person;
SendMessage(Handle, WM_COPYDATA, $02, LongWord(@_CopyData));
end;
procedure Tserver.Button2Click(Sender: TObject);
var
_PictureCopyDat :TCopyDataStruct;
_FileSize :Int64;
_hwnd :HWND;
begin
if _PictureMemoryStream = nil then
_PictureMemoryStream := TMemoryStream.Create;
Image_s.Picture.Graphic.SaveToStream(_PictureMemoryStream);
_PictureCopyDat.dwData := 0;
_FileSize := _PictureMemoryStream.Size;
_PictureCopyDat.cbData := _FileSize;
_PictureCopyDat.lpData := _PictureMemoryStream.Memory;
_hwnd := FindWindow(nil,'client');
if _hwnd <> 0 then
SendMessage(_hwnd, WM_COPYDATA, $03, Cardinal(@_PictureCopyDat));//send other program
SendMessage(Handle, WM_COPYDATA, $03, Cardinal(@_PictureCopyDat)); //send this program
end;
procedure Tserver.FormCreate(Sender: TObject);
begin
_PictureMemoryStream := TMemoryStream.Create;
end;
procedure Tserver.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if _PictureMemoryStream <> nil then
begin
_PictureMemoryStream.Free;
_PictureMemoryStream := nil;
end;
end;
end.
client:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;
const
WM_CopyDateDestory = wm_user + 100;
type
TWidthAndHeight = packed record
Width :Integer;
Height :Integer;
end;
type
TForm1 = class(TForm)
Image_D: TImage;
private
{ Private declarations }
public
{ Public declarations }
procedure _WM_COPYDATA(var _Msg :TMessage);message WM_COPYDATA;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1._WM_COPYDATA(var _Msg :TMessage);
var
_MemStream :TMemoryStream;
_MemSize :Cardinal;
_CopyData :TCopyDataStruct;
_hwnd_Server :HWND;
_FileName :string;
begin
if _Msg.Msg = WM_COPYDATA then
begin
_FileName := 'd:/client.jpg';
_MemStream := TMemoryStream.Create;
_CopyData := PCopyDataStruct(_Msg.LParam)^;
_MemSize := _CopyData.cbData;
_MemStream.WriteBuffer(_CopyData.lpData^, _MemSize);
_MemStream.SaveToFile(_FileName);
_MemStream.Free;
if FileExists(_FileName) then
Image_D.Picture.LoadFromFile(_FileName);
_hwnd_Server := FindWindow(nil, 'server');
if _hwnd_Server <> 0 then
SendMessage(_hwnd_Server, WM_CopyDateDestory, 0, 0);
end;
end;
end.