AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_CopyData mit Boolschen Variablen
Thema durchsuchen
Ansicht
Themen-Optionen

WM_CopyData mit Boolschen Variablen

Ein Thema von Helmi · begonnen am 2. Okt 2004 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#1

WM_CopyData mit Boolschen Variablen

  Alt 2. Okt 2004, 23:48
Hallo,

ich hab mir von unseren Freunden, den Schweizern den Code zum Kommunizieren zwischen zwei Applicationen mit WM_CopyData angeschaut.

http://www.swissdelphicenter.ch/de/showcode.php?id=810

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: WM_CopyData mit Boolschen Variablen

  Alt 2. Okt 2004, 23:51
schreib dir einen Record, dem du lpData der TCopyDataStruct übergibst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: WM_CopyData mit Boolschen Variablen

  Alt 2. Okt 2004, 23:52
oder übertrage einfach einen string true oder false ...
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#4

Re: WM_CopyData mit Boolschen Variablen

  Alt 2. Okt 2004, 23:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#5

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 01:01
jetzt muss ich trotzdem nochmal nachfragen:

wie kann ich denn einen Record übertragen?

Ich hab mal folgendes im Sender gemacht:

Code:
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!');
Das problem hierbei ist bei "lbData := Pointer(Rec)".
Wie kann ich den Rec dort reinbekommen? (blöde Frage ich weiss )

und beim Empfänger:

Code:
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;
Wie kann ich beim Empfänger anstatt dem String (sText) den Rec auslesen?

mfg
Helmi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 01:36
Übergib einen Zeiger auf den Record:
Delphi-Quellcode:
type
  TMyRec = record;
    ...: ...;
  end;
  PMyRec = ^TMyRec;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 01:57
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:
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;
Im Anhang noch mal komplett mit zwei Fenstern.
Angehängte Dateien
Dateityp: zip wm_copydata_204.zip (3,3 KB, 9x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#8

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 09:22
Danke Luckie für deine Hilfe
und das noch so spät

aber eine Frage hätt ich noch:

wieso geht das ned:

Code:
  var
  MyRecord: PMyRecord;
begin
  MyRecord := msg.CopyDataStruct.lpData;
 
  with MyRecord do
    begin
      CheckBox1.Checked := b;
      Edit1.Text := s;
    end;
end;
Ich benutz gerne with xxx do und wollt das dort auch benutzen, geht aber ned.
Kann das mit dem Pointer zusammen hängen?

mfg
Helmi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 11:02
Ich habe den Empfänger eben noch etwas verbessert:
Delphi-Quellcode:
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;
Und für deine neue Frage, solltest du einen neuen Thread erstellen, das hat nichts mehr mit WM_COPYDATA zu tun.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: WM_CopyData mit Boolschen Variablen

  Alt 3. Okt 2004, 11:25
Zitat von Helmi:
Ich benutz gerne with xxx do und wollt das dort auch benutzen, geht aber ned.
Kann das mit dem Pointer zusammen hängen?

mfg
Helmi
Hoi,

das geht, soweit ich weiss, so:

with MyRecord^ do mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 16:51 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