нужна помощь, совет в создании класса(Объекта)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

нужна помощь, совет в создании класса(Объекта)

Сообщение gvido » 06.08.2015 21:57:55

Нужна помощь, подсказка на существующий класс или возможные способы реализации. Есть идея создать объект, который бы владел списком пользовательских функций, как описанных в коде программы, и имел возможность добавления операций внешних исполняемых файлов с параметрами.
Нечто похожее реализовывал раньше так:
имелась таблица "Operations" в базе данных с набором полей и выглядела так:
Num NameAction Command
1 Упаковать $PackExe$ a -e $outfile$ $infile$
2 Распаковать $UnPackExe$ e -y $infile$ -o $outfile$
3 Подписать $CriptExe$ s $infile$ $outfile$ $signdrive$ $signkey$
4 Зашифровать $CriptExe$ e $infile$ $outfile$ $secretPath$ $openPath$ $encriptKey$ $abonents$
И так далее...

По списку необходимых операций запросом последовательно выбирались по NameAction значение поля Command. Далее шел разбор строки команды с заменой подстановочных значений.
Как подобное можно реализовать в собственном классе? Никогда не изобретал собственных объектов(классов). Как-то всегда хватало существующих, да и задачи решались более простые.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: нужна помощь, совет в создании класса(Объекта)

Сообщение resident » 07.08.2015 00:11:27

Не понял вопрос. Если затык в процедурах, то причем здесь класс? А если затык в самом классе, то существует много простеньких объяснений, что это такое и как сделать простейший класс.

Можно сначала сделать все обычными процедурами и переменными в отдельном модуле. А потом оформить все это как класс будет очень просто.
http://www.interface.ru/home.asp?artId=1481
http://www.interface.ru/home.asp?artId=1482
http://www.interface.ru/home.asp?artId=1483
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: нужна помощь, совет в создании класса(Объекта)

Сообщение gvido » 07.08.2015 00:27:18

С простыми кассами я разобрался.
Ради поисков создал класс:
Код: Выделить всё
TDirectory = Class
private
       FBasePath: String;
       FFileMask: String;
       FFileList: TStringList;
   //    FFileActions: Какой-то ТИП нужно придумать...;
     protected
       procedure DoScanDir(ABasePath: String; Recurse: Boolean;Var AFileList: TStringlist;aMask: string);
     public
       Constructor Create(FullPath: String; FMask: String ='*');
     published
       property BasePath: String Read FBasePath;
       property FileMask: String Read FFileMask;
       property FileList: TStringList Read FFileList;
   end;

procedure TDirectory.DoScanDir(ABasePath: String; Recurse: Boolean;var AFileList: TStringlist;aMask: string);
Var
  Info : TSearchRec;
begin
  If FindFirstUTF8(ABasePath+amask,faAnyFile and not faDirectory,Info)=0 then
    try
      repeat
       AFileList.Append(info.Name);
      until (FindNextUTF8(Info)<>0);
    finally
      FindCloseUTF8(Info);
    end;
  If Recurse then
    If FindFirstUTF8(ABasePath+amask,faDirectory,Info)=0 then
      try
        repeat
        If (Info.Attr=faDirectory) and
           Not ((info.Name='.') or (Info.Name='..')) then
          DoScanDir(ABasePath+Info.Name,Recurse,AFileList,AMask);
        until (FindNextUTF8(Info)<>0);
      finally
        FindCloseUTF8(Info);
      end;
end;

Constructor TDirectory.Create(FullPath: String;FMask: String ='*');
   begin
         if (fullpath<>'') and (DirectoryExists(FullPath)) then
          Begin
               FBasePath:=ExtractFilePath(FullPath);
               FFileMask:=FMask;
               FFileList:=TStringList.Create;
               DoScanDir(FullPAth,false,FFileList,Fmask);
          end;
   end;

Вот дальше у меня реальный затык.
По мутной идее в моей голове. Мутной, мутной, слегка осязаемой. Поле "FFileActions" должно быть индексированным списком или массивом записей.
Повнимательнее глянул на TStringList и его поле FList: PStringItemList;
Код: Выделить всё
PStringItem = ^TStringItem;
  TStringItem = record
    FString: string;
    FObject: TObject;
  end;

  PStringItemList = ^TStringItemList;
  TStringItemList = array[0..MaxListSize] of TStringItem;

То есть, StringItem может содержать в одной записи текстовую метку(Имя-описание) и некий объект, вернее ссылку на него?
Если так то, наверно, можно получить аналог записи в таблице представленной выше.
Код: Выделить всё
TStringItem = record
    FString: string;// 'Копировать'
    FObject: TObject; //ссылка на процедуру-функцию или, в случае внешней команды, ссылку на строку, параметры командной строки внешнего исполняемого файла. Например консольного архиватора.
  end;


Понимаю, что все сказанное мной, очень сумбурно.

Похоже. я нашел что-то похожее на то что мне нужно. По крайней мере повилось какое то понимание возможного использования
http://www.sql.ru/forum/1005683/sozdanie-spiska-procedur-cherez-tstringlist-addobject
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 241

Рейтинг@Mail.ru
cron