Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mo 17.11.14 23:37 
Hallo Experten,

ich habe einen Prozess mit einem Hauptthread und einem "Weiterer-Thread", der Daten erzeugt, die im Haupthread ausgewertet werden müssen. Wenn ein Block Daten erzeugt ist, dann schickt der "Weiterer-Thread" dem Hauptthread eine Message, worauf der die Auswertung macht.

Nun mein Problem:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
{ Folgendes geht: }
{ =============== }
TYPE
  TMyForm = CLASS(TForm)
  PRIVATE
   PROCEDURE PWM_WasZuMachen(VAR msg: TMsg);
   PROCEDURE AppMessage(VAR msg: TMsg; VAR Handled: boolean);
  END;

PROCEDURE TMyForm.AppMessage(VAR msg: TMsg; VAR Handled: boolean);
BEGIN
  IF (msg.message = WM_WasZuMachen) THEN
    BEGIN
    PWM_WasZuMachen(msg);
    Handled := true;
    END
END;

PROCEDURE TMyForm.PWM_WasZuMachen;
BEGIN
...
END;

PROCEDURE TMyForm.FormCreate(Sender: TObject);
BEGIN
  Application.OnMessage := AppMessage;
END;


{ Folgendes geht NICHT: }
{ ===================== }
TYPE
  TMyForm = CLASS(TForm)
  PRIVATE
   PROCEDURE PWM_WasZuMachen(VAR msg: TMsg); MESSAGE WM_WasZuMachen;
  END;


PROCEDURE TMyForm.PWM_WasZuMachen;
BEGIN
...
END;



Muss man für den Meassage-Handler von Delphi noch was konfigurieren?

Bin gespannt,
Gruß GuaAck
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Di 18.11.14 08:20 
Da ich nicht ganz verstehe was du unter "das geht nicht" verstehst, hier ein kleiner Vorschlag:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
{ Folgendes geht NICHT: }
{ ===================== }
TYPE
  TMyForm = CLASS(TForm)
  PRIVATE
   PROCEDURE PWM_WasZuMachen(VAR msg: TMsg); MESSAGE WM_WasZuMachen;
  END;


//PROCEDURE TMyForm.PWM_WasZuMachen; // hier fehlt der Übergabe-Parameter
PROCEDURE TMyForm.PWM_WasZuMachen(VAR msg: TMsg);
BEGIN
...
END;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19322
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 18.11.14 08:21 
Du schickst die Message vermutlich an das falsche Fensterhandle. Wie sieht denn der Quelltext zum Senden aus?

Für die Threadkommunikation macht eine von TForm abgeleitete Klasse aber ohnehin keinerlei Sinn. Schau dir am besten einmal den Quelltext von TTimer an. Der ist sehr kompakt und zeigt sehr gut wie du dir selbst ein Fensterhandle registrierst und damit arbeitest.

user profile iconbaumina hat folgendes geschrieben Zum zitierten Posting springen:
Da ich nicht ganz verstehe was du unter "das geht nicht" verstehst, hier ein kleiner Vorschlag:
Den Parameter unten unter implementation wegzulassen ist zwar äußerst schlechter Programmierstil, funktioniert aber problemlos. Das macht also von der Funktionalität her keinen Unterschied.

Für diesen Beitrag haben gedankt: GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Di 18.11.14 20:23 
Danke Jaenicke,

richtig vermutet: Ich schickte die Message an Application.handle. Ich muss sie an das Handle des Forms schicken, jetzt geht es auch.

Gruß
Guaack
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mi 19.11.14 00:47 
Nachtrag:
TMsg ist falsch, man muss TMessage nehmen.
Gruß GuaAck