Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variablen Umwandlung (https://www.delphipraxis.net/105381-variablen-umwandlung.html)

ghost007 20. Dez 2007 22:29

Re: Variablen Umwandlung
 
Ich will per PostMessage einen string verschicken. Zu dem thema hab ich auch was hier im forum gefunden und derjenige meinte, dass das mit LongInt(PChar(string)) als lParam/wParam des PostMessage geht. Er versendet auch was aber ich muss das dann irgendwie wieder in den string zurückwandeln.

MfG - Ghost007

grenzgaenger 20. Dez 2007 22:29

Re: Variablen Umwandlung
 
du weisst aber schon, dass der wert 'destination' die grenzen eines longints sprengt und du somit nur die halben informationen zur verfügung hast ... beim zurückverwandeln, wie auch immer, kann somit nicht mehr das richtige rauskommen.

daher die frage, was willst du damit bezwecken?

ghost007 20. Dez 2007 22:34

Re: Variablen Umwandlung
 
Zitat:

Zitat von grenzgaenger
daher die frage, was willst du damit bezwecken?

Siehe post #11

MfG - Ghost007

mkinzler 20. Dez 2007 22:34

Re: Variablen Umwandlung
 
Zitat:

Zitat von ghost007
Ich will per PostMessage einen string verschicken. Zu dem thema hab ich auch was hier im forum gefunden und derjenige meinte, dass das mit LongInt(PChar(string)) als lParam/wParam des PostMessage geht. Er versendet auch was aber ich muss das dann irgendwie wieder in den string zurückwandeln.

MfG - Ghost007

Das ist aber keine Umwandlung in einen Integer sondern ein Cast des Zeigers auf ihn in eine LongInt.

ghost007 20. Dez 2007 22:36

Re: Variablen Umwandlung
 
Zitat:

Zitat von mkinzler
Das ist aber keine Umwandlung in einen Integer sondern ein Cast des Zeigers auf ihn in eine LongInt.

Hm,

d.h. der param ist dann ein pointer auf die addresse wo der string gespeichert ist? Wenn ja, dann geht das ja nur programm intern, oder? Wie bekomm ich dann den string von programm A nach programm B ?

MfG - Ghost007

Dax 20. Dez 2007 22:38

Re: Variablen Umwandlung
 
WM_COPYDATA

mkinzler 20. Dez 2007 22:41

Re: Variablen Umwandlung
 
Zitat:

d.h. der param ist dann ein pointer auf die addresse wo der string gespeichert ist?
Ja nichts anderes bedeutet PChar ja: ZEin Zeiger auf das erste Zeichen einer Zeichenkette
Zitat:

Wenn ja, dann geht das ja nur programm intern, oder?
Nein, es geht auch zwischen verschiedenen Anwendungen
Zitat:

Wie bekomm ich dann den string von programm A nach programm B ?
Man übergibt den String ja nicht an direkt an die andere Anwendung, sondern einer (Windows-)Funktion.

ghost007 21. Dez 2007 11:07

Re: Variablen Umwandlung
 
So,
ich hab mir ma das WM_COPYDATA angeschaut, und auch einen codelib eintrag gefunden ... aber irgendwie komm ich auf keinen grünen zweig.

Delphi-Quellcode:
procedure SendName(name:string);
 var
  Data: TCopyDataStruct;
  p: PChar;
begin
 p:=PChar(name);
 with Data do
  begin
   dwData:=0;
   cbData:=Length(p)+1;
   lpData:=p;
  end;
 SendMessage(tmp,WM_COPYDATA,nil,LongInt(@Data));
end;
tmp ist das handle wo die data hingeschickt werden soll. Jedoch bekomm ich bei dem LongInt(@Data) einen error "incompatible types interger and pointer" :(

MfG - Ghost007

dominikkv 21. Dez 2007 11:25

Re: Variablen Umwandlung
 
zum Beispiel so:
Delphi-Quellcode:
const
  WM_MYSTRINGTRANSFER = WM_USER + 151;

type
  TForm1 = class(TForm)
  private
    dwAtom  : DWORD;
    procedure SendString(s: String);
    procedure ReceiveProcedure(var aMSG: TMessage); message WM_MYSTRINGTRANSFER;
  end;

{...}

procedure TForm1.SendString(s: String);
begin
  dwAtom := GlobalAddAtom(PChar(s));
  SendMessage(self.Handle, WM_MYSTRINGTRANSFER, 0, dwAtom);
end;

procedure TForm1.ReceiveProcedure(var aMSG: TMessage);
var
  pFileName : PChar;
  dwLen    : DWORD;
begin
  dwLen    := MAX_PATH + 1;
  pFileName := StrAlloc(dwLen);
  try
    GlobalGetAtomName(aMsg.lParam, pFileName, dwLen);
    showmessage(pFileName);        
    GlobalDeleteAtom(aMsg.lParam);
  finally
    StrDispose(pFileName);
  end;
end;

ghost007 21. Dez 2007 11:39

Re: Variablen Umwandlung
 
Ok,
ich muss zugeben ziemlich cool :D
Das funktionier 1a.
Jedoch würd mich noch interessieren was bei meinem post #18 falsch war.

MfG - Ghost007


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr.
Seite 2 von 3     12 3      

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