Mega Code Archive

 
Categories / Delphi / VCL
 

How to access Listbox items with API

Title: How to access Listbox items with API // Retrieve the number of items in a ListBox function LB_GetItemCount(hListBox: THandle): Integer; begin Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0); end; // Delete a string in a ListBox procedure LB_DeleteItem(hListBox: THandle; Index: Integer); begin SendMessage(hListBox, LB_DELETESTRING, Index, 0); end; // Retrieve the selected item from a 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; 1.Usage Example: procedure TForm1.Button1Click(Sender: TObject); var hListBox: THandle; begin hListBox := {...}; // listbox handle ListBox1.Items.Text := LB_GetSelectedItem(hListBox); end; // Retrieve a string from a 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; 2.Usage Example: procedure TForm1.Button2Click(Sender: TObject); var hListBox: THandle; begin hListBox := {...}; // listbox handle ListBox1.Items.Text := LB_GetListBoxItem(hListBox, 2); end; // Retrieve all listbox items 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; 3.Usage example: procedure TForm1.Button3Click(Sender: TObject); var sl: TStringList; ListBox_Handle: THandle; begin hListBox := {...}; // listbox handle sl := TStringList.Create; try LB_GetAllItems(ListBox_Handle, sl); finally ListBox1.Items.Text := sl.Text; sl.Free; end; end;