![]() |
Rückgabewert von Sendmessage setzen
Hallo,
ich möchte ein Message aus einem Dialog meines Programms an meine Hauptform senden und dann auf dessen Abarbeitung warten damit ich je nach Erfolg oder Mißerfolg entsprechend reagieren kann. Ich hatte vor einiger Zeit bereits schon mal ein ähnliches Problem das ich jedoch nicht lösen konnte: ![]() Damals hatte ich mich so beholfen, daß ich auf diese Message wiederrum mit einer Message geantwortet habe und dann einen Result-Code in den wParam schrieb. Jetzt stehe ich wieder vor dem gleichen Problem und würde dies gern ohne eine Antwort-Message lösen. Vielleicht hat ja jetzt jemand einen Tipp für mich. In dem alten Thread wurde mir gesagt, daß ich beim abarbeiten der Message eine Record gibt, der ein Feld "Result" beinhaltet. Diesen sollte ich entsprechend setzen. Ein solches Feld habe ich nicht gefunden. Hier mein Code: Die Message an das Haupt-Formular sollte etwa so aussehen:
Delphi-Quellcode:
Auf dem Haupt-Formular habe ich Application-Events-Komponente hinzugefügt und werte dort die entsprechende Message aus:
if not SendMessage(Application.Handle, MYMESSAGEID, Id, Mode) then
begin //Fehlerbehandlung end;
Delphi-Quellcode:
procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
begin case Msg.Message of MYMESSAGEID: begin ... Msg.Result := true; //Msg hat jedoch kein Feld "Result" Handled := true; end; end; end; |
Re: Rückgabewert von Sendmessage setzen
Hallo,
mit Records funktioniert das so:
Delphi-Quellcode:
type // Record definieren
TMsgRecord = record Daten: Integer; NochMehrDaten: Integer; Ergebnis: Integer; end; PMsgRecord = ^TMessageRecord // Einen Pointer definieren
Delphi-Quellcode:
procedure Send;
var MsgRecord: TMsgRecord; begin MsgRecord.Daten := 12345; MsgRecord.NochMehrDaten := 98765; MsgRecord.Ergebnis := 0; // Message senden, wParam = Pointer auf Record if not SendMessage(Application.Handle, MYMESSAGEID, @MsgRecord, 0) then begin //Fehlerbehandlung end else begin // Erfolg, Ergebnis steht in MsgRecord.Ergebnis end; end;
Delphi-Quellcode:
Gruß
procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
var MsgRecord: PMsgRecord; begin case Msg.Message of MYMESSAGEID: begin MsgRecord := PMsgRecord(Msg.wParam); // Record holen ... MsgRecord.Ergebnis := 1; // Erfolg Handled := true; end; end; end; xaromz |
Re: Rückgabewert von Sendmessage setzen
Leider bekomme ich das noch nicht so hin.
Bei folgender Methode bekomme ich den Fehler: Inkompatible Typen: 'Integer' und 'Pointer'
Delphi-Quellcode:
Ich merke da sind bei mir wohl noch beträchtlich Lücken, was Pointer angeht. :roll:
procedure Send;
var MsgRecord: TMsgRecord; begin ... // Message senden, wParam = Pointer auf Record if not SendMessage(Application.Handle, MYMESSAGEID, @MsgRecord, 0) then begin ... end; |
Re: Rückgabewert von Sendmessage setzen
Delphi-Quellcode:
SendMessage(Application.Handle, MYMESSAGEID, Integer(@MsgRecord), 0)
|
Re: Rückgabewert von Sendmessage setzen
Das macht man mit einer message-Methode.
Delphi-Quellcode:
Auf Sendeseite ist es
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private procedure MyMessage(var Message: TMessage); message MYMESSAGEID; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyMessage(var Message: TMessage); begin Message.Result := 0; end; end.
Delphi-Quellcode:
Sollte das nicht funktionieren dann Application.MainForm.Handle benutzen.
if SendMessage(Application.Handle, MYMESSAGEID, 0, 0) <> 0 then
|
Re: Rückgabewert von Sendmessage setzen
Zitat:
Zitat:
Die Lösung von xaromz ist aber auch sehr interessant falls mal die Parameter von Post/Sendmessage nicht ausreichen. Vielen Dank für eure schnelle Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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