Avatar billede fun22 Nybegynder
12. oktober 2002 - 10:56 Der er 46 kommentarer og
1 løsning

2 spørgsmål til delphi

1. Jeg har en open dialogbox og en listbox. Der vil jeg ger have at jeg kan åbne en fil og så ligge den ind i en listbox. Det skal bare være sådan at man kan se filnavnet. Eks. jeg har en fil der ligger i c:\musik\test.mp3 og så når jeg vælger den ligger den test over i listboxen. Det skal så være sådan at jeg kan ligge hele filnavnet over i en mplayer senere, ved at klikke på den og så trykke på en knap.

2. Hvordan gemmer jeg listboxens indhold i en ini fil? Det skal være sådan at når man tilføjer et nummer til listboxen så er den der næste gang man starter programmet.

Der er 30 points ti hver spørgsmål.

/fun22
Avatar billede dkn Nybegynder
12. oktober 2002 - 11:40 #1
Du skal lave et nyt object:

type
  TMusikFil = class(TObject)
    Filename: string;
    Filelocation: string;
  end;


//Open ny fil
var
  mp3: TMusikFil;
begin
  if opendialog1.execute then
begin
  mp3 := TMusikFil.create;
  mp3.filename := extractfilename(opendialog1.filename);
  mp3.Filelocation :=opendialog1.filename;
  ListBox1.Items.AddObject(MP3.Filename, MP3)
end;
end;


//Når der skal playes
var
  mp3: TMusikFil;
begin
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
//  medieplayer.filename := mp3.filename;
end;
Avatar billede dkn Nybegynder
12. oktober 2002 - 11:42 #2
skulle jo være:

var
  mp3: TMusikFil;
begin
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
//  medieplayer.filename := mp3.Filelocation;
//  mediaplayer.play;
end;
Avatar billede fun22 Nybegynder
12. oktober 2002 - 11:49 #3
Hvor skal type

  TMusikFil = class(TObject)
    Filename: string;
    Filelocation: string;
  end;

stå henne i koden?
Avatar billede dkn Nybegynder
12. oktober 2002 - 11:50 #4
du kan fx sætte den efter uses
Avatar billede fun22 Nybegynder
12. oktober 2002 - 11:56 #5
Nu har jeg sat det hele op, men når jeg markere en fil i listen og trykker på afspil kommer den med list index out of bounds (-1) Hvad er det??
Avatar billede dkn Nybegynder
12. oktober 2002 - 11:57 #6
hvordan ser din afspil kode ud?
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:01 #7
det er den du har skrevet 12/10-2002 11:42:53. Jeg tror også jeg er ovre det problem, for nu når jeg trykker på play skriver den "no MCI device open" Hvad er det så
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:04 #8
var
  mp3: TMusikFil;
begin
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:08 #9
Yes så virker det. Og det der "list index out of bounds (-1)" Det er hvis man ikke har valgt en fil i listen. Kan man ikke sætte den til at give en besked hvis der ikke er markeret nogen fil?
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:10 #10
var
  mp3: TMusikFil;
begin
if Listbox1.ItemIndex = -1 then exit;
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

nu gør den bare ingenting hvis der ikke valgt noget
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:12 #11
ok. Jeg smider lige nogle flere points i til dig hvis du kan hjælpe mig med hvordan man bruger spol fre og tilbage knaperne, sådan at når jeg trykker på en knap så skifter den til næste sang.
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:19 #12
jeg mener du kan gøre sådan her:

//Tilbage Knap
if Listbox1.ItemIndex = 0 then exit;
Listbox1.ItemIndex := Listbox1.ItemIndex-1;
try
MediaPlayer1.stop;
except
end;
Play.Click;//Kører koden fra sidst


//Next Knap
if Listbox1.ItemIndex = Listbox1.items.count then exit;
Listbox1.ItemIndex := Listbox1.ItemIndex+1;
try
MediaPlayer1.stop;
except
end;
Play.Click;//Kører koden fra sidst
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:22 #13
den kan ikke lide play i play.click;
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:25 #14
Nej du skal skrive navnet på den knap som koden fra sidst blev brugt på
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:27 #15
nu er det bare click der kommer med fejl
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:30 #16
okay lav en ny procedure som hedder:

Procedure PlaySelected;
var
  mp3: TMusikFil;
begin
if Listbox1.ItemIndex = -1 then exit;
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
try
MediaPlayer1.stop;
except
end;
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

//På Play knap
PlaySelected;

//Next Knap
if Listbox1.ItemIndex = Listbox1.items.count then exit;
Listbox1.ItemIndex := Listbox1.ItemIndex+1;
PlaySelected;

//Back Knap
if Listbox1.ItemIndex = 0 then exit;
Listbox1.ItemIndex := Listbox1.ItemIndex-1;
PlaySelected;
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:38 #17
nu virker det slet ikke. Nu komemr den med fejl fra listbox1 mediaplayer1
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:40 #18
prøv at kør den uden delphi's debugger
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:40 #19
hvordan gør man det?
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:47 #20
istedet for at trykke play som du nok gør. Går du der ud hvor du har gemt dit project og kører den exe fil
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:51 #21
Det virker ikke. Den skal da også først bygge denne exe fil, og det gør den jo først når man trykker på play eller compiler
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:53 #22
"virker ikke" det kan man ikke bruge til at finde en fejl med. Og ja den skal bygges med compile. Men prøv at køre den manuelt når den er bygget
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:55 #23
Det er jo det jeg siger at den ikke kan. Når man vil compile så kommer den med de fejl og stopper
Avatar billede dkn Nybegynder
12. oktober 2002 - 12:59 #24
okay hvad siger den så?
Avatar billede fun22 Nybegynder
12. oktober 2002 - 12:59 #25
[Error] Unit1.pas(58): Undeclared identifier: 'mp3list'
[Error] Unit1.pas(61): Undeclared identifier: 'MediaPlayer1'
[Error] Unit1.pas(61): Missing operator or semicolon
[Error] Unit1.pas(64): Missing operator or semicolon
[Error] Unit1.pas(65): Missing operator or semicolon
[Error] Unit1.pas(66): Missing operator or semicolon
[Error] Unit1.pas(67): Missing operator or semicolon
[Error] Unit1.pas(108): Undeclared identifier: 'Listbox1'
[Error] Unit1.pas(119): Statement expected but 'PROCEDURE' found
[Error] Unit1.pas(121): Undeclared identifier: 'Listbox1'
[Error] Unit1.pas(128): Statement expected but end of file found
[Error] Unit1.pas(31): Unsatisfied forward or external declaration: 'TForm1.Timer1Timer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'C:\Programmer\Borland\Delphi6\Projects\Unit1.pas'
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:02 #26
Der er fordi at du skal skrive

...
Private
  Procedure PlaySelected;

...


Procedure Form1.PlaySelected;
var
  mp3: TMusikFil;
begin
if Listbox1.ItemIndex = -1 then exit;
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
try
MediaPlayer1.stop;
except
end;
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
Avatar billede fun22 Nybegynder
12. oktober 2002 - 13:04 #27
Hvor helt nøjagtig skal Procedure Form1.PlaySelected;
var
  mp3: TMusikFil;
begin
if Listbox1.ItemIndex = -1 then exit;
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
try
MediaPlayer1.stop;
except
end;
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

stå?
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:07 #28
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure PlaySelected; //******
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure Form1.PlaySelected; //******
var
  mp3: TMusikFil;
begin
if Listbox1.ItemIndex = -1 then exit;
  mp3 := Pointer(Listbox1.Items.Objects[Listbox1.ItemIndex]);
try
MediaPlayer1.stop;
except
end;
MediaPlayer1.Filename := mp3.Filelocation;
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;


end.
Avatar billede fun22 Nybegynder
12. oktober 2002 - 13:09 #29
virker stadigvæk ikke. Den kommer med samme fejl
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:09 #30
og hvad hedder din form?
Avatar billede fun22 Nybegynder
12. oktober 2002 - 13:11 #31
form1
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:14 #32
hvis du har gjort det rigtigt skulle det ikke give fejl. Det kan ikke passe du får samme fejl efter den ændring der.
Avatar billede fun22 Nybegynder
12. oktober 2002 - 13:20 #33
Nu virker det hele som det skal, men jeg skal lige have noget på spm 2 inden jeg lukker.
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:34 #34
2)

uses inifiles;

//Gem
var
ini : TInifile;
i:integer;
mp3: TMusikFil;
begin
ini := Tinifile.create(extractfilepath(application.exename)+'settings.ini');

For i := 0 to listbox1.items.count-1 do
begin
mp3 := Pointer(Listbox1.Items.Objects[I]);
ini.writestring('LIST', inttostr(I), mp3.Filelocation);
end;
ini.free;
end;


//Load
var
ini:tinifile;
st:tstringlist;
i:integer;
mp3: TMusikFil;
begin
ini := Tinifile.create(extractfilepath(application.exename)+'settings.ini');
st:=tstringlist.Create;
ini.ReadSectionValues('LIST', st);
for i := 0 to st.count-1 do
begin
  mp3 := TMusikFil.create;
  mp3.filename := extractfilename(st.lines[I]);
  mp3.Filelocation :=st.lines[I];
  ListBox1.Items.AddObject(MP3.Filename, MP3);
end;
end;
Avatar billede dkn Nybegynder
12. oktober 2002 - 13:36 #35
det er ikke testet så du må jo sige hvis det giver problemer
Avatar billede fun22 Nybegynder
13. oktober 2002 - 11:12 #36
den eneste fejl der kommer er med disse linier:

  mp3.filename := extractfilename(st.lines[I]);
  mp3.Filelocation :=st.lines[I];

Den siger
[Error] Unit1.pas(150): Undeclared identifier: 'lines'
[Error] Unit1.pas(151): Undeclared identifier: 'lines'
Avatar billede spectre Nybegynder
13. oktober 2002 - 16:34 #37
mp3.filename := extractfilename(st[I]);
mp3.Filelocation :=st[I];
Avatar billede fun22 Nybegynder
13. oktober 2002 - 16:42 #38
Så siger jeg mange tak
Avatar billede fun22 Nybegynder
14. oktober 2002 - 13:56 #39
Nu er den ligepludselig begyndt at sige "der opstod en fejl under initialiseringen af MCI" Hvad er der galt der? Jeg har tjækket at koden er som den skal være og det vil jeg mener den er.
Avatar billede dkn Nybegynder
14. oktober 2002 - 13:59 #40
med mediaplayer er det meget vigtigt at man altid får den stoppet inden man forsøger at åbne en ny.

du kan bruge dette hver gang du skal skifte sang:

try
MediaPlayer1.stop;
except
end;
Avatar billede fun22 Nybegynder
14. oktober 2002 - 14:06 #41
det står der jo allerede under Procedure TForm1.PlaySelected;
Avatar billede dkn Nybegynder
14. oktober 2002 - 14:23 #42
ja det ved jeg.

prøv at sætte:

try
MediaPlayer1.close;
except
end;

ind ved siden af. Problemet er at jeg ikke ved om den når at udføre det før den forsøger at åbne en ny sang
Avatar billede fun22 Nybegynder
15. oktober 2002 - 09:59 #43
Det virker stadigvæk ikke... Eller hvor helt nøjagtigt skal det stå?
Avatar billede dkn Nybegynder
15. oktober 2002 - 10:07 #44
inden den forsøger at åbne en ny sang
Avatar billede fun22 Nybegynder
15. oktober 2002 - 10:13 #45
nu har jeg prøvet at indsætte det overalt men ligelidt hjælper det
Avatar billede dkn Nybegynder
15. oktober 2002 - 10:14 #46
virkede det ikke for dig i starten det hele?
Avatar billede fun22 Nybegynder
15. oktober 2002 - 10:15 #47
jo
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