lps-файл удалён и добавлен в gitignore. Почти готов механизм подгрузки списков пакетов на старте

develop
Anthony Axenov 2019-01-13 04:24:13 +08:00
parent 1f20268830
commit 63823b8e6e
15 changed files with 343 additions and 516 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@
*.ppu
*.obj
*.o
*.lps

View File

@ -91,7 +91,7 @@
<Unit2>
<Filename Value="dmain.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainDM"/>
<ComponentName Value="dmMain"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="DataModule"/>
<UnitName Value="dMain"/>

View File

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

View File

@ -1,239 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectSession>
<PathDelim Value="\"/>
<Version Value="10"/>
<BuildModes Active="Debug"/>
<Units Count="10">
<Unit0>
<Filename Value="ABTool.lpr"/>
<IsPartOfProject Value="True"/>
<TopLine Value="34"/>
<CursorPos X="66" Y="56"/>
<UsageCount Value="66"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="fmain.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="fmMain"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="fMain"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<TopLine Value="44"/>
<CursorPos X="26" Y="56"/>
<UsageCount Value="66"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
<Unit2>
<Filename Value="dmain.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainDM"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="DataModule"/>
<UnitName Value="dMain"/>
<EditorIndex Value="1"/>
<CursorPos X="50" Y="36"/>
<ComponentState Value="1"/>
<UsageCount Value="66"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit2>
<Unit3>
<Filename Value="ufileutils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uFileUtils"/>
<EditorIndex Value="3"/>
<TopLine Value="13"/>
<CursorPos X="29" Y="5"/>
<UsageCount Value="43"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="upackage.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uPackage"/>
<EditorIndex Value="4"/>
<TopLine Value="7"/>
<CursorPos X="3" Y="12"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="upackageutils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uPackageUtils"/>
<EditorIndex Value="6"/>
<CursorPos X="38"/>
<UsageCount Value="30"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="upackagelist.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uPackageList"/>
<EditorIndex Value="5"/>
<CursorPos X="28"/>
<UsageCount Value="28"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="C:\Lazarus\lcl\include\custompage.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="253"/>
<CursorPos Y="266"/>
<UsageCount Value="5"/>
</Unit7>
<Unit8>
<Filename Value="upackagetypes.pas"/>
<UnitName Value="uPackageTypes"/>
<EditorIndex Value="-1"/>
<CursorPos Y="9"/>
<UsageCount Value="20"/>
</Unit8>
<Unit9>
<Filename Value="C:\Lazarus\lcl\interfaces\win32\win32listsl.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="114"/>
<CursorPos X="28" Y="121"/>
<UsageCount Value="9"/>
</Unit9>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="fmain.pas"/>
<Caret Line="61" TopLine="44"/>
</Position1>
<Position2>
<Filename Value="ufileutils.pas"/>
<Caret Line="57" TopLine="43"/>
</Position2>
<Position3>
<Filename Value="ufileutils.pas"/>
<Caret Line="31" TopLine="19"/>
</Position3>
<Position4>
<Filename Value="ufileutils.pas"/>
<Caret Line="32" Column="33" TopLine="19"/>
</Position4>
<Position5>
<Filename Value="ufileutils.pas"/>
<Caret Line="37" TopLine="19"/>
</Position5>
<Position6>
<Filename Value="ufileutils.pas"/>
<Caret Line="40" TopLine="20"/>
</Position6>
<Position7>
<Filename Value="ufileutils.pas"/>
<Caret Line="42" TopLine="22"/>
</Position7>
<Position8>
<Filename Value="ufileutils.pas"/>
<Caret Line="35" TopLine="22"/>
</Position8>
<Position9>
<Filename Value="fmain.pas"/>
<Caret Line="58" Column="72" TopLine="40"/>
</Position9>
<Position10>
<Filename Value="ufileutils.pas"/>
<Caret Line="84" Column="59" TopLine="66"/>
</Position10>
<Position11>
<Filename Value="ufileutils.pas"/>
<Caret Line="80" TopLine="60"/>
</Position11>
<Position12>
<Filename Value="ufileutils.pas"/>
<Caret Line="61" TopLine="57"/>
</Position12>
<Position13>
<Filename Value="ufileutils.pas"/>
<Caret Line="62" TopLine="57"/>
</Position13>
<Position14>
<Filename Value="ufileutils.pas"/>
<Caret Line="31" TopLine="15"/>
</Position14>
<Position15>
<Filename Value="ufileutils.pas"/>
<Caret Line="27" Column="55" TopLine="15"/>
</Position15>
<Position16>
<Filename Value="ufileutils.pas"/>
<Caret Line="33" Column="27" TopLine="25"/>
</Position16>
<Position17>
<Filename Value="ufileutils.pas"/>
<Caret Line="80" TopLine="68"/>
</Position17>
<Position18>
<Filename Value="ufileutils.pas"/>
<Caret Line="61" TopLine="49"/>
</Position18>
<Position19>
<Filename Value="ufileutils.pas"/>
<Caret Line="62" TopLine="49"/>
</Position19>
<Position20>
<Filename Value="ufileutils.pas"/>
<Caret Line="31" TopLine="19"/>
</Position20>
<Position21>
<Filename Value="ufileutils.pas"/>
<Caret Line="32" TopLine="19"/>
</Position21>
<Position22>
<Filename Value="ufileutils.pas"/>
<Caret Line="33" TopLine="19"/>
</Position22>
<Position23>
<Filename Value="ufileutils.pas"/>
<Caret Line="38" Column="53" TopLine="25"/>
</Position23>
<Position24>
<Filename Value="ufileutils.pas"/>
<Caret Line="81" TopLine="69"/>
</Position24>
<Position25>
<Filename Value="ufileutils.pas"/>
<Caret Line="62" TopLine="50"/>
</Position25>
<Position26>
<Filename Value="ufileutils.pas"/>
<Caret Line="63" TopLine="50"/>
</Position26>
<Position27>
<Filename Value="ufileutils.pas"/>
<Caret Line="31" TopLine="19"/>
</Position27>
<Position28>
<Filename Value="ufileutils.pas"/>
<Caret Line="32" TopLine="19"/>
</Position28>
<Position29>
<Filename Value="ufileutils.pas"/>
<Caret Line="33" TopLine="19"/>
</Position29>
<Position30>
<Filename Value="fmain.pas"/>
<Caret Line="10" Column="15" TopLine="5"/>
</Position30>
</JumpHistory>
</ProjectSession>
<Debugging>
<BreakPoints Count="1">
<Item1>
<Kind Value="bpkSource"/>
<WatchScope Value="wpsLocal"/>
<WatchKind Value="wpkWrite"/>
<Source Value="mainform.pas"/>
<Line Value="57"/>
</Item1>
</BreakPoints>
</Debugging>
</CONFIG>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,5 @@
object MainDM: TMainDM
object dmMain: TdmMain
OnCreate = DataModuleCreate
OldCreateOrder = False
Height = 84
HorizontalOffset = 313

View File

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

View File

@ -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

View File

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

View File

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

View File

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

View File

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