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

This commit is contained in:
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 *.ppu
*.obj *.obj
*.o *.o
*.lps

View File

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

View File

@ -16,42 +16,10 @@ uses {$IFDEF UNIX} {$IFDEF UseCThreads}
{$R *.res} {$R *.res}
var
// путь к файлу ABTool.exe
ABToolExePath: String;
// путь к директории ABTool
ABToolDataPath: String;
// путь к директории ABTool\Packages
ABToolPkgPath: String;
// путь к директории ABTool\Languages
ABToolLangPath: String;
// путь к директории ABTool\Logs
ABToolLogPath: String;
begin begin
RequireDerivedFormResource := True; RequireDerivedFormResource := True;
Application.Initialize; Application.Initialize;
Application.CreateForm(TdmMain, dmMain);
// настройка путей к директориям
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(TfmMain, fMain.fmMain); Application.CreateForm(TfmMain, fMain.fmMain);
Application.Run; Application.Run;
end. 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 OldCreateOrder = False
Height = 84 Height = 84
HorizontalOffset = 313 HorizontalOffset = 313

View File

@ -5,13 +5,13 @@ unit dMain;
interface interface
uses uses
Classes, SysUtils, FileUtil, Controls, Menus; Classes, SysUtils, FileUtil, Controls, Menus, uPackage, uPackageList;
type type
{ TMainDM } { TdmMain }
TMainDM = class(TDataModule) TdmMain = class(TDataModule)
imgIcons: TImageList; imgIcons: TImageList;
mmMain: TMainMenu; mmMain: TMainMenu;
mbInstallCheckAll: TMenuItem; mbInstallCheckAll: TMenuItem;
@ -34,21 +34,81 @@ type
mbOptionsPkg: TMenuItem; mbOptionsPkg: TMenuItem;
pmInstallTree: TPopupMenu; pmInstallTree: TPopupMenu;
pmInstallCheck: TPopupMenu; pmInstallCheck: TPopupMenu;
procedure DataModuleCreate(Sender: TObject);
private private
// Подготовка директорий
procedure PrepareDirs();
// Подготовка списков пакетов
procedure PreparePackages();
public 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; end;
var var
MainDM: TMainDM; dmMain: TdmMain;
implementation implementation
{$R *.lfm} {$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. end.

View File

@ -1,14 +1,14 @@
object fmMain: TfmMain object fmMain: TfmMain
Left = 309 Left = 304
Height = 450 Height = 450
Top = 88 Top = 87
Width = 350 Width = 350
BorderStyle = bsSingle BorderIcons = [biSystemMenu, biMinimize]
Caption = 'ABTool' Caption = 'ABTool'
ClientHeight = 430 ClientHeight = 430
ClientWidth = 350 ClientWidth = 350
Constraints.MaxHeight = 450 Constraints.MaxHeight = 500
Constraints.MaxWidth = 350 Constraints.MaxWidth = 400
Constraints.MinHeight = 450 Constraints.MinHeight = 450
Constraints.MinWidth = 350 Constraints.MinWidth = 350
Font.CharSet = RUSSIAN_CHARSET Font.CharSet = RUSSIAN_CHARSET
@ -3210,7 +3210,7 @@ object fmMain: TfmMain
71FE000F5EFF000773FE000387FE800176FD80002DC38001693C0003D1190007 71FE000F5EFF000773FE000387FE800176FD80002DC38001693C0003D1190007
36A3800F57F7800F8AFFC00F76FFC01F8BFFE03FBEFFF47FBDFF 36A3800F57F7800F8AFFC00F76FFC01F8BFFE03FBEFFF47FBDFF
} }
Menu = MainDM.mmMain Menu = dmMain.mmMain
OnCreate = FormCreate OnCreate = FormCreate
Position = poScreenCenter Position = poScreenCenter
ShowHint = True ShowHint = True
@ -3220,11 +3220,11 @@ object fmMain: TfmMain
Height = 430 Height = 430
Top = 0 Top = 0
Width = 350 Width = 350
ActivePage = tabSoft ActivePage = tabTools
Align = alClient Align = alClient
Images = MainDM.imgIcons Images = dmMain.imgIcons
TabHeight = 20 TabHeight = 20
TabIndex = 0 TabIndex = 1
TabOrder = 0 TabOrder = 0
object tabSoft: TTabSheet object tabSoft: TTabSheet
Caption = 'Установка' Caption = 'Установка'
@ -3410,7 +3410,7 @@ object fmMain: TfmMain
object edToolsSearch: TEdit object edToolsSearch: TEdit
Left = 0 Left = 0
Height = 13 Height = 13
Top = 28 Top = 30
Width = 342 Width = 342
Align = alTop Align = alTop
BorderSpacing.Top = 5 BorderSpacing.Top = 5
@ -3421,13 +3421,13 @@ object fmMain: TfmMain
end end
object pnToolsTop: TPanel object pnToolsTop: TPanel
Left = 0 Left = 0
Height = 23 Height = 25
Top = 0 Top = 0
Width = 342 Width = 342
Align = alTop Align = alTop
AutoSize = True AutoSize = True
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 23 ClientHeight = 25
ClientWidth = 342 ClientWidth = 342
TabOrder = 1 TabOrder = 1
object cmbToolsPkgSelect: TComboBox object cmbToolsPkgSelect: TComboBox
@ -3445,7 +3445,7 @@ object fmMain: TfmMain
end end
object btnToolsPkgEdit: TSpeedButton object btnToolsPkgEdit: TSpeedButton
Left = 316 Left = 316
Height = 23 Height = 25
Hint = 'Редактировать пакет' Hint = 'Редактировать пакет'
Top = 0 Top = 0
Width = 26 Width = 26
@ -3491,7 +3491,7 @@ object fmMain: TfmMain
end end
object btnToolsPkgReload: TSpeedButton object btnToolsPkgReload: TSpeedButton
Left = 290 Left = 290
Height = 23 Height = 25
Hint = 'Перезагрузить пакет' Hint = 'Перезагрузить пакет'
Top = 0 Top = 0
Width = 26 Width = 26
@ -3532,6 +3532,7 @@ object fmMain: TfmMain
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
} }
OnClick = btnToolsPkgReloadClick
end end
end end
object btnToolsRun: TButton object btnToolsRun: TButton
@ -3552,7 +3553,7 @@ object fmMain: TfmMain
object labToolsPkgDescription: TLabel object labToolsPkgDescription: TLabel
Left = 0 Left = 0
Height = 13 Height = 13
Top = 46 Top = 48
Width = 342 Width = 342
Align = alTop Align = alTop
AutoSize = False AutoSize = False
@ -3563,8 +3564,8 @@ object fmMain: TfmMain
end end
object vstToolsPkgContents: TVirtualStringTree object vstToolsPkgContents: TVirtualStringTree
Left = 0 Left = 0
Height = 308 Height = 306
Top = 62 Top = 64
Width = 342 Width = 342
Align = alClient Align = alClient
BorderStyle = bsNone BorderStyle = bsNone

