...access Listbox items with API?

Author: Thomas Stutz

Category: Files

{
  This code might be useful for nonVCL applications or to read Listbox
  items from another application.
}

{
  Die folgenden Funktionen können z.B für nonVCL Projekte verwendet werden
  oder auch zum Auslesen von Listboxen aus anderen Applikationen.
}


// Retrieve the number of items in a ListBox
// Anzahl Einträge einer ListBox ermitteln

function LB_GetItemCount(hListBox: THandle): Integer;
begin
  
Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0);
end;

// Delete a string in a ListBox
// Einen String in einer ListBox löschen

procedure LB_DeleteItem(hListBox: THandle; Index: Integer);
begin
  
SendMessage(hListBox, LB_DELETESTRING, Index, 0);
end;

// Retrieve the selected item from a ListBox
// Gibt den Text des markiertes Items einer ListBox zurück

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;

// Example, Beispiel:

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
// Gibt den Text eines bestimmten Items einer ListBox zurück

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;

// Example, Beispiel:

procedure TForm1.Button2Click(Sender: TObject);
var
  
hListBox: THandle;
begin
  
hListBox := {...}// listbox handle
  
ListBox1.Items.Text := LB_GetListBoxItem(hListBox, 2);
end;

// Gibt den gesamten Text einer ListBox zurück
// 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;

// Example, Beispiel:

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;

 

printed from
www.swissdelphicenter.ch
developers knowledge base