AGB  ·  Datenschutz  ·  Impressum  







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

Übernahme mit GlobalGetAtomName

Ein Thema von Gerd01 · begonnen am 30. Jun 2007 · letzter Beitrag vom 1. Jul 2007
Antwort Antwort
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#1

Übernahme mit GlobalGetAtomName

  Alt 30. Jun 2007, 12:30
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]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Übernahme mit GlobalGetAtomName

  Alt 30. Jun 2007, 13:23
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
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Übernahme mit GlobalGetAtomName

  Alt 30. Jun 2007, 14:54
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?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Übernahme mit GlobalGetAtomName

  Alt 30. Jun 2007, 16:59
Moin Gerd,

hast Du schon einmal daran gedacht, die Rückgabewerte der Funktionen zu prüfen, um eventuelle Fehler aufzuspüren?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Übernahme mit GlobalGetAtomName

  Alt 1. Jul 2007, 07:15
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Übernahme mit GlobalGetAtomName

  Alt 1. Jul 2007, 10:44
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:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:47 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