Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit WMCopyData und Aufruf eigener Prozeduren (https://www.delphipraxis.net/102190-problem-mit-wmcopydata-und-aufruf-eigener-prozeduren.html)

Anthauri 24. Okt 2007 19:58


Problem mit WMCopyData und Aufruf eigener Prozeduren
 
Hallo zusammen,

aus meinen zuletzt gestellten Fragen hier im Forum resultierte über die Antworten eurerseits eine Kommunikation zwischen zweien meiner Programme über WMCopyData. Hierbei werden Strings übergeben.

Funktioniert soweit auch gut.

Aber in derjenigen Prozedur, die die Daten empfängt soll in Abhängigkeit von dem empfangenen Inhalt unterschiedlich reagiert werden.
Ich habe also vor den empfangenen String zu analysieren und dementsprechend andere meiner Prozeduren in dem Programm aufzurufen

Aktuell sieht das so aus (vereinfacht):
Delphi-Quellcode:
type
  TFORM1: class(Tform)
    Procedure Daten_A(Sender: TObject);
    ...
  Private
    procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;

Var
  Cometext: String;
...

procedure Tform1.Daten_A(Sender: TObject);
begin
 ##tue etwas##
end;

procedure Tform1.WMCopyData(var Msg: TWMCopyData);//empfänger
begin
  cometext := String(Msg.CopyDataStruct.lpData);
  ##hier findet die Analyse des Strings statt die ich zum testen entfernt habe##
  Daten_A(Sender); //Aufruf der zuvor definierten Prozedur
end;
Und der zuletzt in der Prozedur befindliche Aufruf ist das Problem, denn der Compiler meckert über das "Daten_A(Sender);" und sagt, dass es "Sender" nicht kennt.

[Error] Form1_u.pas(161): Undeclared identifier: 'sender'.

Kann man aus der Empfangroutine keine anderen Prozeduren aufrufen?
Die Prodeur von einem anderen Punkt des Programms aus aufzurufen geht ohne Probleme.
Muß die Definition der WMCopyData Prozedur wonaders hin?

Kann jemand helfen?

Apollonius 24. Okt 2007 20:02

Re: Problem mit WMCopyData und Aufruf eigener Prozeduren
 
Daten_A erfordert einen Parameter vom Typ TObject. Du musst einen gültigen Parameter übergeben, um die Methode aufzurufen. Sender ist in deiner aktuellen Methode nicht definiert (Namen in der aufgerufenen Methode sind Schall und Rauch). Übergib am besten nil oder Self, das wäre das TForm1, das die Nachricht empfangen hat.
Hast du die Methode von Hand erstellt? Warum forderst du überhaupt einen Parameter Sender, wenn du ihn anscheinend nicht brauchst?

DeddyH 24. Okt 2007 20:02

Re: Problem mit WMCopyData und Aufruf eigener Prozeduren
 
Ersetz mal Sender durch self oder nil.

[edit] Ich bin einfach zu langsam :cry: [/edit]

sirius 24. Okt 2007 20:02

Re: Problem mit WMCopyData und Aufruf eigener Prozeduren
 
[gekürzt wegen rotem Kasten]

und das funktioniert? "string(...lpdata)"

Anthauri 24. Okt 2007 20:08

Re: Problem mit WMCopyData und Aufruf eigener Prozeduren
 
Hey vielen Dank für schnellen Antworten,

was würde man nur ohne so ein Forum machen...

Die Definition des (Sender: TObject); bei meinen Prozeduren habe ich einfach aus irgendwelchen bestehenden, die das System angelegt hat (also sowas wie Button1Click) übernommen.
Ich wußte bis Dato nicht dass dieser Paramter nicht benötigt wird.
Und siehe da kaum lasse ich ihn bei der Definition und dem Aufruf weg und schon gehts...

Vielen Dank


P.S. das mit dem

cometext := String(Msg.CopyDataStruct.lpData);

war in einer der unzählichen Antworten irgendwo hier angegeben und... ja es geht anscheinend


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz