HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Audio CD-n lévő zeneszámok adatainak lekérdezése


Példaprogram letöltése

13542 bájt

Egy viszonylag egyszerű megoldással lekérdezhetjük a CD meghajtóban lévő lemez legfontosabb adatait (track-ek száma, hossza, stb.). Hogy hogyan, azt megtudhatjuk az alábbi példából!
A mellékelt példaprogram megnyitása előtt a TCDTracks.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A szükséges információkat az mciSendString függvénnyel kérdezzük le. A függvény visszatérési értéke 0, ha sikerült a kívánt adatot lekérdezni, egyébként a hibakódot kapjuk meg. A függvény deklarációja így néz ki:
function mciSendString(lpstrCommand, lpstrReturnString: PChar; uReturnLength: UINT; hWndCallback: HWND): MCIERROR;
Az lpstrCommand paraméter a parancs sztring. Az lpstrReturnString-ben kapjuk meg a lekérdezés eredményét (ha van ilyen). Az uReturnLength meghatározza az eredmény sztring maximális hosszát. Ennek annyinak kell lennie, mint az lpstrReturnString buffer hossza (pl. buff:array[0..127] of char esetén 128-nak). A hWndCallback paramétert jelen esetben nem használjuk, ezért mindig 0.

Mivel ezt a függvényt elég gyakran meg kell majd hívni, ezért létrehozunk egy saját függvényt, ami azért jó, mert így az eredmény sztringet mindjárt vissza is kaphatjuk, és a függvény paraméterezésével sem kell bajlódnunk:
function MciSendStr(cmdstr:string):string;
var retstr:array[0..255] of char;
begin
  mciSendString(PChar(cmdstr), retstr, 255, 0);
  result:=retstr;
end;
Az adatok kiolvasását a Refresh eljárás fogja végezni. Ez mindegyik property-nek átadja a megfelelő értéket. Mivel azt előre nem tudhatjuk, hogy egy CD lemezen mennyi track található, ezért a track-ek adatait egy TCollection-ból származó osztályban tároljuk (TCDTracksList).
procedure TCDTracks.Refresh;
var t:integer;
begin
Első lépésben küldenünk kell egy 'open cdaudio' parancsot. Ha ezt nem tesszük meg, akkor előfordulhat, hogy nem tudjuk a megfelelő információt lekérdezni.
  if mciSendString('open cdaudio', NIL, 0, 0)=0 then
  begin;
Ha sikerült a művelet, akkor a függvény visszatérési értéke 0. Ekkor töröljük a track-ek adatait, majd sorban elkezdjük lekérdezni az információkat.
    FTrackList.Clear;
    FCurrentTrack:=StrToInt('0'+MciSendStr('status cdaudio current track'));
    FLength:=MciSendStr('status cdaudio length');
    FMediaPresent:=(MciSendStr('status cdaudio media present')='true');
    FMode:=MciSendStr('status cdaudio mode');
    FNumberOfTracks:=StrToInt('0'+MciSendStr('status cdaudio number of tracks'));
    FPosition:=MciSendStr('status cdaudio position');
    FReady:=(MciSendStr('status cdaudio ready')='true');
    FStartPosition:=MciSendStr('status cdaudio start position');
    FTimeFormat:=MciSendStr('status cdaudio time format');
Ha az alapinformációk beolvasását elvégeztük, akkor kezdődhet a track-ek adatainak beolvasása:
    t:=1;
    while t<=FNumberOfTracks do begin
      FTrackList.Add;
      FTrackList[t-1].FType:=MciSendStr('status cdaudio type track '+IntToStr(t));
      FTrackList[t-1].FPosition:=MciSendStr('status cdaudio position track '+IntToStr(t));
      FTrackList[t-1].FLength:=MciSendStr('status cdaudio length track '+IntToStr(t));
      inc(t);
    end;
Ha minden információt megkaptunk, amire szükségünk volt, akkor küldünk egy "close cdaudio" parancsot, amivel felszabadítjuk a cd meghajtót. Ha ezt nem tesszük meg, akkor más programok nem fognak hozzáférni a CD meghajtóhoz, pl. egy CD lejátszó programmal nem tudjuk a CD-t lejátszani!
    mciSendString('close cdaudio', NIL, 0, 0);
  end else begin
    FMode:='unknown';
    FReady:=false;
  end;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 254. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |