1. 설명
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음
2. 소스
--단순 String 전달--
1. lParam에 사용할 데이터 레코드 타입
2. lParam으로 전달된 데이터 읽기
3. 데이터 보내기
--레코드 전달--
1. 전달할 레코드 타입
2. 데이터 보내기
3. 데이터 받기
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음
2. 소스
--단순 String 전달--
1. lParam에 사용할 데이터 레코드 타입
pCopyDataStruct = ^TCopyDataStruct;
TCopyDataStruct = record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;
TCopyDataStruct = record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;
2. lParam으로 전달된 데이터 읽기
strReceive := pChar(pCopyDataStruct(lParam)^.lpData);
3. 데이터 보내기
procedure TCommWndThread.SendData(AData: string);
var
CopyData: TCopyDataStruct;
nLen: integer;
begin
nLen := Length(AData) + 1;
AData := AData + #0;
with CopyData do
begin
cbData := nLen;
lpData := pChar(AData);
end;
SendMessage(FWnd, WM_COPYDATA, 0, LongInt(@CopyData));
end;
var
CopyData: TCopyDataStruct;
nLen: integer;
begin
nLen := Length(AData) + 1;
AData := AData + #0;
with CopyData do
begin
cbData := nLen;
lpData := pChar(AData);
end;
SendMessage(FWnd, WM_COPYDATA, 0, LongInt(@CopyData));
end;
--레코드 전달--
1. 전달할 레코드 타입
pMemoDataStruct = ^TMemoDataStruct;
TMemoDataStruct = packed record
FSenderID: String[50];
FIP: String[20];
FPort: String[10];
MemoContent : array[1..1024] of char;
end;
TMemoDataStruct = packed record
FSenderID: String[50];
FIP: String[20];
FPort: String[10];
MemoContent : array[1..1024] of char;
end;
2. 데이터 보내기
var
CopyData: TCopyDataStruct;
nLen: integer;
memoinfo : TMemoDataStruct;
begin
FillChar(memoinfo, sizeof(TMemoDataStruct), #0);
memoinfo.FSenderID := FSenderID;
memoinfo.FIP := FIP;
memoinfo.FPort := FPort;
Move(FMemo^,memoinfo.MemoContent,FMemoSize);
nLen := SizeOf(memoinfo);
with CopyData do
begin
cbData := nLen;
lpData := @memoinfo;
end;
SendMessage(wnd, WM_COPYDATA, LongInt(msgType), @CopyData);
end;
CopyData: TCopyDataStruct;
nLen: integer;
memoinfo : TMemoDataStruct;
begin
FillChar(memoinfo, sizeof(TMemoDataStruct), #0);
memoinfo.FSenderID := FSenderID;
memoinfo.FIP := FIP;
memoinfo.FPort := FPort;
Move(FMemo^,memoinfo.MemoContent,FMemoSize);
nLen := SizeOf(memoinfo);
with CopyData do
begin
cbData := nLen;
lpData := @memoinfo;
end;
SendMessage(wnd, WM_COPYDATA, LongInt(msgType), @CopyData);
end;
3. 데이터 받기
var
memoinfo : TMemoDataStruct;
begin
memoinfo := pMemoDataStruct( PCopyDataStruct(msg.LParam)^.lpData)^;
end;
memoinfo : TMemoDataStruct;
begin
memoinfo := pMemoDataStruct( PCopyDataStruct(msg.LParam)^.lpData)^;
end;
'Computer > Delphi' 카테고리의 다른 글
TColor 값을 HTML color 로 변경하는 코드 (2) | 2003.05.14 |
---|---|
HTML에 문자 추가하기 (154) | 2003.05.09 |
그래픽 카드가 RGB or BGR 지원 하는지 체크하기 (153) | 2003.04.28 |
C의 Union과 비슷하게 Record로 가변 타입 만들기 (158) | 2003.04.24 |
메모리 복사하기 (2) | 2003.04.23 |
델파이에서 사용자 정의 메시지 및 프로시져 추가 (2) | 2003.04.15 |
프로그램 중복 실행 방지(한번만 실행되게.) (2) | 2003.04.15 |
델파이로 프로세스 종료하기 (2) | 2003.04.14 |
델파이에서 일반 폼 출력후에 메인폼 출력하기 (2) | 2003.04.14 |
Activex 사용자 Event 추가 (14) | 2003.04.08 |