Entwickler-Ecke

Windows API - Was übergeben um Array[0..255] of Char zu füllen


Tweafis - Sa 21.06.03 14:06
Titel: Was übergeben um Array[0..255] of Char zu füllen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure ListboxAddItem(hWnd: HWND; ItemText: array of Char);
var buffer: Array[0..255of Char;
begin
  buffer := ItemText;
  SendMessage(hwndListbox, LB_ADDSTRING, 0, Integer(@buffer));
end;


Mit diesem Code probiere ich einer Listbox Items hinzuzufügen.

Wenn ich bei ItemText ein DWOrd übergebe und dcirekt an SendMEssage weitergebe geht es, also so:


Delphi-Quelltext
1:
2:
buffer := 'Bla';
ListboxAddItem(hwndListbox, Integer(@buffer));


Was muss ich der proc übergeben damit es geht?


Delete - Sa 21.06.03 15:21


Delphi-Quelltext
1:
2:
3:
4:
procedure ListboxAddItem(hWnd: HWND; ItemText: String); 
begin ´
  SendMessage(hwndListbox, LB_ADDSTRING, 0, Integer(@ItmeText[1])); 
end;

Versuch es mal so. :wink:


Tweafis - Sa 21.06.03 21:37

Hmm, das geht :D
Wird mit @ItemText[1] Der Pointer auf das erste Zeichen des Strings übergeben? und bei @buffer der Pointer auf das erste Array Element.

Kleine Frage, wie kann ich einen buffer mit einem anderen string verbinden, mit lstrcat geht es ja nicht (ist wohl kein neuer Thread nötig, oder?)


Delete - Sa 21.06.03 22:11

Erste Frage: Ja.

Zweite Frage: Geht auch mit lstrcat.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  s1, s2: String;
  buffer: array[0..255of Char;
begin
  lstrcat(buffer, @s[1]);
  { oder }
  s1 := String(buffer)+s2;


Tweafis - Sa 21.06.03 22:17

Ich glaube ich muss mir das mit den Array of Char nochmal anschauen. Ein string ist doch auch nur ein Array of Char, oder? nur halt nicht null-terminiert


TomT - So 22.06.03 03:47

nee, an stelle 0 steht beim datentyp string die anzahl der stellen bzw. zeichen.