CD Player Data i czas, Programowanie, Delphi


CDPLAYER

Pewnie większość z Was chciałaby napisać sobie prosty odtwarzacz płyt CD. Otóż w systemie Delphi można odtwarzać dźwięk Audio CD za pomocą komponentu TMediaPlayer, który znajduje się na zakładce System.
Odtwarzanie dźwięku za pomocą tego komponentu jest względnie proste. Wystarczy zmienić wartość właściwości DeviceType na dtCDAudio.

Najtrudniejszym do zrozumienia aspektem programowania urządzeń Audio CD są różne formaty czasu. Do zebrania informacji o danej ścieżce lub ustawienia bieżącej pozycji na określonej ścieżce należy skorzystać z czasu w formacie TMSF ( ścieżka-minuty-sekundy-ramki ). Wartości minut, sekund lub ramek będą ustawiane względem numeru ścieżki. Poniższy przykładowy kod formatuje łańcuch informujący o bieżącej pozycji wewnątrz bieżącej ścieżki:

var
Czas : Integer;
Piosenka : Integer;
Minuty : Integer;
Sekundy : Integer;
CzasStr : string;
begin
MediaPlayer1.TimeFormat := tfTMSF;
Czas := MediaPlayer1.Position;
Piosenka := mci_TMSF_Track(Czas);
Minuty := mci_TMSF_Minute(Czas);
Sekundy := mci_TMSF_Second(Czas);
CzasStr := Format('Czas piosenki: %2.2d:%2.2d', [Minuty.Sekundy]);
Label1.Caption := 'Piosenka: ' +IntToStr(Piosenka);
Label2.Caption := CzasStr;
end;


Na początku właściwość TimeFormat jest ustawiona na tfTMSF, następnie bieżąca pozycja jest zapisywana w zmiennej Czas. W kolejnych liniach kodu makropolecenia konwersji czasu ( należące do Windows ) - mci_TMSF_Track, mci_TMSF_Minute, mci_TMSF_Second - wydobywają z tej zmiennej różne wartości czasowe ( nr ścieżki, minuty, sekundy ). Makra te są zawarte w module MMSystem, dlatego, aby móc z nich skorzystać, trzeba dodać nazwę tego modułu do listy uses. Po wyodrębnieniu indywidualnych jednostek budowany jest łańcuch, który posłuży do wyświetlnia czasu ścieżki. Na samym końcu ścieżka i czas zostają wyświetlone przez 2 komponenty typu Label.


Do zebrania ogólnej informacji o płycie CD służy czas w formacie MSF ( minuty, sekundy, ramki ). Format ten może służyć do określenia bieżącej pozycji na płycie względem jej początku lub do ustawienia bieżącej pozycji np. na 30. minucie płyty niezależnie od tego, na której ścieżce wypadnie to miejsce. Poniższy przykład pokazuje w jaki sposób uzyskać i wyświetlić bieżącą pozycje na płycie ( liczoną w minutach i sekundach ):

var
Czas : Integer;
Minuty : Integer;
Sekundy : Integer;
CzasStr : string;
begin
MediaPlayer1.TimeFormat := tfMSF;
Czas := MediaPlayer1.Position;
Minuty := mci_MSF_Minute(Czas);
Sekundy := mci_MSF_Second(Czas);
CzasStr := Format('Całkowity czas płyty: %2.2d:%2.2d', [Minuty, Sekundy]);
Label3.Caption := CzasStr;
end;

DATA I CZAS

Gdy piszemy aplikację często chcemy by wyświetlała aktualną datę i godzinę. Istnieje kilka sposobów.

Najprostszy sposób (13:48:04, 02-12-22):
Label1.Caption:=TimeToStr(Time)+#13+DateToStr(Date);

