Avatar billede ullesan Nybegynder
08. april 2004 - 11:28 Der 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

nogle der kan hjælpe?!?

Tak
Avatar billede dkn Nybegynder
08. april 2004 - 14:37 #1
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;


st er din stringlist
Avatar billede ullesan Nybegynder
08. april 2004 - 15:33 #2
hey dkn

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
Avatar billede dkn Nybegynder
08. april 2004 - 16:37 #3
ser vel rigtig nok ud, er det ikke bare:
ListView1.Items.SubItems[2] du skal bruge
Avatar billede ullesan Nybegynder
08. april 2004 - 17:36 #4
leider... den siger

[Error] Unit1.pas(142): Undeclared identifier: 'SubItems'
Avatar billede dkn Nybegynder
08. april 2004 - 20:31 #5
Du må selv tilpasse den til din function.


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;

 
  Listitem := listview1.Items.Add;
  Listitem.Caption := '';
  Listitem.SubItems.Add('');
  Listitem.SubItems.Add(st.Strings[id]);
end;
Avatar billede ullesan Nybegynder
09. april 2004 - 11:50 #6
muchios gracias!

virker nice
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester