Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.06.2014, 11:13
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию Классы и методы

Подскажите пожалуйста как правильно создать методы класса для управления свойствами объектов:
Код:
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  
Старый 14.06.2014, 17:51
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Непонятно, что именно Вам надо.
Если просто сделать подпрограммы в Вашем коде методами класса - то перенести их объявление внутрь объявления класса (между словами class и end) и в реализации каждой подпрограммы перед именем поставить "TCD." - т.е., например,
Код:
function TCD.SetTrackBar(...)
begin
...
end;

Но, судя по коду, у Вас эти методы можно вообще отдать форме, содержащей визуальные компоненты, и возможно даже убрать параметры для подпрограмм, и использвовать некие поля (поля в смысле члены класса) на форме.
Ответить с цитированием
  #3  
Старый 14.06.2014, 20:15
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

Необходимо из приведенного выше кода сделать на подобии:
Код:
 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter