diff --git a/.gitignore b/.gitignore index c5205ab..b9a2e0b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ *.ppu *.obj *.o +*.lps diff --git a/ABTool.lpi b/ABTool.lpi index cb6c7a1..a7bd021 100644 --- a/ABTool.lpi +++ b/ABTool.lpi @@ -91,7 +91,7 @@ - + diff --git a/ABTool.lpr b/ABTool.lpr index 3b082a0..b4cac6a 100644 --- a/ABTool.lpr +++ b/ABTool.lpr @@ -16,42 +16,10 @@ uses {$IFDEF UNIX} {$IFDEF UseCThreads} {$R *.res} -var - // путь к файлу ABTool.exe - ABToolExePath: String; - - // путь к директории ABTool - ABToolDataPath: String; - - // путь к директории ABTool\Packages - ABToolPkgPath: String; - - // путь к директории ABTool\Languages - ABToolLangPath: String; - - // путь к директории ABTool\Logs - ABToolLogPath: String; - begin RequireDerivedFormResource := True; Application.Initialize; - - // настройка путей к директориям - ABToolExePath := ExtractFilePath(ParamStr(0)); - ABToolDataPath := ABToolExePath + 'ABTool\'; - ABToolPkgPath := ABToolDataPath + 'Packages\'; - ABToolLangPath := ABToolDataPath + 'Languages\'; - ABToolLogPath := ABToolDataPath + 'Logs\'; - - // подготовка директорий - if not DirectoryExists(ABToolPkgPath) then - ForceDirectories(ABToolPkgPath); - if not DirectoryExists(ABToolLangPath) then - ForceDirectories(ABToolLangPath); - if not DirectoryExists(ABToolLogPath) then - ForceDirectories(ABToolLogPath); - - Application.CreateForm(TMainDM, MainDM); + Application.CreateForm(TdmMain, dmMain); Application.CreateForm(TfmMain, fMain.fmMain); Application.Run; end. diff --git a/ABTool.lps b/ABTool.lps deleted file mode 100644 index 99567d7..0000000 --- a/ABTool.lps +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ABTool/Packages/soft.test1.ini b/ABTool/Packages/soft.test1.ini deleted file mode 100644 index ee7a737..0000000 --- a/ABTool/Packages/soft.test1.ini +++ /dev/null @@ -1,37 +0,0 @@ -; -; ABTool v0.6.4 -; -; -; [PackageInfo] . -; -; Name . -; -; Description . -; , -; .. -; . -; . -; -; -; -; (, , -; ..). : -; " "=\" ". -; \ ( ; ) -; \\ ( ABTool.exe). -; . -; . -; -;============================================================================ -[PackageInfo] -Name= -Description= , -[ 1] -1=\\setup1.exe /1 /2 -2=\\___abtool.exe\setup2.exe -3=\___\setup3.exe -[ 2] -4=\\setup4.exe /1 -[ 3] -5=\\setup5.exe -6=\\setup6.exe /1 diff --git a/ABTool/Packages/soft.test2.ini b/ABTool/Packages/soft.test2.ini deleted file mode 100644 index ee7a737..0000000 --- a/ABTool/Packages/soft.test2.ini +++ /dev/null @@ -1,37 +0,0 @@ -; -; ABTool v0.6.4 -; -; -; [PackageInfo] . -; -; Name . -; -; Description . -; , -; .. -; . -; . -; -; -; -; (, , -; ..). : -; " "=\" ". -; \ ( ; ) -; \\ ( ABTool.exe). -; . -; . -; -;============================================================================ -[PackageInfo] -Name= -Description= , -[ 1] -1=\\setup1.exe /1 /2 -2=\\___abtool.exe\setup2.exe -3=\___\setup3.exe -[ 2] -4=\\setup4.exe /1 -[ 3] -5=\\setup5.exe -6=\\setup6.exe /1 diff --git a/ABTool/Packages/tools.test1.ini b/ABTool/Packages/tools.test1.ini deleted file mode 100644 index 572684a..0000000 --- a/ABTool/Packages/tools.test1.ini +++ /dev/null @@ -1,42 +0,0 @@ -; -; ABTool v0.6.4 -; -; -; [PackageInfo] . -; -; Name . -; -; Description . -; , -; .. -; . -; . -; -; -; -; (, , -; ..). : -; " "=" ". -; \ ( ; ) -; \\ ( ABTool.exe). -; . -; . -; -;============================================================================ -[PackageInfo] -Name= -Description= , -[ 1] - 1=\\1.exe /1 /2 - 2=\\___abtool.exe\2.exe - 3=\___\3.exe - 4=\\4.exe /1 -[ 2] - 5=\\5.exe - 6=\\6.exe -[ 3] - 7=\\7.exe /1 - 8=\\8.exe - 9=\\9.exe - 10=\\10.exe /1 /2 - 11=\\11.exe diff --git a/ABTool/Packages/tools.test2.ini b/ABTool/Packages/tools.test2.ini deleted file mode 100644 index 572684a..0000000 --- a/ABTool/Packages/tools.test2.ini +++ /dev/null @@ -1,42 +0,0 @@ -; -; ABTool v0.6.4 -; -; -; [PackageInfo] . -; -; Name . -; -; Description . -; , -; .. -; . -; . -; -; -; -; (, , -; ..). : -; " "=" ". -; \ ( ; ) -; \\ ( ABTool.exe). -; . -; . -; -;============================================================================ -[PackageInfo] -Name= -Description= , -[ 1] - 1=\\1.exe /1 /2 - 2=\\___abtool.exe\2.exe - 3=\___\3.exe - 4=\\4.exe /1 -[ 2] - 5=\\5.exe - 6=\\6.exe -[ 3] - 7=\\7.exe /1 - 8=\\8.exe - 9=\\9.exe - 10=\\10.exe /1 /2 - 11=\\11.exe diff --git a/dmain.lfm b/dmain.lfm index bdafdcb..131e507 100644 --- a/dmain.lfm +++ b/dmain.lfm @@ -1,4 +1,5 @@ -object MainDM: TMainDM +object dmMain: TdmMain + OnCreate = DataModuleCreate OldCreateOrder = False Height = 84 HorizontalOffset = 313 diff --git a/dmain.pas b/dmain.pas index 45bbca6..c428f13 100644 --- a/dmain.pas +++ b/dmain.pas @@ -5,13 +5,13 @@ unit dMain; interface uses - Classes, SysUtils, FileUtil, Controls, Menus; + Classes, SysUtils, FileUtil, Controls, Menus, uPackage, uPackageList; type - { TMainDM } + { TdmMain } - TMainDM = class(TDataModule) + TdmMain = class(TDataModule) imgIcons: TImageList; mmMain: TMainMenu; mbInstallCheckAll: TMenuItem; @@ -34,21 +34,81 @@ type mbOptionsPkg: TMenuItem; pmInstallTree: TPopupMenu; pmInstallCheck: TPopupMenu; + procedure DataModuleCreate(Sender: TObject); private - + // Подготовка директорий + procedure PrepareDirs(); + // Подготовка списков пакетов + procedure PreparePackages(); public + { Публичные переменные, которые доступны во всех юнитах с подключенным uses ..., dMain } + // путь к файлу ABTool.exe + ABToolExePath: String; + // путь к директории ABTool + ABToolDataPath: String; + // путь к директории ABTool\Packages + ABToolPkgPath: String; + // путь к директории ABTool\Languages + ABToolLangPath: String; + // путь к директории ABTool\Logs + ABToolLogPath: String; + // Список объектов пакетов программ для установки + SoftPackages: TPackageList; + // Список объектов пакетов утилит для запуска + ToolsPackages: TPackageList; end; var - MainDM: TMainDM; + dmMain: TdmMain; implementation {$R *.lfm} -{ TMainDM } - +{ TdmMain } + +{------------------------------------------------------------------------------ +Конструктор: TdmMain.Create() +Назначение: Создание датамодуля, подготовка путей и списков пакетов +Вх. параметры: Sender: TObject +------------------------------------------------------------------------------} +procedure TdmMain.DataModuleCreate(Sender: TObject); +begin + PrepareDirs(); + PreparePackages(); +end; + +{------------------------------------------------------------------------------ +Процедура: TdmMain.PreparePackages() +Назначение: Подготовка директорий +------------------------------------------------------------------------------} +procedure TdmMain.PrepareDirs(); +begin + ABToolExePath := ExtractFilePath(ParamStr(0)); + ABToolDataPath := ABToolExePath + 'ABTool\'; + ABToolPkgPath := ABToolDataPath + 'Packages\'; + ABToolLangPath := ABToolDataPath + 'Languages\'; + ABToolLogPath := ABToolDataPath + 'Logs\'; + if not DirectoryExists(ABToolPkgPath) then + ForceDirectories(ABToolPkgPath); + if not DirectoryExists(ABToolLangPath) then + ForceDirectories(ABToolLangPath); + if not DirectoryExists(ABToolLogPath) then + ForceDirectories(ABToolLogPath); +end; + +{------------------------------------------------------------------------------ +Процедура: TdmMain.PreparePackages() +Назначение: Подготовка списков пакетов +------------------------------------------------------------------------------} +procedure TdmMain.PreparePackages(); +begin + SoftPackages := TPackageList.Create; + SoftPackages.Load(ptSoft); + ToolsPackages := TPackageList.Create; + ToolsPackages.Load(ptTools); +end; end. diff --git a/fmain.lfm b/fmain.lfm index 6f34b39..240540f 100644 --- a/fmain.lfm +++ b/fmain.lfm @@ -1,14 +1,14 @@ object fmMain: TfmMain - Left = 309 + Left = 304 Height = 450 - Top = 88 + Top = 87 Width = 350 - BorderStyle = bsSingle + BorderIcons = [biSystemMenu, biMinimize] Caption = 'ABTool' ClientHeight = 430 ClientWidth = 350 - Constraints.MaxHeight = 450 - Constraints.MaxWidth = 350 + Constraints.MaxHeight = 500 + Constraints.MaxWidth = 400 Constraints.MinHeight = 450 Constraints.MinWidth = 350 Font.CharSet = RUSSIAN_CHARSET @@ -3210,7 +3210,7 @@ object fmMain: TfmMain 71FE000F5EFF000773FE000387FE800176FD80002DC38001693C0003D1190007 36A3800F57F7800F8AFFC00F76FFC01F8BFFE03FBEFFF47FBDFF } - Menu = MainDM.mmMain + Menu = dmMain.mmMain OnCreate = FormCreate Position = poScreenCenter ShowHint = True @@ -3220,11 +3220,11 @@ object fmMain: TfmMain Height = 430 Top = 0 Width = 350 - ActivePage = tabSoft + ActivePage = tabTools Align = alClient - Images = MainDM.imgIcons + Images = dmMain.imgIcons TabHeight = 20 - TabIndex = 0 + TabIndex = 1 TabOrder = 0 object tabSoft: TTabSheet Caption = 'Установка' @@ -3410,7 +3410,7 @@ object fmMain: TfmMain object edToolsSearch: TEdit Left = 0 Height = 13 - Top = 28 + Top = 30 Width = 342 Align = alTop BorderSpacing.Top = 5 @@ -3421,13 +3421,13 @@ object fmMain: TfmMain end object pnToolsTop: TPanel Left = 0 - Height = 23 + Height = 25 Top = 0 Width = 342 Align = alTop AutoSize = True BevelOuter = bvNone - ClientHeight = 23 + ClientHeight = 25 ClientWidth = 342 TabOrder = 1 object cmbToolsPkgSelect: TComboBox @@ -3445,7 +3445,7 @@ object fmMain: TfmMain end object btnToolsPkgEdit: TSpeedButton Left = 316 - Height = 23 + Height = 25 Hint = 'Редактировать пакет' Top = 0 Width = 26 @@ -3491,7 +3491,7 @@ object fmMain: TfmMain end object btnToolsPkgReload: TSpeedButton Left = 290 - Height = 23 + Height = 25 Hint = 'Перезагрузить пакет' Top = 0 Width = 26 @@ -3532,6 +3532,7 @@ object fmMain: TfmMain FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } + OnClick = btnToolsPkgReloadClick end end object btnToolsRun: TButton @@ -3552,7 +3553,7 @@ object fmMain: TfmMain object labToolsPkgDescription: TLabel Left = 0 Height = 13 - Top = 46 + Top = 48 Width = 342 Align = alTop AutoSize = False @@ -3563,8 +3564,8 @@ object fmMain: TfmMain end object vstToolsPkgContents: TVirtualStringTree Left = 0 - Height = 308 - Top = 62 + Height = 306 + Top = 64 Width = 342 Align = alClient BorderStyle = bsNone diff --git a/fmain.pas b/fmain.pas index 9037c8d..1629fc4 100644 --- a/fmain.pas +++ b/fmain.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, VirtualTrees, Types, - uFileUtils, uPackage, uPackageUtils; + dMain, uFileUtils, uPackage, uPackageUtils, uPackageList; type @@ -34,11 +34,16 @@ type tabSystem: TTabSheet; tabTools: TTabSheet; vstSoftPkgContents: TVirtualStringTree; - vstToolsPkgContents: TVirtualStringTree; - procedure btnSoftPkgReloadClick(Sender: TObject); + vstToolsPkgContents: TVirtualStringTree; + // Создание формы и обновление выпадающих меню пакетов программ и утилит procedure FormCreate(Sender: TObject); + // Обрабока клика по кнопке обновления выпадающего меню пакетов программ + procedure btnSoftPkgReloadClick(Sender: TObject); + // Обрабока клика по кнопке обновления выпадающего меню пакетов утилит + procedure btnToolsPkgReloadClick(Sender: TObject); private - procedure ReloadSoftPackagesList(); + // Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу + procedure ReloadPackagesList(APackageType: TPackageType); public end; @@ -51,22 +56,78 @@ implementation {$R *.lfm} { TfmMain } - -procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject); -begin - ReloadSoftPackagesList; -end; - + +{------------------------------------------------------------------------------ +Процедура: TfmMain.ReloadPackagesList() +Назначение: Создание формы и обновление выпадающих меню пакетов программ и утилит +Вх. параметры: Sender: TObject +------------------------------------------------------------------------------} procedure TfmMain.FormCreate(Sender: TObject); begin - ReloadSoftPackagesList; + ReloadPackagesList(ptSoft); + ReloadPackagesList(ptTools); +end; + +{------------------------------------------------------------------------------ +Процедура: TfmMain.btnSoftPkgReloadClick() +Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов программ +Вх. параметры: Sender: TObject +------------------------------------------------------------------------------} +procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject); +begin + ReloadPackagesList(ptSoft); +end; + +{------------------------------------------------------------------------------ +Процедура: TfmMain.btnToolsPkgReloadClick() +Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов утилит +Вх. параметры: Sender: TObject +------------------------------------------------------------------------------} +procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject); +begin + ReloadPackagesList(ptTools); end; - -procedure TfmMain.ReloadSoftPackagesList(); -begin - cmbSoftPkgSelect.Items.AddStrings(GetPackagesIniFileList(ptSoft, False), True); - cmbSoftPkgSelect.ItemIndex := 0; +{------------------------------------------------------------------------------ +Процедура: TfmMain.ReloadPackagesList() +Назначение: Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу +Вх. параметры: APackageType: TPackageType - тип списка пакета +------------------------------------------------------------------------------} +procedure TfmMain.ReloadPackagesList(APackageType: TPackageType); +var + LastIndex: integer; + Key: Integer; + Pkg: TPackage; + Combo: TComboBox; + PackageList: TPackageList; +begin + case (APackageType) of + ptSoft: begin + Combo := cmbSoftPkgSelect; + PackageList := dmMain.SoftPackages; + end; + ptTools: begin + Combo := cmbToolsPkgSelect; + PackageList := dmMain.ToolsPackages; + end; + ptUnknown: raise Exception.Create('TfmMain.ReloadPackagesList(): передан ptUnknown'); + end; + LastIndex := Combo.ItemIndex; + if LastIndex < 0 then + LastIndex := 0; + Combo.Clear; + PackageList.Reload(); + if PackageList.Count > 0 then + begin + for Key := 0 to PackageList.Count - 1 do + begin + Pkg := PackageList[Key]; + Combo.Items.Add(Pkg.Name + ' (' + ExtractFileName(Pkg.FileName) + ')'); + end; + end; + if Combo.Items.Count <= LastIndex then + LastIndex := Combo.Items.Count - 1; + Combo.ItemIndex := LastIndex; end; end. diff --git a/ufileutils.pas b/ufileutils.pas index fdbedae..f553280 100644 --- a/ufileutils.pas +++ b/ufileutils.pas @@ -7,17 +7,20 @@ interface uses Classes, SysUtils, FileUtil, Types, uPackage; +// Получение списка файлов в директории function GetFileList(Path, FileMask: String; FullPaths: Boolean = True): TStringList; -function GetABToolFileList(SubDir, FileMask: String; - FullPaths: Boolean = True): TStringList; -function GetPackagesIniFileList(PackageType: TPackageType; - FullPaths: Boolean = True): TStringList; + +// Получение списка всех файлов внутри директории ABTool\ +function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList; + +// Получение списка всех файлов пакетов +function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList; implementation {------------------------------------------------------------------------------ Функция: GetFileList -Назначение: Получает список файлов в директории +Назначение: Получение списка файлов в директории Вх. параметры: Path: string - путь к директории, список файлов которой нужно получить FileMask: string - маска файлов, по которой нужно отфильтровать список файлов @@ -51,7 +54,7 @@ end; {------------------------------------------------------------------------------ Функция: GetABToolFileList -Назначение: Получает список всех файлов внутри директории ABTool\ +Назначение: Получение списка всех файлов внутри директории ABTool\ Вх. параметры: SubDir: string - имя директории внутри ABTool\ FileMask: string - маска файлов, по которой нужно отфильтровать список файлов @@ -60,16 +63,14 @@ end; Возвращает: TStringList - список строк с полными путями или только с именами файлов пакетов ------------------------------------------------------------------------------} -function GetABToolFileList(SubDir, FileMask: String; - FullPaths: Boolean = True): TStringList; +function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList; begin - Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + - SubDir, FileMask, FullPaths); + Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + SubDir, FileMask, FullPaths); end; {------------------------------------------------------------------------------ Функция: GetPackagesIniFileList -Назначение: Получает список всех пакетов +Назначение: Получение спискавсех файлов пакетов Вх. параметры: PackageType: TPackageType - тип пакета: ptSoft либо ptTools FullPaths: boolean - возвращать полные пути (true) или только имена @@ -79,18 +80,13 @@ end; Исключения: TException - при попытке передать ptUnknown ------------------------------------------------------------------------------} -function GetPackagesIniFileList(PackageType: TPackageType; - FullPaths: Boolean = True): TStringList; +function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList; begin case (PackageType) of ptSoft: Result := GetABToolFileList('Packages', 'soft.*.ini', FullPaths); ptTools: Result := GetABToolFileList('Packages', 'tools.*.ini', FullPaths); - ptUnknown: raise Exception.Create( - 'GetPackagesIniFileList(): передан ptUnknown'); + ptUnknown: raise Exception.Create('GetPackagesIniFileList(): передан ptUnknown'); end; end; - - - end. diff --git a/upackage.pas b/upackage.pas index ed2c68e..46247dc 100644 --- a/upackage.pas +++ b/upackage.pas @@ -10,47 +10,115 @@ uses type { TPackageType } - TPackageType = (ptSoft, ptTools, ptUnknown); + // Перечисление типов пакета + TPackageType = ( + // Пакет программ для установки + ptSoft, + // Пакет утилит + ptTools, + // Неизвестный пакет + ptUnknown + ); { TPackage } - TPackage = class//(TCustomIniFile) + // Класс пакета + TPackage = class(TIniFile) strict private + // Имя пакета: [PackageInfo] Name FName: String; + // Описание пакета: [PackageInfo] Description FDescription: String; + // Тип пакета FType: TPackageType; private + // Установка информации о пакете + procedure SetProperties(); + // Определение типа пакета по имени его файла + function SetType(): TPackageType; public - IniFile: TIniFile; - Groups: TStringList; - //-------- + // Имя пакета: [PackageInfo] Name property Name: String read FName; + // Описание пакета: [PackageInfo] Description property Description: String read FDescription; + // Тип пакета property PackageType: TPackageType read FType; - //-------- - constructor Create(APkgFilename: String); + + // Создание объекта пакета и установка информации о нём + constructor Create(APkgFilename: Ansistring); overload; + // Деструктор destructor Destroy(); override; - function ExecuteItem(const AFileName, AParams: String; - AHideMainWindow: Boolean; Out AOutExitcode: Cardinal): Boolean; + + // Запуск исполняемого файла и получение результатов запуска + function ExecuteItem(const AFileName, AParams: String; AHideMainWindow: Boolean; + Out AOutExitcode: Cardinal): Boolean; end; // TPackage implementation { TPackage } -constructor TPackage.Create(APkgFilename: String); +{------------------------------------------------------------------------------ +Конструктор: TPackage.Create() +Назначение: Создание объекта пакета и установка информации о нём +Вх. параметры: APkgFilename: Ansistring - путь к ini-файлу +------------------------------------------------------------------------------} +constructor TPackage.Create(APkgFilename: Ansistring); begin - + inherited Create(APkgFilename, [ifoStripComments, ifoStripInvalid]); + SetProperties(); end; +{------------------------------------------------------------------------------ +Процедура: TPackage.SetType() +Назначение: Установка информации о пакете +------------------------------------------------------------------------------} +procedure TPackage.SetProperties(); +begin + FName := ReadString('PackageInfo', 'Name', '<без названия>'); + FDescription := ReadString('PackageInfo', 'Description', '<без описания>'); + FType := SetType(); +end; + +{------------------------------------------------------------------------------ +Функция: TPackage.SetType() +Назначение: Определение типа пакета по имени его файла +Возвращает: TPackageType - тип пакета +------------------------------------------------------------------------------} +function TPackage.SetType(): TPackageType; +var + SubStr: String; +begin + SubStr := Copy(ExtractFileName(FileName), 1, 4); + if (LowerCase(SubStr) = 'soft') then + Result := ptSoft + else if (LowerCase(SubStr) = 'tool') then + Result := ptTools + else + Result := ptUnknown; +end; + +{------------------------------------------------------------------------------ +Деструктор: TPackage.Destroy() +------------------------------------------------------------------------------} destructor TPackage.Destroy(); begin inherited Destroy(); end; - -function TPackage.ExecuteItem(const AFileName, AParams: String; - AHideMainWindow: Boolean; out AOutExitcode: Cardinal): Boolean; +{------------------------------------------------------------------------------ +Функция: TPackage.ExecuteItem() +Назначение: Запуск исполняемого файла и получение результатов запуска +Вх. параметры: + AFileName : String - путь к исполняемому файлу + AParams : String - дополнительные параметры запуска + AHideMainWindow : Boolean - скрывать главное окно ABTool (true) или нет (false) +Вых. параметры: + AOutExitcode : Cardinal - код завершения процесса +Возвращает: boolean - true при успешном запуске программы, false при неудаче +------------------------------------------------------------------------------} +function TPackage.ExecuteItem(const AFileName, AParams: String; AHideMainWindow: Boolean; + out AOutExitcode: Cardinal): Boolean; begin end; @@ -62,12 +130,3 @@ end. - - - - - - - - - diff --git a/upackagelist.pas b/upackagelist.pas index 413eea2..ec8f52d 100644 --- a/upackagelist.pas +++ b/upackagelist.pas @@ -5,16 +5,93 @@ unit uPackageList; interface uses - Classes, SysUtils, uPackage; + Classes, SysUtils, uFileUtils, uPackage; type + { TPackageList } - TPackageList = class(TList) + // Класс списка пакетов + TPackageList = class + private + // Тип списка пакетов + FType: TPackageType; + // Список пакетов + FPackages: array of TPackage; + // Получение пакета из списка по его номеру + function GetPackageByIndex(Index: integer): TPackage; + public + // Тип списка пакетов + property PackageType: TPackageType read FType; + // Список пакетов + property Packages[Index: Integer]: TPackage read GetPackageByIndex; default; + + // Создание списка пакетов по указанному типу + procedure Load(APackageType: TPackageType); + // Заполнение списка пакетов объектами пакетов + procedure Reload(); + // Получение количества пакетов в списке + function Count(): integer; end; // TPackageList - implementation +{ TPackageList } + +{------------------------------------------------------------------------------ +Процедура: TPackageList.Create() +Назначение: Создание списка пакетов по указанному типу +Вх. параметры: APackageType: TPackageType - тип списка пакета +------------------------------------------------------------------------------} +procedure TPackageList.Load(APackageType: TPackageType); +begin + FType := APackageType; + Reload(); +end; + +{------------------------------------------------------------------------------ +Процедура: TPackageList.Reload() +Назначение: Заполнение списка пакетов объектами пакетов +------------------------------------------------------------------------------} +procedure TPackageList.Reload(); +var + FileList: TStringList; + FileMask: String; + Key: Integer; +begin + FPackages := nil; + case (FType) of + ptSoft: FileMask := 'soft.*.ini'; + ptTools: FileMask := 'tools.*.ini'; + ptUnknown: raise Exception.Create('TPackageList.Reload(): тип не может быть ptUnknown'); + end; + FileList := GetABToolFileList('Packages', FileMask); + for Key := 0 to FileList.Count - 1 do + begin + SetLength(FPackages, Length(FPackages)+1); + FPackages[Key] := TPackage.Create(FileList[Key]); + end; +end; + +{------------------------------------------------------------------------------ +Функция: TPackage.GetPackageByIndex() +Назначение: Получение пакета из списка по его номеру +Возвращает: TPackage - пакет +------------------------------------------------------------------------------} +function TPackageList.GetPackageByIndex(Index: integer): TPackage; +begin + Result := FPackages[Index]; +end; + +{------------------------------------------------------------------------------ +Функция: TPackage.GetPackageByIndex() +Назначение: Получение количества пакетов в списке +Возвращает: integer - число пакетов в списке +------------------------------------------------------------------------------} +function TPackageList.Count(): integer; +begin + Result := Length(FPackages); +end; + end.