Доступ к пунктам 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;
Комментарии