DSPACK 的基本问题(50分)

  • 主题发起人 主题发起人 syanet
  • 开始时间 开始时间
S

syanet

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如何转换左右声道
2、如何调整色彩
3、如何获得视频文件的大小?如何获得MP3文件的标题和作者?

请回答,给50分,已经是我的所有了。谢谢。
 
我只会改变mpg,dat格式的通道,因为它们用的是 'MPEG Audio Decoder'
procedure TMainForm.Set_MPEG_AUDIO(Add: boolean = true);
var
MpegAudioDecoder: IMpegAudioDecoder;
BaseFilter: IBaseFilter;
begin

if FilterGraph2_s <> nil then

FilterGraph2_s.FindFilterByName('MPEG Audio Decoder', BaseFilter);
if BaseFilter <> nil then

begin

BaseFilter.QueryInterface(IID_IMpegAudioDecoder, MpegAudioDecoder);
MpegAudioDecoder.put_DualMode(1);
MpegAudioDecoder := nil;
BaseFilter := nil;
// 0: := 'MERGE';
// 1: := 'LEFT';
// 2: := 'RIGHT';
end;

end;

end;
 
调整色彩你用TDSVideoWindowEx2好了
procedure TMainForm.Media_SetColorValues;
begin

DSV.ColorControl.RestoreDefault;
DSV.ColorControl.Brightness := TrackBar1.Position;
DSV.ColorControl.Contrast := TrackBar2.Position;
DSV.ColorControl.Hue := TrackBar3.Position;
DSV.ColorControl.Saturation := TrackBar4.Position;
DSV.DigitalZoom := TrackBar5.Position;
Label1.Caption := '亮度Brightness(' + inttostr(TrackBar1.Position) + ')';
Label2.Caption := '对比Contrast(' + inttostr(TrackBar2.Position) + ')';
Label3.Caption := '色彩Hue(' + inttostr(TrackBar3.Position) + ')';
Label4.Caption := '饱和Saturation(' + inttostr(TrackBar4.Position) + ')';
Label5.Caption := '放大Zoom(' + inttostr(TrackBar5.Position) + ')';
end;


得到尺寸,有好多方法啊,不一定是正确的呢
懒得改了,你参考我原来的代码吧。

function TMainForm.Media_Get_VideoSize03(var w, h: Integer): bool;
var
MpegVideoDecoder: IMpegVideoDecoder;
bf: IBaseFilter;
pSeqHdrInfo: TSeqHdrInfo;
begin

Result := false;
w := 0;
h := 0;
if FilterGraph2_s <> nil then

if S_OK = FilterGraph2_s.FindFilterByName('MPEG Video Decoder', bf) then

begin

bf.QueryInterface(IID_IMpegVideoDecoder, MpegVideoDecoder);
MpegVideoDecoder.get_SequenceHeader(pSeqHdrInfo);
w := pSeqHdrInfo.Width;
h := pSeqHdrInfo.Height;
MpegVideoDecoder := nil;
Result := (w > 0) and (h > 0);
end;

Main_WH03.Caption := inttostr(w) + '/' + inttostr(h) + ' ' + Main_WH03.Hint;
end;


function TMainForm.Media_Get_VideoSize05(var w, h: Integer): bool;
//dvd
var
wh: TDVDVideoAttributes;
wz, hz: Integer;
s: string;
begin

w := 0;
h := 0;
Result := false;
if DVDInfo2 <> nil then

begin

DVDInfo2.GetCurrentVideoAttributes(wh);
wz := wh.ulAspectX;
hz := wh.ulAspectY;
w := wh.ulSourceResolutionX;
h := wh.ulSourceResolutionY;
Result := (w > 0) and (h > 0);
h := round(w / wz * hz);
s := inttostr(w) + '/' + inttostr(h) + '[' + inttostr(wz) +
'/' + inttostr(hz) + ']' + ' ' + Main_WH05.Hint;
if s <> Main_WH05.Caption then

Main_WH05.Caption := s;
end;

Main_WH05.Visible := Result;
end;


function TMainForm.Media_Get_VideoSize: bool;
begin

