![]() |
WM_CopyData mit Boolschen Variablen
Hallo,
ich hab mir von unseren Freunden, den Schweizern den Code zum Kommunizieren zwischen zwei Applicationen mit WM_CopyData angeschaut. ![]() Nur wird in diesem Code (der funktioniert, habs getestet :-)) aber ein String übertragen. Wie kann ich dort z. B. Boolsche Variablen (es reicht auch eine) übertragen? Was muss man in dem Code umbiegen, damit das geht? Vielleicht kann mir jemand helfen. mfg Helmi |
Re: WM_CopyData mit Boolschen Variablen
schreib dir einen Record, dem du lpData der TCopyDataStruct übergibst.
|
Re: WM_CopyData mit Boolschen Variablen
oder übertrage einfach einen string true oder false ...
|
Re: WM_CopyData mit Boolschen Variablen
an das hab ich auch schon gedacht
ist wahrscheinlich die einfachste Lösung. Vor allem weil ich schon den Quellcode dafür hab :-) cu Helmi |
Re: WM_CopyData mit Boolschen Variablen
jetzt muss ich trotzdem nochmal nachfragen:
wie kann ich denn einen Record übertragen? Ich hab mal folgendes im Sender gemacht:
Code:
Das problem hierbei ist bei "lbData := Pointer(Rec)".
type
CustomRec = record S: String[50]; B: Boolean; end; procedure TForm1.Button1Click(Sender: TObject); var Rec: CustomRec; begin // with Rec do begin S := Edit1.Text; B := CheckBox1.Checked; end; with aCopyData do begin dwData := 0; cbData := sizeof(Rec) + 1; lpData := Pointer(Rec); end; // Fenster anhand des Titelzeilentext suchen hTargetWnd := FindWindowEx(0, 0, nil, PChar('Empfänger')); If hTargetWnd <> 0 then SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData)) else ShowMessage('Kein Empfänger gefunden!'); Wie kann ich den Rec dort reinbekommen? (blöde Frage ich weiss :-)) und beim Empfänger:
Code:
Wie kann ich beim Empfänger anstatt dem String (sText) den Rec auslesen?
type
CustomRec = record S: String[50]; B: Boolean; end; procedure TForm1.WMCopyData(var Msg: TWMCopyData); var sText: array[0..99] of Char; Rec: CustomRec; begin // anzuzeigenden Text aus den Parametern generieren StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); // Empfangenen Text ausgeben label1.Caption := sText; { with Rec do begin Label1.Caption := S; ALed1.Checked := B; end; } end; mfg Helmi |
Re: WM_CopyData mit Boolschen Variablen
Übergib einen Zeiger auf den Record:
Delphi-Quellcode:
type
TMyRec = record; ...: ...; end; PMyRec = ^TMyRec; |
Re: WM_CopyData mit Boolschen Variablen
Liste der Anhänge anzeigen (Anzahl: 1)
Und hier noch mal ein komplettes Beispiel. Gesendet wird zwar an das eigene Fenster, aber du kannst ja das Handle des gewünschten Fensters angeben.
Delphi-Quellcode:
Im Anhang noch mal komplett mit zwei Fenstern.
type
TMyRecord = packed record b: Boolean; s: string[255]; end; PMyRecord = ^TMyRecord; type TForm1 = class(TForm) Button1: TButton; CheckBox1: TCheckBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure WMCOPYDATA(var msg: TWMCOPYDATA); message WM_COPYDATA; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMCOPYDATA(var msg: TWMCOPYDATA); var MyRecord: PMyRecord; begin MyRecord := msg.CopyDataStruct.lpData; CheckBox1.Checked := MyRecord.b; Edit1.Text := MyRecord.s; end; procedure TForm1.Button1Click(Sender: TObject); var MyRecord: PMyRecord; cds: TCopyDataStruct; begin GetMem(MyRecord, sizeof(TMyRecord)); try MyRecord.b := True; MyRecord.s := 'Hello world'; cds.dwData := 0; cds.cbData := sizeof(TMyRecord); cds.lpData := MyRecord; SendMessage(Handle, WM_COPYDATA, Handle, Integer(@cds)); finally FreeMem(MyRecord, sizeof(TMyRecord)); end; end; |
Re: WM_CopyData mit Boolschen Variablen
Danke Luckie für deine Hilfe :-)
und das noch so spät :hello: aber eine Frage hätt ich noch: wieso geht das ned:
Code:
Ich benutz gerne with xxx do und wollt das dort auch benutzen, geht aber ned.
var
MyRecord: PMyRecord; begin MyRecord := msg.CopyDataStruct.lpData; with MyRecord do begin CheckBox1.Checked := b; Edit1.Text := s; end; end; Kann das mit dem Pointer zusammen hängen? mfg Helmi |
Re: WM_CopyData mit Boolschen Variablen
Ich habe den Empfänger eben noch etwas verbessert:
Delphi-Quellcode:
Und für deine neue Frage, solltest du einen neuen Thread erstellen, das hat nichts mehr mit WM_COPYDATA zu tun.
type
TMyRecord = packed record b: Boolean; s: string[255]; end; PMyRecord = ^TMyRecord; procedure TForm1.WMCOPYDATA(var msg: TWMCopyData); var b: Boolean; s: String[255]; begin b := PMyRecord(msg.CopyDataStruct.lpData)^.b; s := PMyRecord(msg.CopyDataStruct.lpData)^.s; CheckBox1.Checked := b; Edit1.Text := s; end; |
Re: WM_CopyData mit Boolschen Variablen
Zitat:
das geht, soweit ich weiss, so:
Delphi-Quellcode:
mfG
with MyRecord^ do
mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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