亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unit1.pas

?? mp3 player example with delphi
?? PAS
字號:
{
Article: Your first MP3 Delphi player

http://delphi.about.com/library/weekly/aa112800a.htm

See how to build a full-blown mp3 player with Delphi
in just a few seconds. Even more: get the ID3 tag
information from a mp3 file and change it!

For the .zip file of this project click here.

}


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, MPlayer, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    mp3player: TMediaPlayer;
    mp3List: TListBox;
    btnOpenFolder: TBitBtn;
    GroupBox1: TGroupBox;
    edTitle: TEdit;
    edArtist: TEdit;
    edAlbum: TEdit;
    edYear: TEdit;
    edGenre: TEdit;
    edComment: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    txtFolder: TStaticText;
    Progress: TProgressBar;
    ProgresTimer: TTimer;
    procedure btnOpenFolderClick(Sender: TObject);
    procedure mp3ListClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ProgresTimerTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

type
  TID3Rec = packed record
    Tag     : array[0..2] of Char;
    Title,
    Artist,
    Comment,
    Album   : array[0..29] of Char;
    Year    : array[0..3] of Char;
    Genre   : Byte;
  end;

const
  MaxID3Genre=147;
  ID3Genre: array[0..MaxID3Genre] of string = (
    'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge',
    'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',
    'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska',
    'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient',
    'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical',
    'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel',
    'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative',
    'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic',
    'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk',
    'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta',
    'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',
    'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer',
    'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro',
    'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock',
    'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival',
    'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock',
    'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band',
    'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson',
    'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',
    'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba',
    'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle',
    'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall',
    'Goa', 'Drum & Bass', 'Club-House', 'Hardcore', 'Terror', 'Indie',
    'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat', 'Christian Gangsta Rap',
    'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian',
    'Christian Rock', 'Merengue', 'Salsa', 'Trash Metal', 'Anime', 'Jpop',
    'Synthpop'  {and probably more to come}
  );

implementation

uses ShellAPI, ShlObj;  // needed for the BrowseForFolder function

{$R *.DFM}

procedure FillID3TagInformation(mp3File:string; Title,Artist,Album,Year,Genre,Comment:TEdit);
var //fMP3: file of Byte;
    ID3 : TID3Rec;
    fmp3: TFileStream;
begin
  fmp3:=TFileStream.Create(mp3File, fmOpenRead);
  try
    fmp3.position:=fmp3.size-128;
    fmp3.Read(ID3,SizeOf(ID3));
  finally
    fmp3.free;
  end;

 { or the non Stream approach - as in ChangeID3Tag procedure
 try
   AssignFile(fMP3, mp3File);
   Reset(fMP3);
   try
     Seek(fMP3, FileSize(fMP3) - 128);
     BlockRead(fMP3, ID3, SizeOf(ID3));
   finally
   end;
 finally
   CloseFile(fMP3);
 end;
 }
 if ID3.Tag <> 'TAG' then begin
   Title.Text:='Wrong or no ID3 tag information';
   Artist.Text:='Wrong or no ID3 tag information';
   Album.Text:='Wrong or no ID3 tag information';
   Year.Text:='Wrong or no ID3 tag information';
   Genre.Text:='Wrong or no ID3 tag information';
   Comment.Text:='Wrong or no ID3 tag information';
 end else begin
   Title.Text:=ID3.Title;
   Artist.Text:=ID3.Artist;
   Album.Text:=ID3.Album;
   Year.Text:=ID3.Year;
   if ID3.Genre in [0..MaxID3Genre] then
     Genre.Text:=ID3Genre[ID3.Genre]
   else
     Genre.Text:=IntToStr(ID3.Genre);
   Comment.Text:=ID3.Comment
 end;
end;


procedure ChangeID3Tag(NewID3: TID3Rec; mp3FileName: string);
var
  fMP3: file of Byte;
  OldID3 : TID3Rec;
