Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить элемент ListBox a??? [D3, Win95/98]


Cosmic ©   (2002-11-24 21:58:00) 

Как получить текст (в смысле значение) выделенного элемента ListBox"a при его выделении? ListBox создан при пом. CreateWindow. В обработке сообщения пишу так:


var
FoldersListBuffer: array [1..255] of Char;
Folders: integer; // handle listbox"a
...
wm_command :
begin
if (lParam = Folders) then
begin
Selection := SendMessage(Folders,LB_GETCURSEL,0,0);
SendMessage(Folders,LB_GETTEXT,Selection,Integer(@FoldersListBuffer));
MessageBoxA(0,PChar(@FoldersListBuffer),"www",0);
end;
...


Выдает два пустых MessageBox"a. Что я делаю неправильно?


MBo   (2002-11-25 00:18:00) [1]

>apay
>если юзать VCL, зачем вся эта бадья?
Он неправильно выводил Buffer в MessageBox, поэтому я тестовый пример сделал


apay   (2002-11-25 00:12:00) [2]

(из хелпа!)
An LB_GETTEXTLEN message can be sent before the LB_GETTEXT message to retrieve the length, in characters, of the string.
Return Values
The return value is the length of the string, in characters, excluding the terminating null character. If index does not specify a valid index, the return value is LB_ERR.
Remarks
If you create the list box with an owner-drawn style but without the LBS_HASSTRINGS style, the buffer pointed to by the lpszBuffer parameter will receive the 32-bit value associated with the item (the item data).

если пишешь на WinAPI, внимательней с созданием окошек.

2 MBo © (24.11.02 22:18)
если юзать VCL, зачем вся эта бадья?


MBo   (2002-11-24 22:18:00) [3]

procedure TForm1.LB1Click(Sender: TObject);
var
Buffer: array [0..255] of Char;
Selection:Integer;
begin
Selection := SendMessage(LB1.Handle,LB_GETCURSEL,0,0);
SendMessage(LB1.Handle,LB_GETTEXT,Selection,Integer(@Buffer));
MessageBox(0,Buffer,"www",0);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо