Доступ к пунктам ListBox через API
Отыскать количество пунктов в ListBox:
function LB_GetItemCount(hListBox: THandle): Integer; begin Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0); end;
Удаление строки из ListBox:
procedure LB_DeleteItem(hListBox: THandle; Index: Integer); begin SendMessage(hListBox, LB_DELETESTRING, Index, 0); end;
Находим выбранный пункт в ListBox:
function LB_GetSelectedItem(hListBox: THandle): string; var Index, len: Integer; s: string; buffer: PChar; begin Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0); len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0); GetMem(buffer, len + 1); SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer)); SetString(s, buffer, len); FreeMem(buffer); Result := IntToStr(Index) + ' : ' + s; end;
Пример
procedure TForm1.Button1Click(Sender: TObject); var hListBox: THandle; begin hListBox := {...}; // Дескриптор ListBox ListBox1.Items.Text := LB_GetSelectedItem(hListBox); end;
Найти строку в ListBox:
function LB_GetListBoxItem(hWnd: Hwnd; LbItem: Integer): string; var l: Integer; buffer: PChar; begin l := SendMessage(hWnd, LB_GETTEXTLEN, LbItem, 0); GetMem(buffer, l + 1); SendMessage(hWnd, LB_GETTEXT, LbItem, Integer(buffer)); Result := StrPas(buffer); FreeMem(buffer); end;
Пример
procedure TForm1.Button2Click(Sender: TObject); var hListBox: THandle; begin hListBox := {...}; // Дескриптор Listbox ListBox1.Items.Text := LB_GetListBoxItem(hListBox, 2); end;
Получить все пункты ListBox:
function LB_GetAllItems(hWnd: Hwnd; sl: TStrings): string; var RetBuffer: string; i, x, y: Integer; begin x := SendMessage(hWnd, LB_GETCOUNT, 0, 0); for i := 0 to x - 1 do begin y := SendMessage(hWnd, LB_GETTEXTLEN, i, 0); SetLength(RetBuffer, y); SendMessage(hWnd, LB_GETTEXT, i, lParam(PChar(RetBuffer))); sl.Add(RetBuffer); end; end;
Пример
procedure TForm1.Button3Click(Sender: TObject); var sl: TStringList; ListBox_Handle: THandle; begin hListBox := {...}; // Дескриптор ListBox sl := TStringList.Create; try LB_GetAllItems(ListBox_Handle, sl); finally ListBox1.Items.Text := sl.Text; sl.Free; end; end;
Комментарии