begin
  try
    AssignFile(fMP3, mp3FileName);
    Reset(fMP3);
    try
      Seek(fMP3, FileSize(fMP3) - 128);
      BlockRead(fMP3, OldID3, SizeOf(OldID3));
      if OldID3.Tag = 'TAG' then
        { Replace old tag }
        Seek(fMP3, FileSize(fMP3) - 128)
      else
        { Append tag to file because it doesn't exist }
        Seek(fMP3, FileSize(fMP3));
      BlockWrite(fMP3, NewID3, SizeOf(NewID3));
    finally
    end;
  finally
    CloseFile(fMP3);
  end;
end;


procedure FillMP3FileList(Folder: string; sl: TStrings);
var Rec : TSearchRec;
begin
 sl.Clear;
 if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then
  try
    repeat
      sl.Add(Rec.Name);
    until SysUtils.FindNext(Rec) <> 0;
  finally
    SysUtils.FindClose(Rec);
  end;
end;

function BrowseDialog(const Title: string; const Flag: integer): string;
var
  lpItemID : PItemIDList;
  BrowseInfo : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of char;
  TempPath : array[0..MAX_PATH] of char;
begin
  Result:='';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @DisplayName;
    lpszTitle := PChar(Title);
    ulFlags := Flag;
  end;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Result := IncludeTrailingBackslash(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;


procedure TForm1.btnOpenFolderClick(Sender: TObject);
var mp3Folder : string;
begin

 mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
 if mp3Folder = '' then Exit;

 txtFolder.Caption := mp3Folder;

 //fill the list box with mp3 files
 FillMP3FileList(mp3Folder, mp3List.Items);
end;

procedure TForm1.mp3ListClick(Sender: TObject);
 var mp3File:string;
begin
  if mp3List.Items.Count=0 then exit;
  mp3File := Concat(txtFolder.Caption, mp3List.Items.Strings[mp3List.ItemIndex]);
  if not FileExists(mp3File) then begin
   ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
   exit;
  end;

  FillID3TagInformation(mp3File, edTitle, edArtist, edAlbum, edYear, edGenre, edComment);

  Progress.Max:=0;

  mp3player.Close;
  mp3player.FileName:=mp3File;
  mp3player.Open;

  Progress.Max := mp3player.Length;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  txtFolder.Caption := ExtractFilePath(Application.ExeName);
  FillMP3FileList(txtFolder.Caption, mp3List.Items);
  Progress.Max:=0;
end;

procedure TForm1.ProgresTimerTimer(Sender: TObject);
begin
  if Progress.Max<>0 then
    Progress.Position := mp3player.Position;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情中文字幕| 伊人开心综合网| **欧美大码日韩| 日韩中文欧美在线| 成人精品免费网站| 欧美日韩国产大片| 国产精品视频线看| 美腿丝袜亚洲色图| 日本精品视频一区二区三区| 欧美人动与zoxxxx乱| 国产午夜精品在线观看| 亚洲chinese男男1069| 丰满亚洲少妇av| 精品免费国产一区二区三区四区| 亚洲品质自拍视频| 懂色一区二区三区免费观看| 日韩欧美激情一区| 视频精品一区二区| 在线观看av一区| 136国产福利精品导航| 国产一区二区h| 欧美电视剧在线观看完整版| 婷婷一区二区三区| 欧美三级电影精品| 一区二区三区四区在线免费观看| 成人黄色网址在线观看| 日韩一级黄色片| 精品免费视频一区二区| 免费成人在线播放| 337p亚洲精品色噜噜狠狠| 亚洲福利电影网| 欧美系列亚洲系列| 亚洲成a人v欧美综合天堂下载| 色欧美88888久久久久久影院| 国产精品传媒入口麻豆| 成人黄页毛片网站| 亚洲视频免费观看| 色综合咪咪久久| 亚洲三级在线看| 欧洲精品在线观看| 亚洲国产一区二区三区青草影视| 99久久国产综合色|国产精品| 亚洲精品第1页| 亚洲欧美日韩国产中文在线| 99re热视频精品| 亚洲日本护士毛茸茸| 色噜噜偷拍精品综合在线| 亚洲免费观看在线视频| 欧美自拍丝袜亚洲| 婷婷综合另类小说色区| 欧美电视剧在线看免费| 国产精一品亚洲二区在线视频| 久久精品人人爽人人爽| 高清成人免费视频| 一区二区三区不卡视频| 91精品啪在线观看国产60岁| 麻豆精品国产91久久久久久| 久久影音资源网| 99国产麻豆精品| 亚洲成a天堂v人片| 国产亚洲欧美日韩在线一区| 97久久精品人人爽人人爽蜜臀| 一区二区成人在线观看| 91精品国产色综合久久ai换脸| 精品一区二区在线播放| 国产精品麻豆久久久| 在线免费不卡电影| 免费人成在线不卡| 国产精品毛片无遮挡高清| 在线中文字幕不卡| 国产美女av一区二区三区| 国产精品不卡视频| 欧美一区二区三区电影| 成人黄色a**站在线观看| 亚洲观看高清完整版在线观看| 欧美xfplay| 99re在线视频这里只有精品| 蜜桃免费网站一区二区三区| 中文字幕av免费专区久久| 欧美系列亚洲系列| 久久不见久久见免费视频7| 国产片一区二区三区| 欧美日韩国产区一| 粉嫩高潮美女一区二区三区| 中文字幕制服丝袜成人av| 69久久夜色精品国产69蝌蚪网| 国产91综合一区在线观看| 性做久久久久久免费观看欧美| 国产欧美精品区一区二区三区 | 日韩亚洲电影在线| va亚洲va日韩不卡在线观看| 免费的成人av| 亚洲影院在线观看| 国产精品久久综合| 精品久久99ma| 欧美日韩在线播放三区| www.欧美.com| 国产中文字幕精品| 七七婷婷婷婷精品国产| 亚洲国产三级在线| 亚洲免费在线视频一区 二区| 久久精品亚洲精品国产欧美| 日韩精品一区二区三区视频播放| 欧美午夜理伦三级在线观看| 99精品视频在线观看| 高清成人在线观看| 国产乱码精品一品二品| 久久精品国产免费| 蜜臀精品一区二区三区在线观看| 亚洲成a人片综合在线| 一区二区三区日韩欧美精品| 亚洲欧洲www| 中文字幕第一区二区| 国产视频一区在线播放| 精品剧情v国产在线观看在线| 日韩一区二区电影网| 欧美夫妻性生活| 欧美一区二区视频网站| 日韩一级黄色片| 精品国产不卡一区二区三区| 精品国产露脸精彩对白 | 精品电影一区二区三区| 91精品国产福利在线观看| 337p亚洲精品色噜噜| 欧美一区二区精品久久911| 欧美肥妇bbw| 欧美日韩国产色站一区二区三区| 色综合久久久久久久久久久| 91丨porny丨国产| 欧美三级日韩在线| 5月丁香婷婷综合| 欧美va亚洲va| 中文字幕精品一区二区三区精品| 中文无字幕一区二区三区| 亚洲色图丝袜美腿| 亚洲一区在线观看免费观看电影高清 | 91成人国产精品| 欧美高清hd18日本| 久久综合五月天婷婷伊人| 日韩在线卡一卡二| 久久精品人人做人人综合| 亚洲欧洲精品成人久久奇米网| 亚洲自拍偷拍图区| 日本中文一区二区三区| 国产一区二区h| 在线一区二区三区四区五区| 欧美精品在线一区二区| www日韩大片| 亚洲免费高清视频在线| 蜜桃视频在线观看一区二区| 高清不卡一区二区在线| 欧美亚洲国产bt| 欧美大片拔萝卜| 亚洲欧美激情在线| 麻豆国产一区二区| 色综合网站在线| 欧美成人官网二区| 亚洲卡通欧美制服中文| 老司机精品视频线观看86| 91丨porny丨户外露出| 日韩欧美一二区| 亚洲美女视频在线| 精品一区二区久久久| 在线国产亚洲欧美| 国产拍欧美日韩视频二区| 亚洲最大成人综合| 国产成人av电影在线| 欧美久久免费观看| 亚洲欧美另类在线| 国产精品自拍av| 91精品麻豆日日躁夜夜躁| 中文字幕一区二区三中文字幕| 日本欧美一区二区在线观看| 91免费精品国自产拍在线不卡| 欧美成人精精品一区二区频| 亚洲美女在线一区| 国产a区久久久| 欧美大片国产精品| 丝袜诱惑亚洲看片| 在线视频一区二区三| 国产精品成人在线观看| 国产乱子伦视频一区二区三区| 4438亚洲最大| 亚洲.国产.中文慕字在线| 色诱视频网站一区| 国产精品乱人伦中文| 黑人巨大精品欧美一区| 欧美一区二区三区免费观看视频| 一区二区在线电影| 99精品国产热久久91蜜凸| 国产片一区二区| 国产成人午夜片在线观看高清观看| 欧美一级一区二区| 亚洲午夜激情av| 91成人在线观看喷潮| 中文字幕一区二区视频| 成人高清视频在线观看| 精品福利在线导航| 精品一区二区三区在线播放视频 | 国产福利91精品|