Avatar billede hasan Nybegynder
19. april 2004 - 18:02 Der er 6 kommentarer og
1 løsning

mærker en random

hej hvordan kan jeg mærker en random item fra min listbox?

var
S: String;
begin
randomize;

S := listbox1.Selected[random(ListBox1.Items.Count - 1) + 1];

??
Avatar billede Slettet bruger
19. april 2004 - 18:06 #1
Prøv med det her:

var
S: String;
begin
Randomize;
S := listbox1.Items.String[random(ListBox1.Items.Count - 1) + 1];
Avatar billede Slettet bruger
19. april 2004 - 18:08 #2
Eller vil du bare marker den?? Så kan du prøve:

begin
  Randomize;
  ListBox1.ItemIndex := Random(ListBox1.Items.Count-1)+1;
end;
Avatar billede hasan Nybegynder
19. april 2004 - 18:41 #3
kode to virker.

så hvis du bare laver et svar :)
Avatar billede Slettet bruger
19. april 2004 - 18:45 #4
Svar :o)
Avatar billede hasan Nybegynder
19. april 2004 - 19:20 #5
point :)
Avatar billede hasan Nybegynder
19. april 2004 - 21:48 #6
nu ved jeg godt at du har fået dine point, men ved ikke om du lige gider at hjælpe mig med et problem mere?

function TForm1.PlaySong : string;
var
mp3File : string;
begin

if listbox1.Items.Count=0 then exit;

mp3File := listbox1.Items.Strings[listbox1.ItemIndex];
 
if not FileExists(mp3File) then begin
  ShowMessage('The MP3 file does not exist!');
  exit;
end;

Progress.MaxValue := 0;
Mediaplayer1.close;
mediaplayer1.FileName := mp3File;
mediaplayer1.open;
mediaplayer1.play;
timer1.Enabled := true;
Progress.MaxValue := mediaplayer1.Length;
timer2.Enabled := true;
end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Position = MediaPlayer1.Length then
  Listbox1.ItemIndex := Listbox1.ItemIndex + 1;
  PlaySong;

  if random1.Checked = true then
  Randomize;
  ListBox1.ItemIndex := Random(ListBox1.Items.Count-1)+1;
  PlaySong;
  exit;
end;

procedure TForm1.Random1Click(Sender: TObject);
begin
  Randomize;
  ListBox1.ItemIndex := Random(ListBox1.Items.Count-1)+1;
  playsong;
end;

random virker men når sang er færdig og den skal vælge en ny random sang så begynder programmet at "fryse" mens den mærker den næste og næste og næste sang. hvad gøre jeg forkert?
Avatar billede Slettet bruger
19. april 2004 - 22:08 #7
Den kører PlaySong, hver gang MediaPlayeren laver en Notify... Prøv at sætte begin/end omkring koden:

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  if MediaPlayer1.Position = MediaPlayer1.Length then
  begin 
    Listbox1.ItemIndex := Listbox1.ItemIndex + 1;

    //PlaySong;                <-  PlaySong blev kørt før den vælger en ny tilfældig sang.

    if random1.Checked = true then
      //Randomize              <-  Skal ikke køres, hver gang den vælger en tilfældig sang
      ListBox1.ItemIndex := Random(ListBox1.Items.Count-1)+1;
    PlaySong;
  end;
end;

Du skal også have Randomize i FormActivate, for den skal kun køres en gang.
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