![]() |
Re: WM_CopyData Problem
Habe es wie folgt gemacht und es erscheint ersteinmal kein Fehler mehr.
Delphi-Quellcode:
Mal sehen wie es sich mit dem Empfangen verhält.
SendMessage(FindWindow('DKomMainWnd', nil), WM_COPYDATA, 0, Longint(@aCopyData));
|
Re: WM_CopyData Problem
Zitat:
|
Re: WM_CopyData Problem
Hab die Procedure jetzt in die Form des EmpfangsProgramms eingebunden :
Delphi-Quellcode:
...
TKomMainWnd = class(TForm)
... procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
Delphi-Quellcode:
Wenn ich jetzt aber unter
procedure TKomMainWnd.WMCopyData(var Msg: TWMCopyData);
begin oldi := String(PChar(Msg.CopyDataStruct.lpData)); end;
Delphi-Quellcode:
ShowMessage(oldi) ausführen will, wird mir nur ein leeres Fenster gezeigt.
procedure TKomMainWnd.FormCreate(Sender: TObject);
Was mache ich verkehrt? |
Re: WM_CopyData Problem
vermutlich, weil in FormCreate noch keine WM_COPYDATA-Nachricht empfangen wurde?
|
Re: WM_CopyData Problem
Überlegen wir mal: Ich stelle den Stuhl ins Wohnzimmer und wundere mich dann, warum ich mich im Schlafzimmer nicht draufsetzen kann.
FormCreate ist die erste Methode, die aufgerufen wird, wenn das Formular erzeugt wird. Zu dem Zeitpunkt, wirst du noch keine WM_COPYDATA Nachricht empfangen haben. Desweiteren kommen die Daten eben in der Methode TKomMainWnd.WMCopyData an und nicht in FormCreate. |
Re: WM_CopyData Problem
Zitat:
|
Re: WM_CopyData Problem
Ich glaube, du hast gar nichts verstanden. Rat mal, warum du beim Empfänger die Methode procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; hast? Nämlich um dort die Daten zu empfangen die an dein Fenster mit WM_COPYDATA geschickt wurden. So, wo sind jetzt die geschickten Daten in deinem Quellcode verfügbar?
|
Re: WM_CopyData Problem
Hier scheint auch wieder mal ganz dringend ein Hinweis auf die netten
![]() |
Re: WM_CopyData Problem
Hallo,
zur Erklärung. Im FormCreate existiert das Windows-Fenster noch nicht, sondern erst das TForm (was NICHT das Windows-Fenster ist) Die früheste Stelle ist FormActivate oder FormShow. Im FormCreate geht das über memory mapped files, was ich mir aber nicht antun würde. Heiko |
Re: WM_CopyData Problem
in FormCreate existiert es schon, aber kurz davor existierte es noch nicht
zwischendurch werden standardmäßig auch keine Messages abgearbeitet und demnach kann ein WM_COPYDATA an diese Form da noch nicht verarbeitet sein. - wurde WM_COPYDATA vorm Create abgesendet, ging diese Nachricht ins Nichts, da das Zielfenster noch nicht existierte - und selbst wenn die Nachricht in der Millisekunde (oder auch ein bissl länger) versendet, wärend das Erstellen der Form begann und OnCreate aufgerufen wurde, dann wird diese Nachricht erst verarbeitet, wenn das Programm später mal die eingegangenen Nachrichten abarbeitet |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz