Announcement

Collapse
No announcement yet.

sendmessage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • sendmessage

    type
    Tlisten = procedure(inText: shortstring ; inData : double ; inKey :integer)
    of object;

    TMsgPack = record
    texte : shortstring;
    data : double;
    end;

    ...
    var
    FOnBroadcastMsg : Tlisten;
    FWinHandle : HWND;
    FKey : DWORD;
    FenableOutput, FenableInput : boolean;
    FOutText : shortstring;
    FOutData : double;
    t : TcopyDataStruct;
    dataPack, InMsg : ^TMsgPack;
    precv : pcopydataStruct;

    ...

    new(datapack);
    datapack^.texte:= FOutText;
    datapack^.data:= FOutData;
    t.dwData:= Fkey;
    t.lpData:= datapack;
    t.cbData:= sizeOf(datapack^);
    <b>sendMessage(wnd_broadcast,WM_COPYDATA,FWinHandl e{Sender-Handle},LongInt(@t));</B>

    Warum öffnet dieser Befehl den I-Explorer?

    Danke.

  • #2
    Hallo,

    diese Frage habe ich doch schon gestern an anderer Stelle beantwortet (DLL-Rubrik?). Der Empfänger <b>wnd_broadcast</b> ist ein "Rundruf-Platzhalter", der dazu führt, das Win32 diese Botschaft an <b>alle</b> Top-Level-Fenster schickt. Somit muss man zwangsläufig damit rechnen, das alle die Anwendungen, die intern auch WM_COPYDATA verwenden, durcheinander kommen. Um das Problem zu lösen, muss wnd_broadcast durch das konkrete Fensterhandle des Empfängers ersetzt werden (d.h. man sollte diese Botschaft nur zum eigenen Programm schicken)

    Comment

    Working...
    X