AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Nachricht mit Parameterübergabe

Ein Thema von TheMiller · begonnen am 29. Jun 2007 · letzter Beitrag vom 30. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Eigene Nachricht mit Parameterübergabe

  Alt 29. Jun 2007, 16:34
Hallo,

ich hatte ja in einem anderen Thread schon mal über Messages geschrieben. Das Senden klappt auch eigentlich ganz gut. Jetzt wollte ich nurmal wissen, ob man an eigene Messages auch einen selbstdefinierten Parameter übergeben kann. Ich müsste nämlich wissen, von wo die Message kommt, bzw wie die Datei heißt, die mir die Message gesendet hat!

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Eigene Nachricht mit Parameterübergabe

  Alt 29. Jun 2007, 16:44
sowas würde ich immer mit WM_COPYDATA machen. Die WinAPI öffnet damit einen Speicherbereich des Senders für den Empfänger, aus dem dann gelesen werden kann.

Das geht afaik nicht mit anderen, selbst definierten Messages.

EDIT: Wenn du die Messages in deinem eigenen Prozess verschickst, gehts natürlich so, wies Nuclear-Ping unten beschreibt.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: Eigene Nachricht mit Parameterübergabe

  Alt 29. Jun 2007, 16:44
Du musst einen eigenen Record definieren, daraus einen Pointer machen, Speicher reservieren und als LParam die Adresse des Pointers übergeben.

Hier mal ein Beispiel aus einem aktuellen Projekt:
Delphi-Quellcode:
type
  TOscDrawInfo = record
                   Buffer: PChar;
                   Size: Integer;
                   OscRight, OscLeft: TBitmap;
                   LW, LH, RW, RH: Integer;
                   ScannerOsc: Boolean
                 end;
  POscDrawInfo = ^TOscDrawInfo;

{...}

procedure DrawOscilloscope (Buffer: PChar; Size: Integer;
                            OscRight, OscLeft: TBitmap;
                            LW, LH, RW, RH: Integer;
                            ScannerOsc: Boolean);
var
  OscDrawInfo: POscDrawInfo;
begin
  New (OscDrawInfo);
  GetMem (OscDrawInfo^.Buffer, Size);

  CopyMemory (OscDrawInfo^.Buffer, Buffer, Size);
  
  OscDrawInfo^.Size := Size;
  OscDrawInfo^.OscRight := OscRight;
  OscDrawInfo^.OscLeft := OscLeft;
  OscDrawInfo^.LW := LW;
  OscDrawInfo^.LH := LH;
  OscDrawInfo^.RW := RW;
  OscDrawInfo^.RH := RH;
  OscDrawInfo^.ScannerOsc := ScannerOsc;

  PostMessage (RadionicMainContainerForm.Handle,
               WM_USER, MSG_DRAW_OSCILLOSCOPE, Integer (OscDrawInfo));
end;
Nicht vergessen, den Speicher dann in der Empfangsroutine wieder freizugeben.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Eigene Nachricht mit Parameterübergabe

  Alt 29. Jun 2007, 16:46
Zitat von Nuclear-Ping:
Nicht vergessen, den Speicher dann in der Empfangsroutine wieder freizugeben.
Innerhalb des eigenen Prozesses ja, ansonsten wirds ordentlich knallen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#5

Re: Eigene Nachricht mit Parameterübergabe

  Alt 29. Jun 2007, 16:50
Ja, sonst mit WM_COPYDATA. Dafür hab ich aber grad kein Beispiel.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Eigene Nachricht mit Parameterübergabe

  Alt 30. Jun 2007, 01:29
Danke an euch alle!

Das ist ja eigentlich ganz easy. Mit dem record-Pointer-Prinzip habe ich bereits Erfahrung... Dann werde ich mal ein bissl rumprobieren!

Gute Nacht!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Eigene Nachricht mit Parameterübergabe

  Alt 30. Jun 2007, 02:34
Guck mal hier: http://www.michael-puff.de/Developer.../Code-Snippets -> WM_COPYDATA

Innerhalb des eigenens Prozesses kannst du auch selbst definierte Nachrichten verschicken mit einem Zeiger auf einen Speicherbereich im lParam.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: Eigene Nachricht mit Parameterübergabe

  Alt 30. Jun 2007, 10:26
Das ist genau das, was ich gesucht habe! Nur ich hab mal eine Frage. Wo ist der Unterschied zwischen einem Record und einem packed Record.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#9

Re: Eigene Nachricht mit Parameterübergabe

  Alt 30. Jun 2007, 10:42
Zitat von DJ-SPM:
Das ist genau das, was ich gesucht habe! Nur ich hab mal eine Frage. Wo ist der Unterschied zwischen einem Record und einem packed Record.
Hallo

nur bei einem packed record kannst du dich drauf verlassen, dass die Daten dicht an dicht gepackt sind, z.B. bei
Delphi-Quellcode:
test = record
         int1 : integer;
         byte1 : byte;
         int2 : integer;
       end;
wird für byte1 der gleiche Speicherplatz reserviert wie für int1 und int2, damit die Daten im 32bit-Speicher ausgerichtet sind (bei 64bit wird an 64-bit-Grenzen ausgerichtet). Das gibt häufig Ärger, wenn du den Record mit anderen Programmen austauschst oder in eine Datenbank schreiben willst. Bei "packed" nimmt das byte auch nur ein byte ein.

Im Zweifel kannst/musst du das mit SizeOf prüfen: test ist 12 byte gross, als packed 9 byte.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#10

Re: Eigene Nachricht mit Parameterübergabe

  Alt 30. Jun 2007, 10:45
Also kann man sagen, dass nur noch packed-records verwendet werden sollten?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:42 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