Czasochłonny sposób (14:3:23, 31-3-2002):
var
rok,miesiac,dzien,godziny,minuty,sekundy,msekundy:word;
begin
decodedate(now,rok,miesiac,dzien);
decodetime(now,godziny,minuty,sekundy,msekundy);
Label1.Caption:=IntToStr(godziny)+':'+IntToStr(minuty)+':'+IntToStr(sekundy)+#13+ IntToStr(dzien)+'-'+IntToStr(miesiac)+'-'+IntToStr(rok);
end;

Sposób dający najwięcej możliwości:
Label1.Caption:=
FormatDateTime('dd mmmm yyyy', Now)+#13+ // 31 marzec 2002
FormatDateTime('dd mm yy', Now)+#13+ // 31 03 02
FormatDateTime('dd mm yyyy', Now)+#13+ // 31 03 2002
FormatDateTime('ddd dd mmmm yyyy', Now)+#13+ // N 31 marzec 2002
FormatDateTime('dddd dd mmmm yyyy', Now)+#13+ // niedziela 31 marzec 2002
FormatDateTime('dddd dd mm yyyy', Now)+#13+ // niedziela 31 03 2002
FormatDateTime('dddd', Now)+#13+ // niedziela
FormatDateTime('mmmm', Now)+#13+ // marzec
FormatDateTime('hh mm ss', Now); // 14 26 20
end;

Dzień tygodnia można uzyskać także w inny sposób:
var
Data: TDateTime;
dni: array[1..7] of string;
begin
dni[1] := 'Niedziela';
dni[2] := 'Poniedziałek';
dni[3] := 'Wtorek';
dni[4] := 'Środa';
dni[5] := 'Czwartek';
dni[6] := 'Piątek';
dni[7] := 'Sobota';
Data:=Date;
Label1.Caption:=dni[DayOfWeek(Data)];
end;

Sprawdzenie, czy rok jest przestępny. Rok jest przestępny gdy dzieli się przez 4 i (nie jest podzielny przez 100 lub jest podzielny przez 400) :)
function Przestepny(Rok: Integer): Boolean;
begin
Result := (Rok mod 4 = 0) and ((Rok mod 100 <> 0) or (Rok mod 400 =0));
end;

wykorzystanie:
if Przestepny(rok) then label1.caption:='Tak' else Label1.caption:='Nie'; // (rok) - np. 2000

A na koniec sprawdzimy ile dni i godzin minęło pomiędzy dwiema datami:
var
D1,D2:TDateTime;
begin
D1 := StrToDate('02-04-30'); // rok, miesiąc, dzień
D2 := StrToDate('02-04-1');
ShowMessage('Dni= '+FloatToStr(D1-D2)+' Godziny= '+FloatToStr((D1-D2)*24));



Wyszukiwarka

Podobne podstrony:
programowanie w delphi i c++ builder ii czesc MAYYMABSRUI5UEU3TMO5XUFRDPRBWZNIJRHDQIA
programuje w delphi i c builder (2)
8 TurboPascal Data i czas
Programuje w Delphi i C Builder II czesc
programuje w delphi i c builder cz 2
Programuje w Delphi i C Builder
(ebook www zlotemysli pl) programuje w delphi i c builder fragment 5PPAHMAWVNSHPBZMERMG65NYA5XFVPW3
programuje w delphi i c builder cz 2
(ebook www zlotemysli pl) programuje w delphi i c++ builder ii czesc fragment 5ZBFVK33H7G4Q3G26VRL
r-autorzy-04, Programowanie, ! Delphi, Delphi 6 - Vademecum profesjonalisty - Tom I
programuje w delphi i c builder
Programuję w Delphi i C Builder II cześć
Delphi - Wykłady, Programowanie, Delphi
Programuje w Delphi i C Builder II czesc
ebook programuje w delphi i c++ builder ii czesc YBXIEH6YNGVF6EM4EGLDTT7L4B4GDOKYTHBHO6A
Programuję w Delphi i C++ Builder Part I
Programuje w Delphi i C Builder II czesc
Canvas, Programowanie, Delphi

więcej podobnych podstron