![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст из ListBox [D6, Win2k]
Me2 © (2002-10-23 16:20:00)API функцией создаю ListBox. И не получается считать из него данные. Делаю так(ListBox - это дескриптор элемента):
procedure Ok;
var
EnVar: string;
Cmdl: string;
S: Pchar;
begin
if SendMessage(ListBox, lb_GetCurSel, 0, 0) <> lb_Err then
begin
GetMem(S, 220);
SendMessage(ListBox, wm_GetText, 220, Longint(@S[1]));
Cmdl := S;
EnVar := GetEnvironmentVariable("PROSTD");
WinExec(PChar(EnVar + "\proe2001workspace.bat " + cmdl), SW_SHOW);
FreeMem(S);
SendMessage(Window, wm_Close, 0, 0);
end
else
MessageBox(0, "Error!!!", "Error", mb_Ok);
end;
Me2 (2002-10-23 17:10:00) [1]Спасибо
Игорь Шевченко (2002-10-23 16:43:00) [2]Если S - PChar, то LongInt(S), а не @S[1] - это же не строка.
Me2 (2002-10-23 16:38:00) [3]2Игорь Шевченко © (23.10.02 16:26)
Да, правильно. Теперь пишу
SendMessage(ListBox, lb_GetText, SendMessage(ListBox, lb_GetCurSel, 0, 0), Longint(@S[1]));
Если считать выходное значение(кол-во скопированных байт), то оно больше нуля, а S остается пустой.
2 MBo © (23.10.02 16:31)
> Ни к чему. S же PChar, значит,достаточно
Что значит ни к чему? lParam имеет тип Integer
MBo (2002-10-23 16:31:00) [4]Может, Петцольда почитать?
> Longint(@S[1]));
Ни к чему. S же PChar, значит,достаточно
Longint(S)
>GetMem(S, 220);
Нужно выделять места на байт больше для завершающего нуля.
И вообще, стоит сначала узнать, сколько символов будет считано.
Игорь Шевченко (2002-10-23 16:26:00) [5]SendMessage(ListBox, wm_GetText, 220, Longint(@S[1]));
Кто научил ? :-))))
currentItem := SendMessage(..., LB_GETCURSEL, ...);
SendMessage (ListBox, LB_GETTEXT, currentItem, LongInt(...));