![]() |
Übernahme mit GlobalGetAtomName
Wenn mein Programm mit einem bestimmten Parameter gestartet wird übernehme ich die Informationen mit einem Atom zum Beispiel so:
Delphi-Quellcode:
procedure TForm.WMMailtoMessage(var Msg: TMessage);
var cBuf: array [0..1000] of char; begin {receiving a message} FillChar(cBuf,1000,#0); GlobalGetAtomName(Msg.lParam, cBuf, 1000); {get string from atom} GlobalDeleteAtom(Msg.lParam); {delete the atom} SendMailToExecute(StrPas(cBuf)); inherited; end; Wenn allerdings in dem Msg.lParam ein Leerezeichen vorhanden ist wird nur das in dem TMessage übergeben was vor dem Leerzeichen vorhanden ist. Alles dahinter wird abgeschnitten. Ich habe keinen Einfluß darauf ob ein Leerezeichen übergeben wird oder nicht. Sonst wäre es ja einfach man würde es vor der Übergabe kodieren. Was kann man tun. Gibt es eine andere Möglichkeit? Für eure Tipps wäre ich dankbar. Gruß Gerd [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Übernahme mit GlobalGetAtomName
Hallo Gerd,
der Buffer cBuf ist mit "array[Byte] of Char" ausreichend dimensioniert. Ein Atom String kann maximal 255 Zeichen lang sein. Die verkürzte Übernahme der Zeichenkette bringe ich eher mit einem NUL-Zeichen (#0) als einem Leerzeichen (SPACE, #32) in Verbindung, da ein Atom-String nur bis zum ersten NUL-Zeichen gelesen wird. Grüße vom marabu |
Re: Übernahme mit GlobalGetAtomName
Danke für den Hinweis auf die Länge des Strings.
Leider wird ein #32 in #0 verwandelt. Es wird definitiv bei dem Leerzeichen abgeschnitten. Gibt es eine andere Möglichkeit als den "Atom-String" zu verwenden? |
Re: Übernahme mit GlobalGetAtomName
Moin Gerd,
hast Du schon einmal daran gedacht, die Rückgabewerte der Funktionen zu prüfen, um eventuelle Fehler aufzuspüren? |
Re: Übernahme mit GlobalGetAtomName
Ja habe ich gemacht,
der ist einwandfrei. Nur, wenn halt das erste Leerzeichen dann ist Schluß. Danach ist nichts mehr im Array, ausser natürlich #0 |
Re: Übernahme mit GlobalGetAtomName
Hallo Gerd,
wenn die Rückgabewerte der Funktionen in Ordnung sind, dann prüfe doch mal deine Eingabewerte. Grundsätzlich gibt es kein Problem mit Leerzeichen in Atom-Strings:
Delphi-Quellcode:
Freundliche Grüße
procedure TDemoForm.ButtonClick(Sender: TObject);
var cBuf: array [Byte] of Char; a: ATOM; begin FillChar(cBuf, SizeOf(cBuf), #0); a := GlobalAddAtom('Eins Zwei Drei'); FillChar(cBuf, SizeOf(cBuf), #0); try GlobalGetAtomName(a, cBuf, SizeOf(cBuf)); ShowMessage(cBuf); finally GlobalDeleteAtom(a); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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