Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Вниз
Нужна помощь Найти похожие ветки
← →
Шишкин Илья (2003-09-18 10:32) [0]Уже целые сутки ломаю голову. Не понимаю в чём ошибка.
type
TCDPlayer=class(TObject)
Track:string; //Почему нельзя работать с этими переменными?
Drive:string; //Почему нельзя работать с этими переменными?
Volume:string; //Почему нельзя работать с этими переменными?
function Play(CD:string;Track:integer):boolean;
function GetVolume:integer;
function SetVolume(Volume:integer):boolean;
function Stop:boolean;
function GetLength:integer;
function GetPos:integer;
function IsPlaying:boolean;
function IsPaused:boolean;
function Pause:boolean;
function Resume:boolean;
end;
function TCDPlayer.IsPlaying:boolean;
begin
if BASS_ChannelIsActive(CDChannel)=BASS_ACTIVE_PLAYING then Result:=true else Result:=false;
end;
function TCDPlayer.IsPaused:boolean;
begin
if BASS_ChannelIsActive(CDChannel)=BASS_ACTIVE_PAUSED then Result:=true else Result:=false;
end;
function TCDPlayer.Play(CD:string;Track:integer):boolean;
begin
if Length(CD)<2 then
begin
Result:=false;
exit;
end;
if CD[2]<>":" then
begin
Result:=false;
exit;
end;
if BASS_CDInit(PChar(CD),0) then
begin
if BASS_CDInDrive then
begin
if BASS_CDPlay(Track,false,false) then
begin
Result:=true;
CDPlayer.Track:=IntToStr(Track); //Здесь происходит ошибка
CDPlayer.Drive:=CD; //Здесь происходит ошибка
CDPlayer.Volume:="100"; //Здесь происходит ошибка
end;
end
else
begin
Result:=false;
Bass_CDFree;
exit;
end;
end
else
begin
ShowMessage("ERROR");
Result:=false;
Bass_CDFree;
exit;
end;
end;
function TCDPlayer.GetVolume:integer;
begin
Result:=StrToIntDef(CDPlayer.Volume,0);
end;
function TCDPlayer.Pause:boolean;
begin
Result:=BASS_ChannelPause(CDChannel);
end;
function TCDPlayer.Resume:boolean;
begin
Result:=BASS_ChannelResume(CDChannel);
end;
function TCDPlayer.SetVolume(Volume:integer):boolean;
begin
Result:=BASS_ChannelSetAttributes(CDChannel,-1,Volume,-101);
if Result then CDPlayer.Volume:=IntToStr(Volume);
end;
function TCDPlayer.Stop:boolean;
begin
try
BASS_CDFree;
except
Result:=false;
exit;
end;
Result:=true;
end;
function TCdPlayer.GetLength:integer;
begin
Result:=Round(BASS_CDGetTrackLength(StrToInt(CDPlayer.Track))/1000);
end;
function TCdPlayer.GetPos:integer;
begin
Result:=Round(BASS_ChannelBytes2Seconds(CDChannel,BASS_ChannelGetPosition(CDChannel)));
end;
---------------------------------------------------------
var
CDPlayer:TCDPlayer;
Вызываю функцию так:CDPlayer.Play("E:",1);
← →
Hooch (2003-09-18 10:38) [1]
CDPlayer.Track:=IntToStr(Track); //Здесь происходит ошибка
CDPlayer.Drive:=CD; //Здесь происходит ошибка
CDPlayer.Volume:="100"; //Здесь происходит ошибка
CDPlayer тут зачем ???
← →
Плохиш_ (2003-09-18 10:48) [2]>Шишкин Илья © (18.09.03 10:32)
А ошибка случаем не "Неизвестная переменная CDPlayer"?
1. Замени на
self.Track:=IntToSt(Track);
self.Drive:=CD;
self.Volume:="100";
2. Никогда, я повторяю НИКОГДА не используй в объектах глобальные переменные
← →
Юрий Федоров (2003-09-18 11:08) [3]Даже без Self, просто
Drive:=CD;
Кстати, поля (Track, Drive) крайне желательно держать в секции private
>>2. Никогда, я повторяю НИКОГДА не используй в объектах >>глобальные переменные
Бывают разные случаи, я бы не был столь категоричен :)))
← →
Murad (2003-09-18 11:31) [4]2Плохиш_
>> Никогда, я повторяю НИКОГДА не используй в объектах
глобальные переменные
Иногда их приходится использлвать, для реализации функциональности похожей на статические переменные в C++
(Т.Е. когда нужно, чтобы когда нужно, чтобы значение какого-то поля выставлялось одновременно всем экземплярам класса, а в Паскале class method есть, а class field нету :(( - через глоб. переменные) Да и вообще, никогда не говори никогда :)))
← →
Murad (2003-09-18 11:32) [5]Пардон, в начале фразы я что-то запутался :))) но думаю суть понятна
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c