|
#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. |