メッセージが消える?

解決


まろ  2004-12-30 04:47:00  No: 12528

Delphi7を使っています。
スレッドからメッセージをメインフォームに送信しているのですが、メインフォーム側で受け取ってくれません。
ブレークしながら確認すると、ちゃんと以下に記述している
SendMessageの所には来るのですが、WMCopyDataには来ないんです。

何が足りないのでしょうか?

'TMainForm'  :メインフォームのクラス名
MSG_MAIN_MEMO:識別ID
Command  :送信文字列

送信するとき
SendMsg('TMainForm', MSG_MAIN_MEMO, Command);

SendMsgの詳細
procedure TThread.SendMsg(ClassName: string; StrKind: Cardinal; Msg: string);
var
  Cd: TCopyDataStruct;
  Wnd:HWND;
begin
  Wnd := FindWindow(PChar(ClassName), nil);
  if (Wnd <> 0) then begin
    Cd.dwData := StrKind;
    Cd.cbData := Length(Msg) + 1; // +1はnull
    Cd.lpData := StrAlloc(Cd.cbData);
    try
      StrCopy(Cd.lpData, PChar(Msg));
      SendMessage(Wnd, WM_COPYDATA, WPARAM(Wnd), LPARAM(@Cd));
    finally
      StrDispose(Cd.lpData);
    end;
  end;
end;

と、こんな具合で、メインフォームの受け取り側は、プライベートで
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
を宣言し、

詳細は、
procedure TMainForm.WMCopyData(var Msg: TWMCopyData);
var
  Buf: PChar;
begin
  if (Msg.CopyDataStruct.dwData = MSG_MAIN_MEMO) then begin
    Buf := StrALloc(Msg.CopyDataStruct.cbData);
    try
      StrCopy(Buf, Msg.CopyDataStruct.lpData);
      MemoMsg(Buf);
    finally
      StrDispose(Buf);
    end;
  end
  else begin
    inherited;
  end;
end;


まろ  2004-12-30 04:48:56  No: 12529

すみません、OSはwin2000sp4です。
MemoMsg(Buf);
これは、メモにBufを表示しているだけです。


風来坊  2004-12-30 15:08:41  No: 12530

送り側は、
Cd.lpData := StrAlloc(Cd.cbData);
ではなく
Cd.lpData := PChar(Msg);

受け取り側は、
Buf := String(PChar(Msg.CopyDataStruct.lpData));
BufはString
で、いけるかと?


まろ  2005-01-19 05:53:52  No: 12531

すみません、元々の方法で、使用していたフリーのコンポーネントを別なものに変更したら解決しました。
風来坊様、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加