View File

@ -7,7 +7,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, VirtualTrees, Types, StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, VirtualTrees, Types,
uFileUtils, uPackage, uPackageUtils; dMain, uFileUtils, uPackage, uPackageUtils, uPackageList;
type type
@ -35,10 +35,15 @@ type
tabTools: TTabSheet; tabTools: TTabSheet;
vstSoftPkgContents: TVirtualStringTree; vstSoftPkgContents: TVirtualStringTree;
vstToolsPkgContents: TVirtualStringTree; vstToolsPkgContents: TVirtualStringTree;
procedure btnSoftPkgReloadClick(Sender: TObject); // Создание формы и обновление выпадающих меню пакетов программ и утилит
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов программ
procedure btnSoftPkgReloadClick(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
procedure btnToolsPkgReloadClick(Sender: TObject);
private private
procedure ReloadSoftPackagesList(); // Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу
procedure ReloadPackagesList(APackageType: TPackageType);
public public
end; end;
@ -52,21 +57,77 @@ implementation
{ TfmMain } { TfmMain }
procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject); {------------------------------------------------------------------------------
begin Процедура: TfmMain.ReloadPackagesList()
ReloadSoftPackagesList; Назначение: Создание формы и обновление выпадающих меню пакетов программ и утилит
end; Вх. параметры: Sender: TObject
------------------------------------------------------------------------------}
procedure TfmMain.FormCreate(Sender: TObject); procedure TfmMain.FormCreate(Sender: TObject);
begin begin
ReloadSoftPackagesList; ReloadPackagesList(ptSoft);
ReloadPackagesList(ptTools);
end; end;
{------------------------------------------------------------------------------
procedure TfmMain.ReloadSoftPackagesList(); Процедура: TfmMain.btnSoftPkgReloadClick()
Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов программ
Вх. параметры: Sender: TObject
------------------------------------------------------------------------------}
procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject);
begin begin
cmbSoftPkgSelect.Items.AddStrings(GetPackagesIniFileList(ptSoft, False), True); ReloadPackagesList(ptSoft);
cmbSoftPkgSelect.ItemIndex := 0; end;
{------------------------------------------------------------------------------
Процедура: TfmMain.btnToolsPkgReloadClick()
Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
Вх. параметры: Sender: TObject
------------------------------------------------------------------------------}
procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject);
begin
ReloadPackagesList(ptTools);
end;
{------------------------------------------------------------------------------
Процедура: 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;
end. end.

View File

@ -7,17 +7,20 @@ interface
uses uses
Classes, SysUtils, FileUtil, Types, uPackage; Classes, SysUtils, FileUtil, Types, uPackage;
// Получение списка файлов в директории
function GetFileList(Path, FileMask: String; FullPaths: Boolean = True): TStringList; function GetFileList(Path, FileMask: String; FullPaths: Boolean = True): TStringList;
function GetABToolFileList(SubDir, FileMask: String;
FullPaths: Boolean = True): TStringList; // Получение списка всех файлов внутри директории ABTool\
function GetPackagesIniFileList(PackageType: TPackageType; function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList;
FullPaths: Boolean = True): TStringList;
// Получение списка всех файлов пакетов
function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList;
implementation implementation
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Функция: GetFileList Функция: GetFileList
Назначение: Получает список файлов в директории Назначение: Получение списка файлов в директории
Вх. параметры: Вх. параметры:
Path: string - путь к директории, список файлов которой нужно получить Path: string - путь к директории, список файлов которой нужно получить
FileMask: string - маска файлов, по которой нужно отфильтровать список файлов FileMask: string - маска файлов, по которой нужно отфильтровать список файлов
@ -51,7 +54,7 @@ end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Функция: GetABToolFileList Функция: GetABToolFileList
Назначение: Получает список всех файлов внутри директории ABTool\ Назначение: Получение списка всех файлов внутри директории ABTool\
Вх. параметры: Вх. параметры:
SubDir: string - имя директории внутри ABTool\ SubDir: string - имя директории внутри ABTool\
FileMask: string - маска файлов, по которой нужно отфильтровать список файлов FileMask: string - маска файлов, по которой нужно отфильтровать список файлов
@ -60,16 +63,14 @@ end;
Возвращает: Возвращает:
TStringList - список строк с полными путями или только с именами файлов пакетов TStringList - список строк с полными путями или только с именами файлов пакетов
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
function GetABToolFileList(SubDir, FileMask: String; function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList;
FullPaths: Boolean = True): TStringList;
begin begin
Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + SubDir, FileMask, FullPaths);
SubDir, FileMask, FullPaths);
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Функция: GetPackagesIniFileList Функция: GetPackagesIniFileList
Назначение: Получает список всех пакетов Назначение: Получение спискавсех файлов пакетов
Вх. параметры: Вх. параметры:
PackageType: TPackageType - тип пакета: ptSoft либо ptTools PackageType: TPackageType - тип пакета: ptSoft либо ptTools
FullPaths: boolean - возвращать полные пути (true) или только имена FullPaths: boolean - возвращать полные пути (true) или только имена
@ -79,18 +80,13 @@ end;
Исключения: Исключения:
TException - при попытке передать ptUnknown TException - при попытке передать ptUnknown
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
function GetPackagesIniFileList(PackageType: TPackageType; function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList;
FullPaths: Boolean = True): TStringList;
begin begin
case (PackageType) of case (PackageType) of
ptSoft: Result := GetABToolFileList('Packages', 'soft.*.ini', FullPaths); ptSoft: Result := GetABToolFileList('Packages', 'soft.*.ini', FullPaths);
ptTools: Result := GetABToolFileList('Packages', 'tools.*.ini', FullPaths); ptTools: Result := GetABToolFileList('Packages', 'tools.*.ini', FullPaths);
ptUnknown: raise Exception.Create( ptUnknown: raise Exception.Create('GetPackagesIniFileList(): передан ptUnknown');
'GetPackagesIniFileList(): передан ptUnknown');
end; end;
end; end;
end. end.

