Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Listbox Multiselect (https://www.delphipraxis.net/56751-listbox-multiselect.html)

simonko 10. Nov 2005 15:38


Listbox Multiselect
 
hab folgendes Problem:
Ich kann in einer Listbox 2 items auswählen. Ich brauche dann den index der zwei Einträge um dann später eine funktion aufzurufen. ich hab das folgendermasen programmiert. geht das auch einfacher?
Delphi-Quellcode:
var
  i            : integer;
  st1,st2       : integer;
  erstegefunden : boolean;
begin
  erstegefunden:=false;
  if Listbox1.Selcount=2 then begin begin
    for i:=Listbox1.Items.Count-1 downto 0 do
      if (Listbox1.Selected[i]=true) then
        if erstegefunden=false then begin
          st1:=i;
          erstegefunden:=true;
        end else
          st2:=i;
      end;
  (*Hier wird die funktion mit a und b aufgerufen*)

marabu 10. Nov 2005 17:09

Re: Listbox Multiselect
 
Ist doch kein Problem:

Delphi-Quellcode:
uses
  Types; // TIntegerDynArray

function CreateSelected(lb: TListBox; var a: TIntegerDynArray): integer;
var
  i: integer;
begin
  SetLength(a, lb.SelCount);
  Result := 0;
  for i := 0 to Pred(lb.Count) do
    if lb.Selected[i] then
    begin;
      a[Result] := i;
      Inc(Result);
    end;
end;

procedure TDemoForm.CopyButtonClick(Sender: TObject);
var
  i: integer;
  xa: TIntegerDynArray;
  sl: TStringList;
begin
  if CreateSelected(ListBox, xa) > 0 then
  begin
    sl := TStringList.Create;
    with ListBox do
      for i := Low(xa) to High(xa) do
        sl.Add(Items[xa[i]]);
    ShowMessage(sl.CommaText);
    sl.Free;
  end;
end;
Grüße vom marabu

Warum nicht den dynamischen Array-Typ aus der Unit Types verwenden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz