delphi의 메시지 메커니즘 메시지 전달 문자열 구현
1. 직접 전달하지만 같은 프로세스의 창에만 전달할 수 있고 크로스 프로세스의 메시지 전달을 실현할 수 없다
메시지 전송:
var
Str: String;
begin
Str := 'some string';
PostMessage(Handle, 0, 0, Integer(Str));
end;
메시지를 수신하려면 다음과 같이 하십시오.
var
Str: String;
begin
Str := String(Msg.LParam);
ShowMessage(Str);
end;
2. 만약에 스레드 간 전달이 PostThreadMessage로 전달될 수 있다면 PostThreadMessage는 이 함수로 지정된 스레드의 메시지 대기열에 메시지를 넣고 스레드 처리 메시지를 기다리지 않고 되돌아온다.메시지 전송:
Procedure TThread1.Execute;
var
sMes:String;
pMes:^String;
iTemp:Integer;
begin
sMes:=’Test’;
New(pMes);
pMes^:=sMes;
PostThreadMessage(thread2.ThreadID,WM_StartRecording,Integer(pMes),0);
iTemp:=111;
PostThreadMessage(thread2.ThreadID,WM_OriginalData,iTemp,0);
end;
메시지를 수신하려면 다음과 같이 하십시오.
procedure TThread2.Execute;
var
msg:TMsg;
sMes:String;
pMes:^String;
iTemp:Integer;
begin
//
while GetMessage(msg,0,0,0) do
begin
Case msg.message of
WM_StartRecording:
begin
// String;
pMes:=msg.wParam;
sMes:=pMes^;
Dispose(pMes);
WM_OriginalData:
begin
//
iTemp:=msg.WParam;
end;
else begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end;
end;
이 방법을 사용하면 다음과 같이 stringlist를 전달할 수 있습니다.
:
a:TStrings;
a := TStringList.Create;
SendMessage(Formb.Handle, WM_YOURMESSAGE, 0, LongInt(a));
:
b:TStrings;
b := TStringList.Create;
b.Assign(TStrings(Msg.WParam));
TStrings(Msg.WParam).Free;
같은 프로세스 전달 문자열이 PostMessage 전달을 사용할 수 있다면, 이 함수는 지정한 창에 생성된 루트와 연결된 메시지 대기열에 메시지를 넣고, 루트 처리 메시지를 기다리지 않고 되돌아오는 비동기 메시지 모드입니다.메시지 대기열의 메시지는 GetMessage와 PeekMessage를 호출해서 얻을 수 있습니다.
메시지를 보내려면 다음과 같이 하십시오.
var
pTel: ^string;
begin
sTelTmp := '10086';
New(pTel);
pTel^ :=sTelTmp;
SendMessage(Handle, WM_RCV_AUTO_REPORT, EV_TEL_MT_CALLOUT, Integer(pTel));
end;
:
procedure OnReciveDataMsg(var Msg: TMessage); message WM_RCV_AUTO_REPORT;
var
pTel: ^string;
begin
pTel := Pointer(Msg.LParam);
sTelPhone := G_GetRealTelPhone(pTel^);
Dispose(pTel);
end;
3、 WM_COPYDATA , wm_copydata , 。
:
procedure SendString(strMSG: string);
var
Data: tagCOPYDATASTRUCT;
pBuf: PChar;
begin
GetMem(pBuf, Length(strMSG) + 1);
try
ZeroMemory(pBuf, Length(strMSG) + 1);
StrPCopy(pBuf, strMSG);
Data.cbData:= Length(strMSG);
Data.dwData:= Length(strMSG);
Data.lpData:= pBuf;
SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data));
finally
FreeMem(pBuf);
end;
end;
메시지를 수신하려면 다음과 같이 하십시오.procedure WMCopyData(var MSG: TMessage); message WM_COPYDATA;
procedure WMCopyData(var MSG: TMessage);
var
Data : ^tagCOPYDATASTRUCT;
strMSG: string;
begin
Data:= Pointer(Msg.lParam);
strMSG:= StrPas(Data.lpData);
ShowMessage(strMSG);
end;
실제 상황에 따라 상응하는 방식으로 메시지 전달 문자열을 실현할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.