Main_WH01.Checked := false;
Main_WH02.Checked := false;
Main_WH03.Checked := false;
Main_WH04.Checked := false;
v_ok1 := Media_Get_VideoSize01(V_W01, V_H01);
v_ok2 := Media_Get_VideoSize02(V_W02, V_H02);
v_ok3 := Media_Get_VideoSize03(V_W03, V_H03);
v_ok5 := Media_Get_VideoSize05(V_W05, V_H05);
Main_WH01.Visible := v_ok1;
Main_WH02.Visible := v_ok2;
Main_WH03.Visible := v_ok3;
Main_WH04.Visible := (ShockwaveFlash1 = nil);
Result := (v_ok1 or v_ok2 or v_ok3);
n1.Visible := Result;
if ShockwaveFlash1 <> nil then

Main_WH01.Checked := true
else
if v_ok5 then

Main_WH05.Checked := true
else
if v_ok3 then

Main_WH03.Checked := true
else
if v_ok4 then

Main_WH04.Checked := true
else
if v_ok2 then

Main_WH02.Checked := true
else
if v_ok1 then

Main_WH01.Checked := true;
TV_TS(n4.Tag - 1);
end;


function TMainForm.Media_Get_VideoSize01(var w, h: Integer): bool;
begin

Result := false;
w := 0;
h := 0;
if DSV.FilterGraph = FilterGraph then

begin

DSV.ClearBack;
w := DSV.VideoWidth;
//有可能 不正确,我修改了DSPack.pas的代码,你在DSPack.pas中查VideoWidth就会明白
h := DSV.VideoHeight;
Result := (w > 0) and (h > 0);
end;

Main_WH01.Caption := inttostr(w) + '/' + inttostr(h) + ' [TDSVideo]';

if ShockwaveFlash1 <> nil then

begin

w := round(strtofloat(ShockwaveFlash1.TGetProperty('/', 8)));
//宽度:
h := round(strtofloat(ShockwaveFlash1.TGetProperty('/', 9)));
//高度
// w:=round(w*(h+Panel_Swf.Height)/h);
// h:=h+Panel_Swf.Height;
Result := (w > 0) and (h > 0);
Main_WH01.Caption := inttostr(w) + '/' + inttostr(h) + ' Swf';
end;

end;


function TMainForm.Media_Get_VideoSize02(var w, h: Integer): bool;
var
BasicVideo2: IBasicVideo2;
begin

Result := false;
w := 0;
h := 0;
try
if S_OK = FilterGraph.QueryInterface(IID_IBasicVideo2, BasicVideo2) then

begin

BasicVideo2.SetDefaultSourcePosition;
BasicVideo2.GetVideoSize(w, h);
// BasicVideo2.GetPreferredAspectRatio(w, h);
Result := (w > 0) and (h > 0);
end;

finally
BasicVideo2 := nil;
Main_WH02.Caption := inttostr(w) + '/' + inttostr(h) + ' ' +
Main_WH02.Hint;
end;

end;

还有
procedure TMainForm.FilterGraphGraphVideoSizeChanged(sender: TObject;
Width, height: Word);
begin

V_W04 := Width;
V_h04 := height;
v_ok4 := (V_W04 > 0) and (V_h04 > 0);
Main_WH04.Caption := inttostr(V_W04) + '/' + inttostr(V_h04) + ' ' +
Main_WH04.Hint;
Main_WH04.Visible := v_ok4;
end;
 
看错了"视频文件的大小"?
function FSize(FileName: string): LongInt;
var
F: File;
begin

AssignFile(F, FileName);
reset(F,1);
Result := FileSize(F);
CloseFile(F);
end;


function GetFileSize(const FileName: string): LongInt;
var
SearchRec: TSearchRec;
begin

try
if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then

Result := SearchRec.Size
else
Result := -1;
finally
SysUtils.FindClose(SearchRec);
end;

end;
 
