![]() |
WM_CopyData Problem
Hallo,
ich will die Kennung eines Programms zu einem anderen schicken :
Delphi-Quellcode:
with aCopyData do begin
dwData := 0; cbData := StrLen(pChar(vParam.Kennung)) + 1; lpData := pChar(vParam.Kennung); end; SendMessage(FindWindow('DKomMainWnd', nil), WM_COPYDATA, Longint(Handle), Longint(@aCopyData)); Jetzt kommt aber der Fehler : Undefinierter Bezeichner : 'Handle', aber ich habe doch meiner Meinung nach alle units eingebunden?! [delphi]uses Classes, DGlobals, Contnrs, ExtCtrls, DTplFrameFktTyp, Dialogs, Messages, Controls, SysUtils, DateUtils, Math, Windows, Forms; Was läuft da verkehrt? |
Re: WM_CopyData Problem
"Handle" ist ein Property der Klasse TForm. Wenn du nun das nicht als Methode des Formulars implementiert hast, hast du auch kein entsprechendes Property
|
Re: WM_CopyData Problem
Hallo,
mit Handle ist dein eigenes Programm gemeint. Übergib das Handle deines Haupt-Forms, also z.B. Form1.Handle. zu langsam ;( Heiko |
Re: WM_CopyData Problem
Oh, aber ich habe kein Formular. Wie kann ich denn sonst einen String an ein anderes Programm senden?
|
Re: WM_CopyData Problem
Du hast kein Formular? Es ist also eine Konsolenanwendung?
Beim Absender kannst du wahrscheinlich auch 0 angeben. |
Re: WM_CopyData Problem
Wenn Du nur senden und nicht empfangen willst, sollte statt des Handles eine 0 genügen, denke ich mal.
[edit] Wo war der rote Kasten? [/edit] |
Re: WM_CopyData Problem
|
Re: WM_CopyData Problem
Na ich möchte einen String senden und diesen in einem anderen Programm empfangen.
|
Re: WM_CopyData Problem
Hallo,
also übergib eine 0 oder Application.Handle. Das ist Wurscht. Heiko |
Re: WM_CopyData Problem
Also ich würde das jetzt aus dem Kopf so machen:
Delphi-Quellcode:
zumindest funktioniert es via Postmessage ein Objekt zu "versenden" und das verlangt
SendMessage(FindWindow('DKomMainWnd', nil), WM_COPYDATA, Longint(@aCopyData),0);
die gleichen Parameter:
Delphi-Quellcode:
MfG Alaitoc
PostMessage(m_lwWndHandle, WM_FREE_QUERY, Integer(coQuery), 0);
|
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 19:54 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