![]() |
|
|
#1
|
|||
|
|||
|
Подскажите пожалуйста как правильно создать методы класса для управления свойствами объектов:
Код:
unit CD;
interface
Uses
ComCtrls, StdCtrls, FileCtrl, SysUtils, Classes, forms,ExtCtrls,Buttons;
Type
TSDirectory = class
procedure getDir(Memo:Tmemo);
end;
TCD = Class
end;
function SetTrackBar(TrackBar:TTrackBar;Memo:Tmemo):string;
function PreTrack(TrackBar:TTrackBar;Memo:Tmemo):string;
function NextTrack(TrackBar:TTrackBar;Memo:Tmemo):string;
function Play(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer):string;
function Stop(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer):string;
var
Line: Integer;//Хранится номер строки memo
implementation
procedure TSDirectory.getDir(Memo:Tmemo);
var
//Путь к файлам
sDir: String;
//Путь найденного файла
sr: TSearchRec;
begin
//Выводим диалог выбора папки в итоге возвращает sDir
SelectDirectory('Выберите каталог', '', sDir);
// FindFirst ищем все файлы mp3.
if FindFirst(sDir + '*.mp3', faAnyFile, sr) = 0 then
begin
repeat
//Записываем в мемо имя найденого mp3 файла
Memo.Lines.Add(sr.Name);
//По завершению обнуляем sr
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
//Управление таймером
function SetTrackBar(TrackBar:TTrackBar;Memo:Tmemo):string;
begin
//По срабатыванию таймера прибавляем к позиции тракбара 1
TrackBar.Position:=TrackBar.Position+1;
Result :=Memo.Lines.Strings[Line];
//Если позиция тракбара достигля максимального значения
if TrackBar.Position=TrackBar.Max then
begin
//Переходим на строку вперед
Line:=Line+1;
//Устанавливаем позицию тракбара на 0
TrackBar.Position:=0;
//Выводим строку с индексом line в лайьл
Result :=Memo.Lines.Strings[Line];
end;
end;
function Play(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer):string;
begin
// Если на кнопке надпись Play
if BitBtn.Caption='Play' then
begin
//Включаем таймер
Timer.Enabled:=true;
//Меняем название кнопки
BitBtn.Caption:='Pause';
//Выводим строку с индексом line в лайьл
Result:=Memo.Lines.Strings[Line];
end
else
begin
//Выключаем таймер
Timer.Enabled:=false;
//Меняем название кнопки
BitBtn.Caption:='Play';
end
end;
function Stop(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer):string;
begin
//Выключаем таймер
Timer.Enabled:=false;
//Устанавливаем позицию тракбара на 0
TrackBar.Position:=0;
//Меняем название кнопки
BitBtn.Caption:='Play';
end;
function NextTrack(TrackBar:TTrackBar;Memo:Tmemo):string;
begin
//Устанавливаем позицию тракбара на 0
TrackBar.Position:=0;
//Переходим на строку назад
line:=line+1;
//Выводим строку с индексом line в лайьл
Result:=Memo.Lines.Strings[Line];
end;
function PreTrack(TrackBar:TTrackBar;Memo:Tmemo):string;
begin
//Устанавливаем позицию тракбара на 0
TrackBar.Position:=0;
//Переходим на строку назад
line:=line-1;
//Выводим строку с индексом line в лайьл
Result:=Memo.Lines.Strings[Line];
end;
end.Последний раз редактировалось MotoArhangel, 14.06.2014 в 12:21. |
|
#2
|
|||
|
|||
|
Непонятно, что именно Вам надо.
Если просто сделать подпрограммы в Вашем коде методами класса - то перенести их объявление внутрь объявления класса (между словами class и end) и в реализации каждой подпрограммы перед именем поставить "TCD." - т.е., например, Код:
function TCD.SetTrackBar(...) begin ... end; Но, судя по коду, у Вас эти методы можно вообще отдать форме, содержащей визуальные компоненты, и возможно даже убрать параметры для подпрограмм, и использвовать некие поля (поля в смысле члены класса) на форме. |
|
#3
|
|||
|
|||
|
Необходимо из приведенного выше кода сделать на подобии:
Код:
Type
//Указатель на процедуру объекта
//понадобится для организации обратного вызова процедуры, которая будет выводить информацию о нашем объекте
TP = procedure of object;
TCD = Class
protected
//свойства класса
m_Name:string; //Кнопка
m_Track:integer;
m_memotext:string;
m_memoadd:string;
m_timer:boolean;
m_p:TP;
function getPlay:string;
function getMemo:string;
function getTimer:boolean;
function getTrackBar:integer;
public
constructor Create(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer;pp:TP);
property name:string Read getPlay;
property memotext:string Read getMemo;
property timer:boolean Read getTimer;
property trackbar:integer Read getTrackBar;
function Play:string;
end;
var
Line: Integer;//Хранится номер строки memo
implementation
constructor TCD.Create(TrackBar:TTrackBar;Memo:Tmemo;BitBtn:TBitBtn;timer:Ttimer;pp:TP);
begin
m_name:= BitBtn.Caption;
m_Track:=TrackBar.Position;
m_memotext:= Memo.Lines.Strings[Line];
m_timer:= Timer.Enabled;
m_p:=pp;
end;
function TCD.getPlay:string;
begin
result := m_name;
end;
function TCD.getMemo:string;
begin
result := m_memotext;
end;
function TCD.getTimer:boolean;
begin
result := m_timer;
end;
function TCD.getTrackBar:integer;
begin
result := m_Track;
end;
function TCD.Play:string;
begin
// Если на кнопке надпись Play
if m_name='Play' then
begin
//Включаем таймер
m_timer:=true;
//Меняем название кнопки
m_name:='Pause';
//Выводим строку с индексом line в лайьл
Result:=m_memotext;
end
else
begin
//Выключаем таймер
m_timer:=false;
//Меняем название кнопки
m_name:='Play';
//Выводим строку с индексом line в лайьл
Result:=m_memotext;
end;
m_p;
end;Код:
function Tcd.SetTrack:string;
begin
//По срабатыванию таймера прибавляем к позиции тракбара 1
m_Track:=m_Track+1;
Result :=m_memotext;
//Если позиция тракбара достигля максимального значения
if m_Track=60 then
begin
//Переходим на строку вперед
Line:=Line+1;
//Устанавливаем позицию тракбара на 0
m_Track:=0;
//Выводим строку с индексом line в лайьл
Result :=m_memotext;
end;
end;Последний раз редактировалось MotoArhangel, 14.06.2014 в 20:30. |