ID3v1的控件
{ *************************************************************************** }
{ }
{ Audio Tools Library (Freeware) }
{ Class TID3v1 - for manipulating with ID3v1 tags }
{ }
{ Copyright (c) 2001 by Jurgen Faul }
{ E-mail: jfaul@gmx.de }
{ http://jfaul.de/atl }
{ }
{ Version 1.0 (25 July 2001) }
{ - Full support for ID3v1.0 &amp;
ID3v1.1 tags (read/write) }
{ }
{ *************************************************************************** }

unit ID3v1;

interface

uses
Classes, SysUtils;

const
MAX_MUSIC_GENRES = 148;
{ Max. number of music genres }
DEFAULT_GENRE = 255;
{ Index for default genre }

{ Used with VersionID property }
TAG_VERSION_1_0 = 1;
{ Index for ID3v1.0 tag }
TAG_VERSION_1_1 = 2;
{ Index for ID3v1.1 tag }

var
MusicGenre: array [0..MAX_MUSIC_GENRES - 1] of string;
{ Genre names }

type
{ Used in TID3v1 class }
String04 = string[4];
{ String with max. 4 symbols }
String30 = string[30];
{ String with max. 30 symbols }

{ Class TID3v1 }
TID3v1 = class(TObject)
private
{ Private declarations }
FExists: Boolean;
FVersionID: Byte;
FTitle: String30;
FArtist: String30;
FAlbum: String30;
FYear: String04;
FComment: String30;
FTrack: Byte;
FGenreID: Byte;
procedure FSetTitle(const NewTitle: String30);
procedure FSetArtist(const NewArtist: String30);
procedure FSetAlbum(const NewAlbum: String30);
procedure FSetYear(const NewYear: String04);
procedure FSetComment(const NewComment: String30);
procedure FSetTrack(const NewTrack: Byte);
procedure FSetGenreID(const NewGenreID: Byte);
function FGetGenre: string;
public
{ Public declarations }
constructor Create;
{ Create object }
procedure ResetData;
{ Reset all data }
function ReadFromFile(const FileName: string): Boolean;
{ Load tag }
function RemoveFromFile(const FileName: string): Boolean;
{ Delete tag }
function SaveToFile(const FileName: string): Boolean;
{ Save tag }
property Exists: Boolean read FExists;
{ True if tag found }
property VersionID: Byte read FVersionID;
{ Version code }
property Title: String30 read FTitle write FSetTitle;
{ Song title }
property Artist: String30 read FArtist write FSetArtist;
{ Artist name }
property Album: String30 read FAlbum write FSetAlbum;
{ Album name }
property Year: String04 read FYear write FSetYear;
{ Year }
property Comment: String30 read FComment write FSetComment;
{ Comment }
property Track: Byte read FTrack write FSetTrack;
{ Track number }
property GenreID: Byte read FGenreID write FSetGenreID;
{ Genre code }
property Genre: string read FGetGenre;
{ Genre name }
end;


implementation

type
{ Real structure of ID3v1 tag }
TagRecord = record
Header: array [1..3] of Char;
{ Tag header - must be "TAG" }
Title: array [1..30] of Char;
{ Title data }
Artist: array [1..30] of Char;
{ Artist data }
Album: array [1..30] of Char;
{ Album data }
Year: array [1..4] of Char;
{ Year data }
Comment: array [1..30] of Char;
{ Comment data }
Genre: Byte;
{ Genre data }
end;


{ ********************* Auxiliary functions &amp;
procedures ******************** }

function ReadTag(const FileName: string;
var TagData: TagRecord): Boolean;
var
SourceFile: file;
begin

try
Result := true;
{ Set read-access and open file }
AssignFile(SourceFile, FileName);
FileMode := 0;
Reset(SourceFile, 1);
{ Read tag }
Seek(SourceFile, FileSize(SourceFile) - 128);
BlockRead(SourceFile, TagData, 128);
CloseFile(SourceFile);
except
{ Error }
Result := false;
end;

end;


{ --------------------------------------------------------------------------- }

function RemoveTag(const FileName: string): Boolean;
var
SourceFile: file;
begin

try
Result := true;
{ Allow write-access and open file }
FileSetAttr(FileName, 0);
AssignFile(SourceFile, FileName);
FileMode := 2;
Reset(SourceFile, 1);
{ Delete tag }
Seek(SourceFile, FileSize(SourceFile) - 128);
Truncate(SourceFile);
CloseFile(SourceFile);
except
{ Error }
Result := false;
end;

end;


{ --------------------------------------------------------------------------- }

function SaveTag(const FileName: string;
TagData: TagRecord): Boolean;
var
SourceFile: file;
begin

try
Result := true;
{ Allow write-access and open file }
FileSetAttr(FileName, 0);
AssignFile(SourceFile, FileName);
FileMode := 2;
Reset(SourceFile, 1);
{ Write tag }
Seek(SourceFile, FileSize(SourceFile));
BlockWrite(SourceFile, TagData, SizeOf(TagData));
CloseFile(SourceFile);
except
{ Error }
Result := false;
end;

end;


{ --------------------------------------------------------------------------- }

function GetTagVersion(const TagData: TagRecord): Byte;
begin

Result := TAG_VERSION_1_0;
{ Terms for ID3v1.1 }
if ((TagData.Comment[29] = #0) and (TagData.Comment[30] <> #0)) or
((TagData.Comment[29] = #32) and (TagData.Comment[30] <> #32)) then

Result := TAG_VERSION_1_1;
end;


{ ********************** Private functions &amp;
procedures ********************* }

procedure TID3v1.FSetTitle(const NewTitle: String30);
begin

FTitle := TrimRight(NewTitle);
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetArtist(const NewArtist: String30);
begin

FArtist := TrimRight(NewArtist);
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetAlbum(const NewAlbum: String30);
begin

FAlbum := TrimRight(NewAlbum);
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetYear(const NewYear: String04);
begin

FYear := TrimRight(NewYear);
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetComment(const NewComment: String30);
begin

FComment := TrimRight(NewComment);
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetTrack(const NewTrack: Byte);
begin

FTrack := NewTrack;
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetGenreID(const NewGenreID: Byte);
begin

FGenreID := NewGenreID;
end;


{ --------------------------------------------------------------------------- }

function TID3v1.FGetGenre: string;
begin

Result := '';
{ Return an empty string if the current GenreID is not valid }
if FGenreID in [0..MAX_MUSIC_GENRES - 1] then
Result := MusicGenre[FGenreID];
end;


{ ********************** Public functions &amp;
procedures ********************** }

constructor TID3v1.Create;
begin

inherited;
ResetData;
end;


{ --------------------------------------------------------------------------- }

procedure TID3v1.ResetData;
begin

FExists := false;
FVersionID := TAG_VERSION_1_0;
FTitle := '';
FArtist := '';
FAlbum := '';
FYear := '';
FComment := '';
FTrack := 0;
FGenreID := DEFAULT_GENRE;
end;


{ --------------------------------------------------------------------------- }

function TID3v1.ReadFromFile(const FileName: string): Boolean;
var
TagData: TagRecord;
begin

{ Reset and load tag data from file to variable }
ResetData;
Result := ReadTag(FileName, TagData);
{ Process data if loaded and tag header OK }
if (Result) and (TagData.Header = 'TAG') then

begin

FExists := true;
FVersionID := GetTagVersion(TagData);
{ Fill properties with tag data }
FTitle := TrimRight(TagData.Title);
FArtist := TrimRight(TagData.Artist);
FAlbum := TrimRight(TagData.Album);
FYear := TrimRight(TagData.Year);
if FVersionID = TAG_VERSION_1_0 then

FComment := TrimRight(TagData.Comment)
else

begin

FComment := TrimRight(Copy(TagData.Comment, 1, 28));
FTrack := Ord(TagData.Comment[30]);
end;

FGenreID := TagData.Genre;
end;

end;


{ --------------------------------------------------------------------------- }

function TID3v1.RemoveFromFile(const FileName: string): Boolean;
var
TagData: TagRecord;
begin

{ Find tag }
Result := ReadTag(FileName, TagData);
{ Delete tag if loaded and tag header OK }
if (Result) and (TagData.Header = 'TAG') then
Result := RemoveTag(FileName);
end;


{ --------------------------------------------------------------------------- }

function TID3v1.SaveToFile(const FileName: string): Boolean;
var
TagData: TagRecord;
begin

{ Prepare tag record }
FillChar(TagData, SizeOf(TagData), 0);
TagData.Header := 'TAG';
Move(FTitle[1], TagData.Title, Length(FTitle));
Move(FArtist[1], TagData.Artist, Length(FArtist));
Move(FAlbum[1], TagData.Album, Length(FAlbum));
Move(FYear[1], TagData.Year, Length(FYear));
Move(FComment[1], TagData.Comment, Length(FComment));
if FTrack > 0 then

begin

TagData.Comment[29] := #0;
TagData.Comment[30] := Chr(FTrack);
end;

TagData.Genre := FGenreID;
{ Delete old tag and write new tag }
Result := (RemoveFromFile(FileName)) and (SaveTag(FileName, TagData));
end;


{ ************************** Initialize music genres ************************ }

initialization
begin

{ Standard genres }
MusicGenre[0] := 'Blues';
MusicGenre[1] := 'Classic Rock';
MusicGenre[2] := 'Country';
MusicGenre[3] := 'Dance';
MusicGenre[4] := 'Disco';
MusicGenre[5] := 'Funk';
MusicGenre[6] := 'Grunge';
MusicGenre[7] := 'Hip-Hop';
MusicGenre[8] := 'Jazz';
MusicGenre[9] := 'Metal';
MusicGenre[10] := 'New Age';
MusicGenre[11] := 'Oldies';
MusicGenre[12] := 'Other';
MusicGenre[13] := 'Pop';
MusicGenre[14] := 'R&amp;B';
MusicGenre[15] := 'Rap';
MusicGenre[16] := 'Reggae';
MusicGenre[17] := 'Rock';
MusicGenre[18] := 'Techno';
MusicGenre[19] := 'Industrial';
MusicGenre[20] := 'Alternative';
MusicGenre[21] := 'Ska';
MusicGenre[22] := 'Death Metal';
MusicGenre[23] := 'Pranks';
MusicGenre[24] := 'Soundtrack';
MusicGenre[25] := 'Euro-Techno';
MusicGenre[26] := 'Ambient';
MusicGenre[27] := 'Trip-Hop';
MusicGenre[28] := 'Vocal';
MusicGenre[29] := 'Jazz+Funk';
MusicGenre[30] := 'Fusion';
MusicGenre[31] := 'Trance';
MusicGenre[32] := 'Classical';
MusicGenre[33] := 'Instrumental';
MusicGenre[34] := 'Acid';
MusicGenre[35] := 'House';
MusicGenre[36] := 'Game';
MusicGenre[37] := 'Sound Clip';
MusicGenre[38] := 'Gospel';
MusicGenre[39] := 'Noise';
MusicGenre[40] := 'AlternRock';
MusicGenre[41] := 'Bass';
MusicGenre[42] := 'Soul';
MusicGenre[43] := 'Punk';
MusicGenre[44] := 'Space';
MusicGenre[45] := 'Meditative';
MusicGenre[46] := 'Instrumental Pop';
MusicGenre[47] := 'Instrumental Rock';
MusicGenre[48] := 'Ethnic';
MusicGenre[49] := 'Gothic';
MusicGenre[50] := 'Darkwave';
MusicGenre[51] := 'Techno-Industrial';
MusicGenre[52] := 'Electronic';
MusicGenre[53] := 'Pop-Folk';
MusicGenre[54] := 'Eurodance';
MusicGenre[55] := 'Dream';
MusicGenre[56] := 'Southern Rock';
MusicGenre[57] := 'Comedy';
MusicGenre[58] := 'Cult';
MusicGenre[59] := 'Gangsta';
MusicGenre[60] := 'Top 40';
MusicGenre[61] := 'Christian Rap';
MusicGenre[62] := 'Pop/Funk';
MusicGenre[63] := 'Jungle';
MusicGenre[64] := 'Native American';
MusicGenre[65] := 'Cabaret';
MusicGenre[66] := 'New Wave';
MusicGenre[67] := 'Psychadelic';
MusicGenre[68] := 'Rave';
MusicGenre[69] := 'Showtunes';
MusicGenre[70] := 'Trailer';
MusicGenre[71] := 'Lo-Fi';
MusicGenre[72] := 'Tribal';
MusicGenre[73] := 'Acid Punk';
MusicGenre[74] := 'Acid Jazz';
MusicGenre[75] := 'Polka';
MusicGenre[76] := 'Retro';
MusicGenre[77] := 'Musical';
MusicGenre[78] := 'Rock &amp;
Roll';
MusicGenre[79] := 'Hard Rock';
{ Extended genres }
MusicGenre[80] := 'Folk';
MusicGenre[81] := 'Folk-Rock';
MusicGenre[82] := 'National Folk';
MusicGenre[83] := 'Swing';
MusicGenre[84] := 'Fast Fusion';
MusicGenre[85] := 'Bebob';
MusicGenre[86] := 'Latin';
MusicGenre[87] := 'Revival';
MusicGenre[88] := 'Celtic';
MusicGenre[89] := 'Bluegrass';
MusicGenre[90] := 'Avantgarde';
MusicGenre[91] := 'Gothic Rock';
MusicGenre[92] := 'Progessive Rock';
MusicGenre[93] := 'Psychedelic Rock';
MusicGenre[94] := 'Symphonic Rock';
MusicGenre[95] := 'Slow Rock';
MusicGenre[96] := 'Big Band';
MusicGenre[97] := 'Chorus';
MusicGenre[98] := 'Easy Listening';
MusicGenre[99] := 'Acoustic';
MusicGenre[100]:= 'Humour';
MusicGenre[101]:= 'Speech';
MusicGenre[102]:= 'Chanson';
MusicGenre[103]:= 'Opera';
MusicGenre[104]:= 'Chamber Music';
MusicGenre[105]:= 'Sonata';
MusicGenre[106]:= 'Symphony';
MusicGenre[107]:= 'Booty Bass';
MusicGenre[108]:= 'Primus';
MusicGenre[109]:= 'Porn Groove';
MusicGenre[110]:= 'Satire';
MusicGenre[111]:= 'Slow Jam';
MusicGenre[112]:= 'Club';
MusicGenre[113]:= 'Tango';
MusicGenre[114]:= 'Samba';
MusicGenre[115]:= 'Folklore';
MusicGenre[116]:= 'Ballad';
MusicGenre[117]:= 'Power Ballad';
MusicGenre[118]:= 'Rhythmic Soul';
MusicGenre[119]:= 'Freestyle';
MusicGenre[120]:= 'Duet';
MusicGenre[121]:= 'Punk Rock';
MusicGenre[122]:= 'Drum Solo';
MusicGenre[123]:= 'A capella';
MusicGenre[124]:= 'Euro-House';
MusicGenre[125]:= 'Dance Hall';
MusicGenre[126]:= 'Goa';
MusicGenre[127]:= 'Drum &amp;
Bass';
MusicGenre[128]:= 'Club-House';
MusicGenre[129]:= 'Hardcore';
MusicGenre[130]:= 'Terror';
MusicGenre[131]:= 'Indie';
MusicGenre[132]:= 'BritPop';
MusicGenre[133]:= 'Negerpunk';
MusicGenre[134]:= 'Polsk Punk';
MusicGenre[135]:= 'Beat';
MusicGenre[136]:= 'Christian Gangsta Rap';
MusicGenre[137]:= 'Heavy Metal';
MusicGenre[138]:= 'Black Metal';
MusicGenre[139]:= 'Crossover';
MusicGenre[140]:= 'Contemporary Christian';
MusicGenre[141]:= 'Christian Rock';
MusicGenre[142]:= 'Merengue';
MusicGenre[143]:= 'Salsa';
MusicGenre[144]:= 'Trash Metal';
MusicGenre[145]:= 'Anime';
MusicGenre[146]:= 'JPop';
MusicGenre[147]:= 'Synthpop';
end;


end.

---------------
procedure TMainForm.FormCreate(Sender: TObject);
var
Iterator: Integer;
begin

{ Create object }
FileTag := TID3v1.Create;
{ Fill and initialize genres }
GenreComboBox.Items.Add('');
for Iterator := 0 to MAX_MUSIC_GENRES - 1do

GenreComboBox.Items.Add(MusicGenre[Iterator]);
{ Reset }
ClearAll;
end;


if FileTag.ReadFromFile(FileName) then

if FileTag.Exists then

begin

{ Fill captions }
TagExistsValue.Text := 'Yes';
if FileTag.VersionID = TAG_VERSION_1_0 then

TagVersionValue.Text := '1.0'
else

TagVersionValue.Text := '1.1';
TitleEdit.Text := FileTag.Title;
ArtistEdit.Text := FileTag.Artist;
AlbumEdit.Text := FileTag.Album;
TrackEdit.Text := IntToStr(FileTag.Track);
YearEdit.Text := FileTag.Year;
if FileTag.GenreID < MAX_MUSIC_GENRES then

GenreComboBox.ItemIndex := FileTag.GenreID + 1;
CommentEdit.Text := FileTag.Comment;

end;
 
和演示程序的代码很类似,不过我不知道怎么调整后没有反映。我用的是98,试了很多次了,色彩没变。
 
接受答案,虽然还是不能用。[:(]
 
后退
顶部