View File

@ -10,47 +10,115 @@ uses
type type
{ TPackageType } { TPackageType }
TPackageType = (ptSoft, ptTools, ptUnknown); // Перечисление типов пакета
TPackageType = (
// Пакет программ для установки
ptSoft,
// Пакет утилит
ptTools,
// Неизвестный пакет
ptUnknown
);
{ TPackage } { TPackage }
TPackage = class//(TCustomIniFile) // Класс пакета
TPackage = class(TIniFile)
strict private strict private
// Имя пакета: [PackageInfo] Name
FName: String; FName: String;
// Описание пакета: [PackageInfo] Description
FDescription: String; FDescription: String;
// Тип пакета
FType: TPackageType; FType: TPackageType;
private private
// Установка информации о пакете
procedure SetProperties();
// Определение типа пакета по имени его файла
function SetType(): TPackageType;
public public
IniFile: TIniFile; // Имя пакета: [PackageInfo] Name
Groups: TStringList;
//--------
property Name: String read FName; property Name: String read FName;
// Описание пакета: [PackageInfo] Description
property Description: String read FDescription; property Description: String read FDescription;
// Тип пакета
property PackageType: TPackageType read FType; property PackageType: TPackageType read FType;
//--------
constructor Create(APkgFilename: String); // Создание объекта пакета и установка информации о нём
constructor Create(APkgFilename: Ansistring); overload;
// Деструктор
destructor Destroy(); override; 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 end; // TPackage
implementation implementation
{ TPackage } { TPackage }
constructor TPackage.Create(APkgFilename: String); {------------------------------------------------------------------------------
Конструктор: TPackage.Create()
Назначение: Создание объекта пакета и установка информации о нём
Вх. параметры: APkgFilename: Ansistring - путь к ini-файлу
------------------------------------------------------------------------------}
constructor TPackage.Create(APkgFilename: Ansistring);
begin begin
inherited Create(APkgFilename, [ifoStripComments, ifoStripInvalid]);
SetProperties();
end; 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(); destructor TPackage.Destroy();
begin begin
inherited Destroy(); inherited Destroy();
end; end;
{------------------------------------------------------------------------------
function TPackage.ExecuteItem(const AFileName, AParams: String; Функция: TPackage.ExecuteItem()
AHideMainWindow: Boolean; out AOutExitcode: Cardinal): Boolean; Назначение: Запуск исполняемого файла и получение результатов запуска
Вх. параметры:
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 begin
end; end;
@ -62,12 +130,3 @@ end.

View File

@ -5,16 +5,93 @@ unit uPackageList;
interface interface
uses uses
Classes, SysUtils, uPackage; Classes, SysUtils, uFileUtils, uPackage;
type type
{ TPackageList } { 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 end; // TPackageList
implementation 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. end.