AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
Thema durchsuchen
Ansicht
Themen-Optionen

PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?

Ein Thema von Glados · begonnen am 3. Nov 2017 · letzter Beitrag vom 7. Nov 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?

  Alt 3. Nov 2017, 14:57
Wie wärs denn so? Ich kapiere noch immer nicht wieso du diese Frage gerade stellst.

Delphi-Quellcode:
type
 TPostMessageData = record
  sString: string;
  sInt: Integer;
 end;
 PPostMessageData = ^TPostMessageData;

Button1Click(Sender: TObject);
var
 CopyData: TPostMessageData;
begin
 CopyData.sString := 'String test';
 CopyData.sInt := 99;

 SendMessage(Handle, WM_COPYDATA, 0, Integer(@CopyData));
end;

procedure TFormReceiver.WMCopyData(var msg: TWMCopyData);
begin
 ShowMessage(PPostMessageData(msg.CopyDataStruct).sString);
end;
Du hast geschrieben das du die Winproc ersetzen\austauschen willst.
Das ist schlicht weg falsch und nicht möglich.

Du kannst deine eigene Message Queue aus dieser ableiten aber die Winproc austauschen vergiss es.
Lese doch einfach mal was du geschrieben hast.
Zitat:
blockiert SendMessage den Thread erst einmal.
Nö.
Sendmessage wartet auf die Rückgabe PostMessage eben nicht!

Bin raus!

gruss

Geändert von EWeiss ( 3. Nov 2017 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#2

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?

  Alt 3. Nov 2017, 15:03
Zitat:
Sendmessage wartet auf die Rückgabe PostMessage eben nicht!
SendMessage wartet auf die Rückgabe, also wird blockiert oder bin ich jetzt neben der Spur?
Ich muss auf keine Rückgabe warten. Ich möchte einfach nur die GUI aus einem Thread heraus aktualisieren ohne Synchronize verwenden zu müssen

WndProc zusammen mit Record und PostMessage:
Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
 CopyData: PPostMessageData;
begin
 CopyData := New(PPostMessageData);
 CopyData.sString := 'String test';
 CopyData.sInt := 99;

 PostMessage(Handle, 50, 0, Integer(CopyData));
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
 case msg.msg of
  50:
   begin
    ShowMessage('WndProc: ' + PPostMessageData(msg.LParam)^.sString);
   end;
 end;

 inherited;
end;
Was ist denn davon zu halten einen ganzen Record zu übergeben und immer mit New einen anzulegen?

Geändert von Glados ( 3. Nov 2017 um 15:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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