08. april 2004 - 11:28Der er
5 kommentarer og 1 løsning
random valg af person
hey
jeg har en stringliste af navne på personer. Udfra denne liste vil jeg gerne finde en tilfældig person og smide ham ind i en listbox, men samme person må ikke forekomme 2 gange i listboxen
procedure TForm1.Button1Click(Sender: TObject); var I, id: integer; begin if ListBox1.Items.Count = st.Count then exit;
randomize; // i oncreate
id := random(st.Count);
if ListBox1.Items.IndexOf(st.Strings[id]) = -1 then ListBox1.Items.Add(st.Strings[id]) else begin repeat id := random(st.Count); until ListBox1.Items.IndexOf(st.Strings[id]) = -1; ListBox1.Items.Add(st.Strings[id]); end; end;
Tak for koden, men i mellemtiden har jeg skiftet gui på programmet og bruger nu en listview istedet for listbox... Listviewet er delt op i 3 kolonner (report style), og den tilfældige person bliver smidt i 3. kolonnes række pladsering
jeg har prøvet at implementere ovenstående, hvor jeg har skiftet listbox ud med listviews funktionaliteter, men det hitter ikke helt...
her er kode
if ListView1.Items.Count = st.Count then exit;
id := random(st.Count);
if ListView1.Items.SubItems.IndexOf(st.Strings[id]) = -1 then result := st.Strings[id] else begin repeat id := random(st.Count); until ListView1.Items.SubItems.IndexOf(st.Strings[id]) = -1; result := st.Strings[id]; end;
det skal siges at koden har sin egen function, derfor result
procedure TForm1.Button1Click(Sender: TObject); var I, id: integer; found: boolean; Listitem:tlistitem; begin if ListView1.Items.Count = st.Count then exit;
repeat id := random(st.Count); found := false; for I := 0 to ListView1.Items.Count - 1 do if ListView1.Items.Item[I].SubItems[1] = st.Strings[id] then found := true; until not found;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.