Das hier (Edit1.Text ist hier als Quasikonstante in Anführungszeichen gesetzt) funktioniert, es kommt beim Empfänger Edit1.Text an:
Code: Alles auswählen
procedure TForm1.SendGetGroupIDs;
var
P : PChar;
lp: LPARAM;
dwRecipient: DWord;
begin
p:=PChar('Edit1.Text');
dwRecipient:=BSM_APPLICATIONS;
lp:=LongInt(Handle);
BroadcastSystemMessage(BSF_POSTMESSAGE, @dwRecipient, wSetGroupIDsMsg, Integer(p), lp);
end;
Das hier (Edit1.Text soll direkt genommen werden) funktioniert nicht, es kommt irgendwas an:
Code: Alles auswählen
procedure TForm1.SendGetGroupIDs;
var
P : PChar;
lp: LPARAM;
dwRecipient: DWord;
begin
p:=PChar(Edit1.Text);
dwRecipient:=BSM_APPLICATIONS;
lp:=LongInt(Handle);
BroadcastSystemMessage(BSF_POSTMESSAGE, @dwRecipient, wSetGroupIDsMsg, Integer(p), lp);
end;
Also ein im Quelltext statisch angegebener String funktioniert, ein erst zur Laufzeit zur Verfügung stehender String funktioniert nicht. Beide sind ja innerhalb ein und derselben Variable. Im Debugger sieht P auch im zweiten Fall richtig beim Sender aus.
Was kann man tun, damit dieser simple kleine Code funktioniert?
Falls es jemand nachvollziehen mag, hier gleich der relevante Teil der Auswertung der Botschaften beim Empfänger als Auszug:
Code: Alles auswählen
procedure TForm1.WndProc(var Message: TMessage);
var
li: longint;
GruppenIDs: PChar;
begin
li:=LongInt(Message.lParam); // Message empfangen
if Message.msg=wSetGroupIDsMsg then begin // GroupID empfangen
if li=LongInt(Handle) then Exit;
GruppenIDs:=PChar(Message.wParam);
Memo1.Lines.Add(GruppenIDs);
end;
inherited WndProc(Message);
end;