diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..14272af --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "Modules/VirtualTreeView"] + path = Modules/VirtualTreeView + url = https://github.com/TurboPack/VirtualTreeView.git +[submodule "Modules/SynEdit"] + path = Modules/SynEdit + url = https://github.com/TurboPack/SynEdit.git diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..f2c348b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,133 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +Delphi Unit Dependency Scanner (DUDS) is a Windows desktop application built with Delphi that parses Delphi projects and builds a unit file hierarchy. It analyzes unit dependencies, detects circular references, and can export relationships in multiple formats (XML, Gephi CSV, GraphML). The tool also supports unit renaming using regex expressions. + +## Build Instructions + +### Prerequisites + +- Delphi 11 or later (originally built with Delphi Tokyo, currently compiled under Delphi 11) +- Target platform: Win32 and Win64 +- Required 3rd party libraries: + - **VirtualTreeView** (TurboPack) + - **SynEdit** (TurboPack) + +**Derivative Work Note:** This repository includes these libraries as Git submodules in `Modules/` directory. + +**Installation Steps:** +1. Initialize submodules: `git submodule update --init --recursive` +2. Install VirtualTreeView packages from `Modules/VirtualTreeView/Packages/11AndAbove/Delphi/`: + - Build `VirtualTreesDR.dproj` (Runtime) + - Build and Install `VirtualTreesDD.dproj` (Designtime) +3. Install SynEdit packages from `Modules/SynEdit/Packages/11AndAbove/Delphi/`: + - Build `SynEditDR.dproj` (Runtime) + - Build and Install `SynEditDD.dproj` (Designtime) + +Alternatively, install via GetIt Package Manager in the Delphi IDE (requires internet connection). + +### Building + +1. Open `Source/DependencyScanner.dproj` in the Delphi IDE +2. Select target platform (Win32 or Win64) +3. Build configuration: + - **Debug**: Standard debug build with symbols + - **Release**: Optimized production build +4. Build output locations: + - Executable: `..\Bin\Duds\$(Platform)\$(Config)` + - DCU files: `$(BDSUSERDIR)\DCU\Duds\$(Platform)\` + +The main project file is `Source/DependencyScanner.dpr`. Build directly from the IDE (Project → Build) or use MSBuild if needed. + +## Architecture + +### Core Components + +#### Parsing System +The Pascal source code parser is the heart of DUDS: + +- **Tokeniser** (`Duds.Common.Parser.Pascal.Tokeniser.pas`): Breaks Pascal source into tokens +- **Parser** (`Duds.Common.Parser.Pascal.pas`): Implements `TUnitInfo` and `TUsedUnitInfo` classes that parse .pas, .dpr, .dpk files to extract: + - Unit names and file types (PAS/DPR/DPK/LIB) + - Uses clauses (interface vs implementation sections) + - Unit dependency relationships + +#### Data Model +The application uses interface-based design for the core data structures: + +- **Interfaces** (`Duds.Common.Interfaces.pas`): Defines `IUnitInfo` and `IUsedUnitInfo` interfaces +- **Implementation** (`Duds.Common.Parser.Pascal.pas`): `TUnitInfo` and `TUsedUnitInfo` implement these interfaces +- **Types** (`Duds.Common.Types.pas`): Core enums including: + - `TDelphiFileType`: ftPAS, ftDPR, ftDPK, ftLIB + - `TUsedUnitType`: utInterface, utImplementation, utContains + - `TCircularRelationshipType`: crNone, crSemiCircular, crCircular + +#### Dependency Graph +- **Data Structure** (`Duds.Common.Classes.pas`): + - `TDelphiFile`: Wraps `IUnitInfo` with metadata (usage count, search path status, tree node reference) + - `TNodeObject`: Links tree nodes to `TDelphiFile` instances, tracks circular references + - Tree structure maintained via VirtualTreeView's node system +- **Main Form** (`Duds.Vcl.Form.Main.pas`): Orchestrates scanning, builds dependency tree, manages UI state + +#### Settings Management +- **Project Settings** (`TProjectSettings` in `Duds.Common.Classes.pas`): Root files, search paths, unit scope names, linking preferences +- **Environment Settings** (`TEnvironmentSettings`): UI state, window positions, user preferences +- Both use INI file persistence via `TBaseSettings` abstract class + +### UI Organization + +The main form (`Duds.Vcl.Form.Main.pas`) uses a split-pane layout: + +- **Left**: Tree view showing hierarchical unit dependencies +- **Right**: Tab control with: + - **Tree tab**: Parent/selected file source views (SynEdit with Pascal syntax highlighting) + - **List tab**: Flat list views of units with search filtering + - **Stats tab**: Dependency statistics +- **Bottom**: Status log (VirtualTreeView) showing scan progress and errors + +All tree/list views use VirtualTreeView for performance with large codebases. + +### Delphi Integration + +`Duds.Common.Delphi.pas` provides registry-based Delphi IDE detection: +- Reads Delphi installation paths from registry (versions 15-17 supported in code) +- Extracts library paths and environment variables +- Evaluates Delphi macros in paths (e.g., `$(BDS)`) + +This allows DUDS to automatically discover standard Delphi units and library locations. + +### Export Formats + +The application can export dependency graphs to: +- **XML**: Custom XML format +- **Gephi CSV**: Node/edge format for Gephi graph visualization +- **GraphML**: Standard graph interchange format + +### Unit Renaming + +DUDS supports bulk unit renaming with regex: +- Scans files for unit name occurrences +- Supports "dummy run" mode to preview changes +- Can optionally rename history backup files +- Updates both unit declarations and uses clauses + +## Key Design Patterns + +- **Interface-based design**: Core data structures use interfaces (`IUnitInfo`, `IUsedUnitInfo`) for flexibility +- **Node data pattern**: VirtualTreeView nodes store indices into `TDelphiFile` list rather than full objects +- **Settings abstraction**: `TBaseSettings` base class with abstract `DoSaveToIniFile`/`DoLoadFromIniFile` methods +- **Helper classes**: IniFile helper (`Duds.Common.Helper.IniFile.pas`) extends TIniFile with bulk string operations + +## File Organization + +All source files use the `Duds.` prefix namespace: +- `Duds.Common.*`: Platform-independent business logic +- `Duds.Vcl.*`: VCL-specific UI components +- Forms follow pattern: `Duds.Vcl.Form.[FormName].pas` + +## License + +Dual-licensed under Mozilla Public License 2.0 or GNU LGPL 2.1+. Originally released as freeware, open-sourced in July 2017 by Easy-IP AS. diff --git a/Modules/SynEdit b/Modules/SynEdit new file mode 160000 index 0000000..5659ac6 --- /dev/null +++ b/Modules/SynEdit @@ -0,0 +1 @@ +Subproject commit 5659ac656776ca0be1f8b58fc2678443ad2dfb9b diff --git a/Modules/VirtualTreeView b/Modules/VirtualTreeView new file mode 160000 index 0000000..a4b6714 --- /dev/null +++ b/Modules/VirtualTreeView @@ -0,0 +1 @@ +Subproject commit a4b671404cd0794c77a8edd312d811d48f37dd20 diff --git a/README.md b/README.md index 87889bf..0ad1142 100644 --- a/README.md +++ b/README.md @@ -17,5 +17,48 @@ DUDS is built with Delphi Tokyo, but will proabably compile with all compilers a * VirtualTreeView * SynEdit -Cheers, +## Derivative Work Addition: Git Submodules +**Note:** This fork includes the required libraries as Git submodules in the `Modules/` directory (added as derivative work, not part of the original release). + +### Step 1: Initialize Submodules + +After cloning this repository, initialize the submodules: +```bash +git submodule update --init --recursive +``` + +The submodules reference the official TurboPack repositories: +* **VirtualTreeView**: [TurboPack/VirtualTreeView](https://github.com/TurboPack/VirtualTreeView) +* **SynEdit**: [TurboPack/SynEdit](https://github.com/TurboPack/SynEdit) + +### Step 2: Install VirtualTreeView Package + +1. Open in Delphi IDE: `Modules/VirtualTreeView/Packages/11AndAbove/Delphi/VirtualTreesDR.dproj` +2. Click **Project → Build All** +3. Close the project +4. Open: `Modules/VirtualTreeView/Packages/11AndAbove/Delphi/VirtualTreesDD.dproj` +5. Click **Project → Build All** +6. Click **Project → Install** +7. Confirm the installation + +### Step 3: Install SynEdit Package + +1. Open in Delphi IDE: `Modules/SynEdit/Packages/11AndAbove/Delphi/SynEditDR.dproj` +2. Click **Project → Build All** +3. Close the project +4. Open: `Modules/SynEdit/Packages/11AndAbove/Delphi/SynEditDD.dproj` +5. Click **Project → Build All** +6. Click **Project → Install** +7. Confirm the installation + +### Step 4: Build DUDS + +1. Open: `Source/DependencyScanner.dproj` +2. Press **Ctrl+F9** (Compile) or **F9** (Run) + +**Note:** For older Delphi versions (Tokyo, Rio, Sydney), use the corresponding package folders in `Modules/VirtualTreeView/Packages/` and `Modules/SynEdit/Packages/`. + +--- + +Cheers, Paul. diff --git a/Source/DependencyScanner.dproj b/Source/DependencyScanner.dproj index f1c70c0..76f2ee0 100644 --- a/Source/DependencyScanner.dproj +++ b/Source/DependencyScanner.dproj @@ -1,14 +1,15 @@  {301ACCED-5AE5-44C6-858A-DC66088CECA5} - 18.2 + 20.3 VCL DependencyScanner.dpr True Debug - Win32 + Win64 3 Application + DependencyScanner true @@ -61,9 +62,9 @@ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= $(BDSUSERDIR)\DCU\Duds\$(Platform)\ ..\Bin\Duds\$(Platform)\$(Config) + ..\Modules\SynEdit\Source;..\Modules\VirtualTreeView\Source;..\Modules\SynEdit\Source\Highlighters;$(DCC_UnitSearchPath) - true true $(BDS)\bin\default_app.manifest 1033 @@ -72,9 +73,9 @@ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitor - true true 1033 true @@ -83,6 +84,7 @@ dxTileControlRS16;cxLibraryRS16;dxSkinSevenRS16;dxSkinSummer2008RS16;dxPSCoreRS16;dxPScxTLLnkRS16;dxPScxGridLnkRS16;dxPsPrVwAdvRS16;cxPageControlRS16;dxSkinVS2010RS16;vclimg;dxSkinDevExpressStyleRS16;dxSkinWhiteprintRS16;dxComnRS16;vcldb;dxSkinBlackRS16;dxADOServerModeRS16;dxBarExtDBItemsRS16;dxSkinXmas2008BlueRS16;dxSkinOffice2007BlueRS16;dxSkinOffice2007GreenRS16;cxDataRS16;cxBarEditItemRS16;cxPageControldxBarPopupMenuRS16;dxPSDBTeeChartRS16;dxDockingRS16;dxPSLnksRS16;dxBarExtItemsRS16;dxPSTeeChartRS16;dxPSdxLCLnkRS16;cxVerticalGridRS16;dxSkinSharpRS16;dxSkinOffice2007BlackRS16;dxorgcRS16;dxSkinBlueprintRS16;dxPScxExtCommonRS16;dxNavBarRS16;DBXOdbcDriver;dxdbtrRS16;dxSkinFoggyRS16;SynEdit_RXE2;dxPScxSSLnkRS16;dxSkinDarkSideRS16;dxSkinscxPCPainterRS16;dxPSdxDBTVLnkRS16;vclactnband;dxPScxSchedulerLnkRS16;dxServerModeRS16;bindcompvcl;FIBPlus_XE2;vclie;dxSkinSilverRS16;dsnapcon;dcldxSkinsCoreRS16;dxSkinLilianRS16;vclx;dxSkinValentineRS16;dxFlowChartRS16;dxGDIPlusRS16;dxSkinSharpPlusRS16;dxdborRS16;dxPScxVGridLnkRS16;dxLayoutControlRS16;dxPScxPivotGridLnkRS16;dxCoreRS16;cxExportRS16;dxBarRS16;dxSkinsdxNavBarPainterRS16;dxSkinCoffeeRS16;TeeDB;dxDBXServerModeRS16;cxTreeListdxBarPopupMenuRS16;cxSpreadSheetRS16;vclib;dxRibbonRS16;DBXSybaseASEDriver;cxTreeListRS16;dxSkinOffice2007SilverRS16;dxSkinsdxRibbonPainterRS16;vcldsnap;dxSkinBlueRS16;DBXDb2Driver;dxSkinDarkRoomRS16;dxSkinscxSchedulerPainterRS16;vcl;dxSkinDevExpressDarkStyleRS16;DBXMSSQLDriver;dxSkinTheAsphaltWorldRS16;dxSkinsdxDLPainterRS16;webdsnap;dxSkinOffice2010BlackRS16;dxSkinMoneyTwinsRS16;dxSkinPumpkinRS16;adortl;dxSkinHighContrastRS16;dxSkiniMaginaryRS16;dxSkinLondonLiquidSkyRS16;dxSkinsdxBarPainterRS16;dxPSdxDBOCLnkRS16;Tee;dxSkinGlassOceansRS16;dxSkinLiquidSkyRS16;dxSkinsCoreRS16;dxmdsRS16;dxPScxCommonRS16;cxGridRS16;dxPSPrVwRibbonRS16;cxEditorsRS16;TeeUI;cxPivotGridRS16;dxSkinSevenClassicRS16;cxSchedulerRS16;dxSkinOffice2010SilverRS16;vcltouch;websnap;dxSkinOffice2007PinkRS16;VclSmp;dxSkinSpringTimeRS16;dxTabbedMDIRS16;DataSnapConnectors;dxSkinStardustRS16;dxPSdxOCLnkRS16;dxSkinOffice2010BlueRS16;dxPSdxFCLnkRS16;dxThemeRS16;dxPScxPCProdRS16;dxSkinCaramelRS16;VirtualTreesR;dxSkinMcSkinRS16;dxBarDBNavRS16;$(DCC_UsePackage) $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + PerMonitor DEBUG;$(DCC_Define) @@ -100,10 +102,12 @@ $(BDS)\bin\default_app.manifest false Debug - true Debug + true + 1033 + $(BDS)\bin\default_app.manifest false @@ -146,10 +150,6 @@ - - Cfg_2 - Base - Base @@ -157,6 +157,10 @@ Cfg_1 Base + + Cfg_2 + Base + Delphi.Personality.12 @@ -191,23 +195,15 @@ - FastReport 5.0 IBX Components - FastScript 1.9 IBX Components - Microsoft Office 2000 Sample Automation Server Wrapper Components - Microsoft Office XP Sample Automation Server Wrapper Components - TurboPack LockBox 3 FMX designtime package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components DependencyScanner.dpr - - - - DependencyScanner.exe - true - - + + 1 @@ -217,19 +213,16 @@ 1 - Contents\MacOS 0 - + - classes + res\xml 1 - - - - library\lib\armeabi-v7a + + res\xml 1 @@ -238,91 +231,392 @@ library\lib\armeabi 1 + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + library\lib\mips 1 + + library\lib\mips + 1 + - library\lib\armeabi-v7a 1 + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + res\drawable 1 + + res\drawable + 1 + + + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + res\values 1 + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + res\drawable 1 + + res\drawable + 1 + res\drawable-xxhdpi 1 + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + res\drawable-ldpi 1 + + res\drawable-ldpi + 1 + res\drawable-mdpi 1 + + res\drawable-mdpi + 1 + res\drawable-hdpi 1 + + res\drawable-hdpi + 1 + res\drawable-xhdpi 1 + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + res\drawable-small 1 + + res\drawable-small + 1 + res\drawable-normal 1 + + res\drawable-normal + 1 + res\drawable-large 1 + + res\drawable-large + 1 + res\drawable-xlarge 1 + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + @@ -342,6 +636,16 @@ 1 .framework + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + 0 @@ -355,7 +659,7 @@ 1 .dylib - + 1 .dylib @@ -364,6 +668,16 @@ 1 .dylib + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + 0 .dll;.bpl @@ -378,7 +692,7 @@ 1 .dylib - + 1 .dylib @@ -387,6 +701,16 @@ 1 .dylib + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + 0 .bpl @@ -396,234 +720,441 @@ 0 + + 0 + 0 0 - + 0 Contents\Resources\StartUp\ 0 + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + 0 - - + + 1 - + 1 - + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - - + + + ..\ 1 - + + ..\ 1 - + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents 1 - + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + 1 1 - + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + 1 - + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - + + ..\ 1 + ..\ 1 - + + ..\ 1 - + 1 1 - + 1 - + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + 1 1 - + 1 - - + + + Assets + 1 + + + Assets 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + + + Assets + 1 + + + Assets 1 + + - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - ..\ + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 + + - ..\ + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - ..\ + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Contents + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - - - Contents\Resources + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - - - library\lib\armeabi-v7a + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Contents\MacOS + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - 0 + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Assets + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Assets + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Assets + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Assets + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + - + + + - - + + + + + True diff --git a/Source/DependencyScanner.res b/Source/DependencyScanner.res index 897c3ae..4ae0967 100644 Binary files a/Source/DependencyScanner.res and b/Source/DependencyScanner.res differ diff --git a/Source/Duds.Vcl.Form.FindReplace.dfm b/Source/Duds.Vcl.Form.FindReplace.dfm index 09a5ab2..3f91f3a 100644 --- a/Source/Duds.Vcl.Form.FindReplace.dfm +++ b/Source/Duds.Vcl.Form.FindReplace.dfm @@ -3,18 +3,16 @@ object frmSearchAndReplace: TfrmSearchAndReplace Top = 0 BorderStyle = bsDialog Caption = 'Search and Replace Unit Names' - ClientHeight = 222 - ClientWidth = 450 + ClientHeight = 239 + ClientWidth = 456 Color = clBtnFace Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Segoe UI' Font.Style = [] - OldCreateOrder = False Position = poScreenCenter OnShow = FormShow - PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 8 @@ -33,7 +31,7 @@ object frmSearchAndReplace: TfrmSearchAndReplace object Label3: TLabel Left = 8 Top = 87 - Width = 22 + Width = 23 Height = 13 Caption = 'Test:' end diff --git a/Source/Duds.Vcl.Form.Main.dfm b/Source/Duds.Vcl.Form.Main.dfm index cf24cbf..9fe2fa6 100644 --- a/Source/Duds.Vcl.Form.Main.dfm +++ b/Source/Duds.Vcl.Form.Main.dfm @@ -11,12 +11,10 @@ object frmMain: TfrmMain Font.Name = 'Segoe UI' Font.Style = [] Menu = MainMenu1 - OldCreateOrder = False WindowState = wsMaximized OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy - PixelsPerInch = 96 TextHeight = 13 object StatusBar1: TStatusBar AlignWithMargins = True @@ -30,6 +28,8 @@ object frmMain: TfrmMain item Width = 400 end> + ExplicitTop = 607 + ExplicitWidth = 1039 end object ActionToolBar1: TActionToolBar Left = 0 @@ -39,7 +39,7 @@ object frmMain: TfrmMain ActionManager = ActionManager1 Caption = 'ActionToolBar1' Color = clMenuBar - ColorMap.DisabledFontColor = 7171437 + ColorMap.DisabledFontColor = 10461087 ColorMap.HighlightColor = clWhite ColorMap.BtnSelectedFont = clBlack ColorMap.UnusedColor = clWhite @@ -51,7 +51,7 @@ object frmMain: TfrmMain ParentBackground = True ParentFont = False Spacing = 0 - ExplicitHeight = 23 + ExplicitWidth = 1045 end object pnlBackground: TPanel Left = 0 @@ -62,8 +62,8 @@ object frmMain: TfrmMain BevelOuter = bvNone Caption = 'Click Scan to begin the Unit Dependecy Seach' TabOrder = 2 - ExplicitTop = 23 - ExplicitHeight = 601 + ExplicitWidth = 1045 + ExplicitHeight = 581 object pnlMain: TPanel AlignWithMargins = True Left = 3 @@ -83,7 +83,8 @@ object frmMain: TfrmMain ParentFont = False TabOrder = 0 Visible = False - ExplicitHeight = 598 + ExplicitWidth = 1042 + ExplicitHeight = 578 object Splitter1: TSplitter Left = 0 Top = 442 @@ -104,7 +105,8 @@ object frmMain: TfrmMain Align = alClient BevelOuter = bvNone TabOrder = 0 - ExplicitHeight = 445 + ExplicitWidth = 1042 + ExplicitHeight = 425 object pcView: TPageControl Left = 0 Top = 0 @@ -119,10 +121,10 @@ object frmMain: TfrmMain Font.Style = [] ParentFont = False TabOrder = 0 - ExplicitHeight = 445 + ExplicitWidth = 1042 + ExplicitHeight = 425 object tabTree: TTabSheet Caption = 'Tree' - ExplicitHeight = 415 object Splitter2: TSplitter Left = 497 Top = 0 @@ -179,11 +181,7 @@ object frmMain: TfrmMain Align = alClient Colors.UnfocusedColor = clMedGray Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] + Header.Height = 15 Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoShowSortGlyphs, hoVisible, hoFullRepaintOnResize, hoHeightResize] Images = ImageList1 PopupMenu = popTree @@ -201,56 +199,58 @@ object frmMain: TfrmMain OnGetImageIndex = vtUnitsGetImageIndex OnGetNodeDataSize = vtUnitsGetNodeDataSize OnHeaderClick = vtCommonHeaderClick + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] ExplicitHeight = 383 Columns = < item Position = 0 + Text = 'Unit' Width = 350 - WideText = 'Unit' end item Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coAllowFocus] Position = 1 - WideText = 'Previous Unit Name' + Text = 'Previous Unit Name' end item Position = 2 + Text = 'File Type' Width = 70 - WideText = 'File Type' end item Position = 3 + Text = 'Lines' Width = 80 - WideText = 'Lines' end item Position = 4 + Text = 'Used By Units' Width = 80 - WideText = 'Used By Units' end item Position = 5 + Text = 'Used Units' Width = 80 - WideText = 'Used Units' end item Position = 6 + Text = 'Section' Width = 80 - WideText = 'Section' end item Position = 7 - WideText = 'Circular' + Text = 'Circular' end item Position = 8 + Text = 'Link' Width = 30 - WideText = 'Link' end item Position = 9 + Text = 'Filename' Width = 400 - WideText = 'Filename' end> end end @@ -277,618 +277,11 @@ object frmMain: TfrmMain ExplicitHeight = 407 object tabParentFile: TTabSheet Caption = 'Parent File' - ExplicitHeight = 377 object Image1: TImage Left = 296 Top = 200 Width = 105 Height = 105 - Picture.Data = { - 0B546478504E47496D61676589504E470D0A1A0A0000000D4948445200000080 - 000000800806000000C33E61CB0000000467414D410000B18F0BFC6105000000 - 1974455874536F6674776172650041646F626520496D616765526561647971C9 - 653C00004B0849444154785EBD7D676C24D9757549960CC8B064D980245B0E30 - F44B820C09866DC0020438C1B660182BC10182E1004180241BF60F1956D8383B - BB93673839A79D9CC8C924277286C39CD9DD6C86666633E7D80CB3ABC5FBEEB9 - EFDDAA57D5D52467C8FD7E1C54B3BBBAEABD77CE3DF7BE57D545A7B6B6F62343 - 25A186505153EB549BF7F07795795D5E4DEFD367F67704A5E6B39ADA3AA7BCA6 - CE29ACA873CAAAEB9C92AA3AA79450535BEFD4D76B1457D63B9148C4A923604B - F8646D34FA85A755D1AF155545FFE24159F4DF1E94C57E925B1ADB9CFD2CB6E7 - E293D8B1738F1B4E9F2B6838455BE0F4A5270DC7728A1AF6E495356C7E5411FF - 09E1DF4A6BE37F51541BFF5A241EFF423C1EFF644343831325605B5EABB74024 - DAE054D6C59C0A42557DCC29A9C636EAD447342AE9B569970BB4BBB6AE9EC648 - F7A1BAAE8EFEAE73EA0835844AEA37FEC618868DCF7A21F4CDF5822D00A59E7E - 64A8AC8D7CBCAA2EF2C5B2DAE85FDF2F8DFECFB582E891B30F62790772634D3B - 6FC606B75D8FCFBF732DFEE1C6AB71B5F16AA37AE71A21DBC3BB394DEA1DC2C6 - 6BB4CD6E529B729A3EDC71B3693EEB76D3E0A1FCC6A6F38F1BF3AE17361E7954 - D9F83F95D1C6BFAE6F68FC625DACF1E3616D594F400055461440D818AF15A16F - AE173E4A01D4D4457EAFB82AFA4FD94FA27B4FE4478BB75F8F8DBF732DA6DEBC - DCA05EBF14576F10DE26C2413611AA36DF68565B085B6F6A6CBBD5A2B6DF2460 - 4BD8762BE1622B61CBCD84DA74BD85C4D1A2365C6D516F5D6B516F67B7F07176 - DD6E1E7FEF6153F1ADE2A6BD15F54DFF148B37FD5E581BD78AA0003E0A2184BE - B95E584F014C4F4F3B653591AFDE2E8AFCF8F4FDE8FDEDD7A3136F5D01D90D44 - 7603456F5C6D226CB9DEA4B61276DF6D5107EFB5AA138FDAD4F9C24E75A5B84B - E594F5A85B1549C6DDEA5E955FA39147B85DA971B3A2575D2B4BAA4BC5DDEAEC - D32E75EC51A7DA7FAF5DEDBAD3A6B6DF6E53DB6EB69230126A437642BD457827 - 2781734D9C2F68BE7FAFB2F9C7B50DCD5F455B8308EBD34AA8436A2004052008 - 1BF31745E89BEB85F510406D5DE477F34A22FF79323FFA78737674E18D8B3126 - FDEDAB0D4CF8D6EB8D6AE7CD26B5F76E421D7FD8A6CE11D9D74ABA89CC1E75BF - AE4F3D89F6ABC28601F58C50C4185445F110340ED1D600AF0985B46F416C40E5 - D7F6AB5B957DEA6A69529D7DD6A38E3DEE527BF33BD4CEBBED2C8A2D37DBD4DB - 39ADE410AD6AC7ED9685B38F5B1E3FAE6EF9CF7863F3EFAE4500F5542B400052 - EB848900081BFBD522F4CDF5C25A04505C1DF9E69582C8298AF4D1D70DE91B89 - F42D398D6A1B91BE8722FCF4E376955DDA45519C544F63FD4CB24734218D683F - C1368AADED72E0FDE9184F6283EA4E75BFBA52DAAB8E1774AB3D791D6A576E07 - A58F76B531A78DB1272F317AB33471AABAA1E59B617D5C099168D4A9B18AC6E5 - 841036FEAB41E89BEB8517150075EE63CF2A23AF9CCC8FDC7FFB6AF4C3572FC4 - D406B2F94DD78878907EA7996CB9832CBC471544FA88EC154817C20C3C22873D - 34F951D2349211C58CC077E818458487914175BDA24F9D7A925459799DE40E1D - 6AD3CD76B521A75D6DB9D5FAE185A7ADF7ABA289575A5A5A3E16D6F730446331 - 8766334E9460CF1ED65308A16FAE175E4400851591EF1CCB8D3C7BEB5254BD46 - C423DA3767C7D5F61B8DEAE8FD84CAA1487F0CD239D235F12B91EE23DB10E611 - 6991DB3CFA7230DFB78F8573DC8B0CA94BA57DEAE0C36EB58BC4B0ED7607A508 - 08A24D9D79DCFAAC32DAFA9DB03108224653CC3A12418C0011AC5608615C6442 - E89BEB051100E6B4611D04680EFFE714F10FDEBC1851AF5E88AA8D57621CF120 - FEC4C35675877279A14BBA457C08E9BE0867C25720BA65549512F476EC05A1BF - CBDF0F1ED79CF749C3B0CAA91C50871F2749085D24844EB5F17AA7DA4CCE70A1 - B0ED416DBCF5CFC3C644D0108F3BF566ADE14545B05A2184BEB95E8000F46246 - BA006AEBEABF74F971E4BDB72F477EF173227EC3E5987A9788DF4A39FEC8BD44 - 28F14CFE0AA47B91E8275C93152471DC4559221CA50669EF59DF0D1E1782B2CF - FDB461445D2B1F50071E4008DD6AEB9D2EB5E14687DA76A7E317B7CADBDF4BB4 - B67D29383E40635393136D6C74E2240459745A6F37087D73BD80396C5000D4C8 - 8FDD2BA9FFAFED3991819F9D8BA8B72E53D4A3A227BBCFBADD44157C17112FF9 - 3D24E27DC47B911E8CF074C235599AC48970B4AE12D6774A7DDB4CA2D06D7A14 - 1B56678A06D4EEFB49B533AF476D2121BC4D8EB0FF5EC74051A4FDBFDADADA7C - F5415373B313231134111A2D2140042284B58A20F4CDB5424E1C14404D6DFD97 - 4FDF8BE4BF7A3EA25EA7A87FFB4A54BD83CA9E0ABC23F75BB99A4FCBF1CB101F - 8C743FE9448289589B308FC849552E680BC35400D667E63BF631C2C4E13A8625 - 08B4F37AF590DAF7B04FEDCA4FAAEDB9DDEADD9B5D6AE38D4E75A5A8233FD1DA - FE6511404B22E1C45B5A9C6612822D025B0899DCC01680208CABD037D702FB84 - 108034E85169FDF7B66647867E4EE4A3D07B9B723D4FEB88FCD38FDB7C557D46 - E22D8BCF44FAB284BB247AC45658D07F4FD3D603FEF623FD3B1ECCF103821097 - B0C5901F1951870BE0067DE406BD94167AD4C69BDD6ADFBDAEA1F2868EEF4100 - E4084E536BAB932021D0EC214D08EBE106696FAC056927D38DF8CCE5C7F5C7DE - A0220F51BF812C1FE4BFCB8B384D34ADEB5485512BEA5F98F84CA46B226CC23D - E22C42DBD708EB58728E8C82A0B6B962A0763F8C8DA9234F86D4EE07FD6A477E - AFDA919B549B6EF7A8CD77BA556E75D7B18E8E8ECF24DADB5908AD9610440441 - 21D86EB05A11F8FE580B8227C189ABC8F28FE446CA91EBDFA4A867F2A9D87BE7 - 6A5C6DB9D1A4DE2B6837966F157836F164F5E9C46788761A608F704D7A1AE141 - F2808E99E5D11EF29E8D90637ACE610B225D0CC0C3867175984530A876DDEF57 - DBE1067793EAED9B3DEAFCB3EEF2447BE79749084EBB11C24A6EB0DA9420BCF9 - 487C59040F8E133EABACFFAB9DD7234929F450E5BF65C8DF4C953ED6E9B14CEB - 9FD209F95671B70AE23D7B970137040488B189AB1410C18C8E591715816DF0B5 - FEDB7F1CFBD869E735EDB19D016D1621DCAD1F53079F0CABDD0F87D4CEFB036A - E73D2D848DB792EAF0A39E64A4A5EBAF3A3B3B1D0821931BAC26250479027769 - 64BE288207C5891E95D4FF074DEFE690EF11F520FEED2BE6824D4E93DA79BB85 - 2CAED723DF8E7AB17B21DE25DF22DE17ED32A821916E0871C9667884BAA476AE - 0299F695F75D9873C2395C586DE236FA9D0162B85831AEF6178CA82C12C1AEFB - 836AC7BD014A0B7DEADDDBBD2816E7AA1ABBFFA3ABAB8B45F0226EB092084249 - 5D2D8207C309EE17D7FF98F2FD87AF19F211F94C3E45FEBBD94D6ADBCD6675AA - A033847CAFB2D7116F114FE0DC19205E0FA435B80C3DE85E541A62842C435C55 - E71C6DE7781B84BC8F6D709FB0F7F4FBDEB1199620BCB6A06D5E5BB553692114 - 344EAA23CFC6D5DE823195F56858653DD042801B6CB9DB87B4F06145BCE7C710 - 41D00DD6228250625703FB20000E9C5754FFE6EB1750ECF9C9C775F98DD98D6A - F3F566B537AF55E5D5F4B9E44BD487D9BD6DF5CB126F065706BB9A0888F4CCAA - D9D900E6ECD7736ACE82EFB300A2C93955DD954E7A10E962D162F0D247063118 - 215CAE9E54079F4EA83D10C143B88116C24E7283AD791042AF2A8B27DFECEEEE - 766C379094F0322208257725D8C40386FCB75E23E2DF30E48BED33F9D7F45D37 - DB6E26D4D9C26EF5CC253F73D4EB39BC897A8B788E9A00F188F828089F995133 - 843012FD30C4CB96C8E7D7F419B6E1DF21E0F8B48D91206CA23DC233BFBFAC33 - 98FEE4374C930B4CA9FD2482BD05E36AF7A351AA0B46D42EE306DB2082DC3E88 - E0AD9E9E1E1601DCC01641A6BA20930842095E0E61E4DF2BAEFF09A25EC847E4 - E32A1EC87F9BC8DF98DD4CD19FE06BE7372B29FA0DF976852FE487E5F9B088C7 - E0457B34E136401223485E009A7CFB3D10BF0CF9849919C07FBE586F38E9CBC1 - 2F064F08852D33EA58C98C3A5038A5F63E99242718577B1E23258CBA6EB03D9F - DC804450D1D4FB1388006E202208D605AB114128C9991046FE8392FA1FEA397E - 20F2AF68F2DF21F2715BD5E6EBAD7CBD3CBF76C023DF67F9203E3CEA6DE2AB3A - 69E0A7A7D5F4B49F0817B3D81251B40D23310DCB58BF0F744C719850509BAABB - 52AA4A1042BC8D74579851A56D33EA78D99C3A5434A3F6174EAB7D10C1137283 - C7DA0D382D9008B6E5931BE4F7ABEAE6DE1F26934957045217BC88084289CE84 - 20F94F2BEAFF7EC3E5C812AC3F98F36DF237DD68555B6FB7ABACBC2E75AF7ED0 - 23DFB798E3CFF5C1A807F1D34CBC068B208C088226CA901646A60FCB473D00DB - 9F85B0585CE9D06DF2DA57D36D09218320245D78DB5955D63EAB4E94A7D4A1E2 - 5975E09911C153ED0648097003A404B8C15612C1AE7BFD4BB1F6BEBF0F13815D - 1C2E278250A2C31024BFB2A6FEEB5BB223A358D74F2BF802E46FBAD1C6974277 - DFEB56B9B52480652D3F3DEA6560FDD0EF871102E854904EE64B818FA38F1776 - AE198B7C1B69226021007E316801CCA992F63975B262411D2E499100E6D48122 - 4B081001DCC0D4062C82BC2175B06060B4A3BBEFEB2202290E572B8250B28308 - 925F5B57FFF903B7238D3F3F171EF9C8F942FEE69BB867AE83A6315D2A2B3FA9 - 722A07C3C9772DDF8BFA487726F2010C3C9C20408681D4023A7A5F0E12F9E228 - E9E7D1ED407B745A4A07178C4101B8AFFD22789248910016D5E1D27972817975 - B038A50E1691104804FB48047BD90DFC05E2E6DC2175BE64A031D9DBF7798840 - 8AC3D58A2094701B36F946001F7FEF7EFDF59F8690AF231FF7D87BE46FBE45E4 - DFE952DB727B54D6BD3E75BA785015367AE4875A3E45FDD4D414217C50052C80 - 34522C18F2DC080E10BC2CF03D7E8D63658E7CD986B5CF05F503F581AF46B061 - 0490D7B8A04E549200CA21820575B0C413C17EE3064809EC06564A78974470BB - 66E07A5F5FDFC77B7B7B338A206C76104ABA8D00F94E7E71FDFFC915BDF49CDF - C491FF2E55FC1CF9867C5CE9DA9ED78B9CA50E3C1E5477EA208070CBAFEB9A36 - E44FF1C0850EA80B210342C82C0697489BE065C0B99E890732900F84B62904E8 - CBF494AAEFC17A82263D28867272868BB54BEA78C5923A52B6A80E956A111C22 - 1100EC0422022B25F02C8144B0257F48552506FE8F44E0848920D31431947441 - 90FCB2EAFA3FDD7839920A2EF448E48791BFED6EB7DA7E37C9CB9ABBEE0FA8BD - 8F86D5A9E2315592D0E4B3000CF942BC2780558800364C64601B4A9221D38E64 - 269A5D01A0BFC521CC7B2C14EC671F270DFA7C68C36A8460F7CB7603D93E685E - 5427AB9EAB6315CF49002482D225759884C03042B053825D1740043B1E8CD0D8 - 0EA5DA93037F0A1184D50441112C2B009B7C23805F3D7C37522BEBFB76F4B3ED - 23EF13F9B8F11177C36EA1A26F2BC8CFD5E463350B5398BD8F46D4A1A7E3EA46 - 1D6CDFB6FC494DBA35683CB069031F8447964BA0EF736B3F16018105A1FF96EF - 69D2B1D5FBB8FB5AD0DFF110FC3C147029D39F30110025EDF3EA5CED7375BCF2 - B93A0A01941B11100EC10DD811FC29016EE0CD12B408B6DC1B5197CB876A0706 - 067ED51641709D00F50044001708251F0890EFDC2CACDFFC33587FA68A1FE4A3 - E2B7C8DF16201F568565CE038593EA68C9B47AD4A417412627FDE47B03688871 - 09CB0C5EC5A339BD6DF33E226C08C92EB0AF418078DF39AC6563BD6AE87D9611 - E61CD237C114F519E45712B263CFD5A9AAF7D5D1CAF729FF1B01181C26116868 - 11F89C202082DD2482CD2482D2E6A1CD2402274C04B2622845E1AAC82FAFA9FF - E3B7AF44165EBF08F2714347807CB7E8D3E46FBB1388FCFB9A7C34100DDD5F38 - A50E17CDA83395736AD28A0A448A0C9C0C766A2EA552A955C2ECEB12658E6513 - 6A03C484BD2F486B0B1F9BCE316F9D7359E8EF8950E4B82C00AA0920FC3B8D4B - EA74F5FB14FDEF93FDBFAF8E105804659610EC94B08208763EA4312E1859E8EA - 1BFAE3E544203383D508E01327F3220588FEB0BC8F8A3FADE8BBAB8B3E897C54 - AAB0283410790B0D3E5C3CABC6C7C7490014FD3418B07A196C0CDEFCFC3C6361 - 616155582460FF546A5ECD61F089A8D5882013E47B767B16E6E95C84C585C5D0 - 368441B7490B42DA83B420A29F9818D7E4138E12F9365C17004C4A1011000782 - 223035C1D6FB63EA56CD48C1D0D0D0272082E58AC295C8770ACAEAFF1D2B7D52 - F5CB1A3FC8E7F97E5AD127E4F753D53FC80B1698B3625D5BC847834747C7B400 - 8CFDEBC1D603BDB8B8A896969618CF9F3F5F15B02FBE27833E0F215822082339 - 13D2C85FD06D5A346D5A75BB96FCED6211705B66B9B89D9C9850E32480B1B131 - 26DA25DE1681ED048088C0A4045B04323BD8F3789C8AC251D5D835FCEF838383 - 4E7F7F7F4611641400C827FCDABE5B91C4ABE7D3AD9FC9CFF65BBF147D207FE7 - 7D8F7CCC5985FCFD54C18E8E8E52A7475900133408B0440CF80293BF7AD23341 - 0F381C040200999AD44C8B464130F904B8088EB34011FF1CA4BF1F7EBED50042 - D0E28408741A6001D0188C51308CD19820D285781B10840840A7072B1D14CFBB - 22C0D88A136C7F30AECE978F268687877F4D4410960A42C91701E415D5FF2C58 - F56BF2FD8B3D9CF74DD1B7DD2EFA0CF958CB468EC2F46574648405304EAA47E7 - 510C613052146D18A0E7CFD72E0000228013B80EE02BEEEC42D37A6D0904570B - 914E1617A94DAB8DF8150007419BD01EF419E2D702A080208C8E8C32C942BABD - 0538151821D822C0ECC07502AC1398C5A26D2482BAF6D19F512A70C2EA01B840 - A800407E6D5DFDE7765E8FF4BF667EB523D16F4FF9C4FAB7DCB6ADDFABF8773F - D2791F4B9850E7E9722300026C6FC2A4000CF83CD9A3D8EBF4CC946A6B6D7A29 - C8604BC4F96C97065DAFDA69E26539594F35F56732959CA3024ED2911C736464 - 28F49C2B2199EC524B24EC254A096813C485143031314902D0D18FA000CE5613 - A920580450EE1781EB04480D4604F6ECC05E31DCF968429D2E19EB1F1A1EF99C - 8820980A32467FAE15FD7C89D7ADFAF5828FAFEA87F513F93B90F78DF5BB451F - C887F553C34686876910B503880030FF6701D0602F91FD03C3C343EAD1C3DBA1 - 78F8F01623EC3340C8024400EC00740E2D006F2A86D71CF510050B82FEA6FD58 - 00E41CDC262BFA4166D83981E5DA545D55EC8A1B8282DBE15C103F9C10F5D0E8 - E8881E1B8244B9906E63D9746044E0D60334F6DB1F4EA8BA8EB19F512A70EC7A - 405C2034FAEBEAEB3FBBE756A4E335CEFDFEC22F18FDF67C1F3732827CB17EBB - E8A3065007B50080315304EA0290EC1FD5B52B8041DF00E6E666AB9B372EABEC - EC0BEADAB5F38C1C7A7DEBE615959F77DDB7AF2D003B0D880056820800C28180 - 3209E0C1839BEAEE9D6BEAC6F54B2AFB9AD7AEEB3917D5EDDB57D5FD7B37DC7D - 6D01A07F98A5C07D5800E3133AFA0DF97A7C865D926DE2EDAD9B0E4800692240 - 3D40638EB1DFF968529DAF18EF18191DFD2C44104C05A1D1FFA82CF28357ADCA - DF8B7EFF9CDFADFA7329FAF343A67CC6FA87878628FA87B408864D0AA04E630A - E40A80061B020086873C016030AF5C39ABCE9D3DA94E9F3AA64E9E3CC278EFF4 - 3175FEFC291EF4DCBBD9EEFEEB2D00FB782200900F415EBE74469D3D73429D3A - 7594DB74EAE45175E6BDE3EAE285F75808F7F2B5385D01A07FB4456D01D7D102 - D0B3001101C6476338A313705A60E8CF832270D70868ECF73EA154F07842C57B - C67E40E27282A9202DFA099F389A1BA9F8B9897E3BF707ADDFADFAF303D65FE0 - 910F254200C343C601D039A89D1C40A7005B0034FDB304904F0378F5EA39F51E - 0DEAD12307D5C1037BD5FE7DBB19070FEE53C78F1D52674918393917D4C307DA - 826DC23E2A0120F2413E883F72F8803AB07F8F6E176D0F1DDAAF4E9C38A22E5C - 38AD6EDEBCEC178011010B80CEE30A80C682239F036498030570A31C2220C27D - 42307FCBE799520144B0E3F194BA513B514142FB045CC09E15A409A0B4BAFECF - DEBC14F910D12FB9FF6D3C5A2DC39CDFB7DA07EB7F6C4DF9A801A4382D00CB01 - D049281EF6276B003E07302900D17FE1FC6975ECE841B56FEF6EB56BE70EB563 - FB3646D6AE1D3CF0274E1C6632F2F272420580691CA67338872EFC96075F2720 - C1F00C80A67FEF3F7F9FA77FEF134400B07D443EC8DFBB274BEDDCB99DDBB473 - C776B53B6B973A44E2845BC19DE0161080A4372D00A4005D038C8D8D733068EB - 1F71C9E7F1A271F3B980148496185C170888E020EE2730A960DFD369CCC43E4C - 0E8DFF198DBBEB0248052EF922806B05911312FD92FBF1FCBC4C851F2FF870F4 - 6BEBE77BD828FAA1BC23C52480C141EEC890E994A81C450F3B000D429A008C03 - DCB871499DA181C68082F06D5BB7A8CD9B3631B66FDBAAF6ECDEA58E1C39C0A9 - E00E456598003C07D002E0A20F4230D07F7B45209687B176B09C0320E723FA21 - 4090BF75CB666ED396CD9B590810EBF1E35A984803557000433EFAE70960C2B3 - 7F7646433EB92580E0E1CBC3442E0BC125DD13804F04562A3854A253C101930A - E002452D1327E87C0E5281B8808F7CC2E769EA37881F71FA2B7F1DFDB8D2171A - FD0FCC6A1F453FE6FC52F8D1494800443E41A701ED02EC042400D8DFE4A4ED00 - 8B0C57001469B07F583F061A03BCE9DD7719187488E2F0E1FDEADCB993EA0EB9 - 05BEB36411C602A048D6D18F14800B4E02108E2568B3357F431C5838C23ABE2D - 001CB79504806A1F918D9C0FDB07E1201F6D728549AE70ECE82175E9D27B9CC6 - 4400D23F57001310001C60540D1BF2B956E2B1D202182408C1DA0D0CF1194420 - 178EEC540017C82A985667CA270769CC3F0F17A073B10BF804505811F92E2EF8 - D8F7F44BEED702088F7EB7F033B95F47FF1C47BF168176012F0D10C8EEB40026 - D659001469863016C0BCB17F104C736F380ED20E8487AD8749BE30056220169E - 061A01C8F15E56009202C205400E304202308121C4EBC0D163272E00A4D50216 - 201016892F1578AB84590553AAAD7FE2BBB60BD8D1EF5C7818B9F453ABF89325 - 5F59F5E3451F2BFA65DA672FF762FEC9D13F40E403DC09CB0544042400A81F79 - 108B2F7E010CBCBC005068C9A28B196C5C22E60807F1E6BE03168201DAC0A260 - 01C0153C0108F96B11001C40FA660B002B811000C6428ABF21B67F4DFE200582 - 8CA3E700FE5981A40511000B850420F710D805E1F647D3AAA069F212059E232E - E00A80E6FE9FDF7983EC9F1C20E3AA9F44FF5DAFF297E847EE97CA1F79677060 - 202002BF1320DF6111048390EE006B1480C1C2A25E0892554016804D3AB900B6 - 2E26B41078262002E00B3A10C01209A0719D05A067007AFA270E40E40B200233 - 866E749BAD2D027605E30C2C00C07601B336B0FB292EC14F0D8E4F4C7C5E5CC0 - 15407155E49537A4F237D11FBEEAE72DF9E2274BF67ABFE47ECA2D0C2D02023A - 02807CD3397456AF054C70E5AD1782D65F005C001A0710E24134520FB613B600 - 081080BE340D01CC1B37D1583F01602570CA4C0147D90174E127C41BF2450083 - 7A3C855C37D241B82D0482ED0261B5C01E9A11740F4DBE222EE0DA7FCE93C8AE - 9F89FD078A3F7BEA675FED43F4CB4D1E92FBA1B481FE7E6A70BF4F00E2005E2A - 2001180740C4E92B81EB2C008A605903608B2782713E1724026C918BF11A5BEC - 83C210AE244BC182751300B509ED810050006A0118F2C9F67DE49B31C4988A00 - 04E2044111B8FB84D4023B0A66701FE62EEAB7031710017CFC786EA414977DD3 - 8ABFE0D42FD7BBE013BCD48BE8C789687AC180083C27B044000190E25D07A001 - C760E3A60E5C7D5B770170F4930010F134E813E3960804788FC002A0E8C47410 - 05A47DBCF51100D2122E0669018C500108FBD76302E2EDE817F2C30500D8C407 - D340D88C20EBC9ACBA139D2EA57E7E1C2EC002A8AB8FFCFED6ECE8F41B97D2ED - 5F04E04EFDF27077AF5EF563FBC7BCFF8917FDFD7D447A5F9F2B00E9845899EE - 9C7601A89F05407371080084E1DAFBF050FF4B0B80175C0202C0BABBB67F3FD9 - E3948341028B82DEC7DF700111001683D655002CF0456E13661DEC0026FF6BEB - 37D1CF6335A806D8FA114C036E5079E49A2D2128001101A783800BEC7D36A74E - 96CD4C8F4F4EFD3EF5590BA0B43AF2CA9B6957FDFCF68FE8C7451FEF660F5DFC - 71E54F7985A39F0540E493085800DC689DBFD01956B5011C009DD702F01C00A4 - AD4500B2E0E21300EEBE810040B2211C5B06916EFF8DF6801C16C09C710073BC - D6C4CB0B00F588F40F0B4D702414C1B2F80301E8B13151CFD063280813804BB4 - 106F098011700114E8FB88ABBED1E957684CB4006E3D8BBC85C7B406ED3F6CE5 - 8FA77E56F10701C8B22F14D6C7028003181730F6C52E603AC74E401DC6621006 - 1C059AE7000BF4D9DA1C408063E10E5ECEFF6CFF24001AF4719A7ECA96C9C7DF - E3B83A89EB135A00702554EB7C2C71809715406540005460C291780A48E46356 - E445BE2D002FF207309E14582EE116EC5A602501701A783AAB6ABAA6DF6201E0 - 0782171F4673F0646ED7FEB1F46BDDEEE55BF933F66F4FFDC4FE8F94CCB902E8 - 330DB6153C4862F05201A500380011B0BE02F08AAD799A59A098C34FCCB8D063 - B2C778E0798B9B31987C2D022E4AE935C841DAC03D85B6A0D62400D33711001C - 698CA680C3C3BA00E4E867D2C9FAB165E23D0100185B7B5148C877FF36E4FB04 - 00E08E62F34B230860D7D339F5B4652687028305F0C943B9D13A9F0096A9FE65 - EE8FEADF17FD2480BEDE5E02114F6021A0E14604FD6C67E8985636AA5D54BF2C - 0022E8A31300F2FF144736934C750788B621A2D0F7298E71ADE009408EB77E02 - 80283D01C0FE755048D44BE46B11E880E2A062F432A936F1F25AC84F13015CC0 - FAA9591609E04674B68E02EF934E555DE40B3BAE4787B9000CCBFFC1A5DF40F5 - 2F2B7F50562F048046D2561AACEB01230623009D06CC6210228E049082008830 - 60FD0480EB00BA00C495C7313A17067D948806D94C3AFDAD5F6BB0004C5AF20B - 60717D05402989AF02A2F8830380781AA34143BC269FE08EA3265F0460136FFF - 9D5100561AD8F72CA5CE54CE0E0F4F4E7FC1A9AC8BFCD1C62BD10F365CD6F9DF - 7FC367FAE28F2CFD06ED9F05904C6A11B010B418B47ABD0E71E77876400E40EA - 47544200B86883885D6F01600D00D106A18170CC3C5C8074B3C5DFE20E5297A0 - 80B48FB76E029899A5734000A36CFF3AFFEBC0E837421840E0B8C46BC8D8DAA4 - 03B6106C01B8EFB300CCF23017822945E9FA83E1C9993F729ED5445FD97025A6 - 200044BF2D005CFCB1F3FF724BBF38706FB2D7120035DA6C3D1700B4086079B0 - 3FD82F8A34145C201F22181CFC2804806817F2CD7D899482E4B5FB1E04406E81 - A9E0BA0AC0881BFDC3D2B408404FFF8CF5B3439AB1E271D390C8C7D8F6F6265D - D285E04C02B03F1301E83A00C5E09CEA1A9B79C5B9571AFDD16B64FFB8F6BF52 - FE97D5BF34FB77059024D2C9054408960BF4B1A20D2C0160C04500189CF51180 - 5E50F209C08D7E5C77D7AB6F3C07B7B7F4992B006AD37A0A00D71574FFD02608 - 40DF0BC8F99FDC501C528F51807C1354201F10726D82EDBF832260586900D706 - 763F9B538DFDB33F726E1745DF78F5627AFEC7B57F7EB8C332F9DF5EFD1301D8 - 69C076837EB31521C0EED205A0D3C0DA0480E916EE048203A4788D01391DE761 - 0118B28318A57A049F613FB8C534158E5A0014B946506B128021DF2700122266 - 43980130F92C0010AF2B7E14D41EF9041E5BBF0082B005805901FE6691040550 - 9852753DB36F38379E46F7880030FFF7FDDC8BF2BF27009DFFDDD53F93FF61FF - 2280644F8F4A9A468A5DB94EC05B4FD9B03CCC7FD30530BF260120C7CA7C1BC7 - 442E47550FF235D9B81FC1104F0274B77CAB1A04801FADA02E996401D8C74B24 - E26B1480E74A98FD680198699F897C1D2C867C7AADC711E3476369024C0420D1 - 1FDC060580F7A40E8008C0551609A0BA6B6E8F73AD207AF2D58BD6E5DFB002D0 - 77E78FFFB62F2900A1AC64520B408B008A95C6DBD01D43BEFBA8042060015081 - A9ED56930ED711E84518B36561E87B15D126A40DCC20ECE3AD4D00BA6F7E018C - 70F4632C2430D2A31E5B3DA63CAE9600042099C13F16D102085F10F25C20EB69 - 4A9575CC9D742E3F8EDDF8F985F015C0E00290148062FF280025FFE3A03DEC00 - 0288000DD61D900E890B20E7E1E60744DC472700FD030CB15B16002EBB1AE25D - C87B589E3675000B8088B28FF7F202280A1500DC08F9DFB57E333E2EF9008D9F - 102FE3EA46B821DE2559603EF70900100720AE763D9D57CF5AE76E38171EC5F2 - 20009DFFBD0B4072F70F0A40990164410094FFED6BFFB6003805F45043CD562C - AB0F5B748E3B882D75963A2D17845C01F054701D0540168E63630AC8E413B8EA - 36E0255879CDD029E1FF87009066203A5DFD87E47C048E4D3EC695B63DB40D23 - D77501827CCEFB98FD58289603EC24013C4DCCE5050440F99F0480FCBFF9A627 - 001480F2A30FB700940B4026FF8B03B00B1868D51A21B86EA03B08C563E02100 - 0C36A25506682D02409E95291772B82B005E723557DD0CE161AFB500749B4014 - 936F8EB7AE02E036910060FF34ED738977C9A7B183F51BE2BDC0EA4917807561 - 08080AC0BD706409000EF0B43595E79C8700A806089B01E8EBFF700023007B05 - 90042017805055B200BABB490000351476C50DD61D6011881090122000CA7FB0 - 5CACD4812C0C0E2EC1AE550002BDE66EAEBA9935779C53EEB8E19B2FF83DFD37 - EEC1432D30CA0E2097A935F9D8265AD62000E36E009699710D62840429F95F13 - EF8D931BF9EE386A606C855890CA511F2200FBD67171069F0314CEAB2710C085 - 87B1DC572F66B803C808206D0A8802B070866A00BF03745B02E8E9B61BAE3B24 - 80C2D169E43F144298A6E112297E21BC7601C84063C91557DDA6D8D2116D201B - 4517936D208290BFB11F168CF472B016801C6F2D0240BFB0DC8DAD080082E4F9 - 3F0BC023DE239F206348E38931058458168029FC6C01F86A00B31F23E8008954 - 2E8AC0EBCB0A40A68022006B09382D0574776911A0A12C846EDD78EE888674CC - 750012008A34F9310606084BC56B1700AE03D857DD48004234098F117C6D16A7 - 5030F2452A9F00E6D72600FA3E8B800530CDA2842039FFB3F5FB0560932F63A9 - 05D0ED922B2208C36A0450D496BAEE643F899D78ED9216C0BB560AF0DD03903F - 40F9DFDCFEED13C01C3F9880054007EE2601782290061B05B310B0F504800147 - 258C68C305122D80D43A0A405F75C345172D003DE7D6A4E382149660CD6B1463 - F45ADFB1AC7FB300A2ECE3AD2D056871A37FB600500CA3F8C39840002C021E23 - 106FC18C29C6D62697AD3D80A3BCF58B4452C05123822C4A01159DA913CEAD67 - B1ACD78D007C0E101080DC0310BC01D4750008A04B930F21B8E980B649404460 - 3AD74B9DC6A0C372E1007E01F4AD9F00E8D8283421004DB890ED6D35FA391F43 - 241F8500847C16C01404A0AF03F419077003C4E47C193B6CF598E26F1AD7AED5 - 394050000C225F5C60F7B37955DB93CA72EE16C75E5B4900B20A18260038002C - 0507ED620108A8D1D458E9449221222001700DA00530FE910A40AEBA41007ACD - 1D44339874F99BB6B84A4969422E53AFAF0074DF5C01902B890050000AF11A18 - 372FEA053CAE96007CF61E80EC9349007B8A1654B42FF59A935B1AFBFE9B5720 - 00FB4720FEDBC0562F804E2D02420F35148DD5CA35908E4100D4690C3C2C1702 - C0BDFB2F2580435A00F825B14F001471B60320FF23D265CD9D8BAFC06B6C2112 - B8852B003A4E9A00AE6A01EC7B59014C53618A3641005C00F6D298608E0FD2BD - E897B16367E5F1D463BB5A01E0F33001E039C4FB4B1654C340EAFB4E7175ECEF - F0EFDC6C01A4FF06305C00721D80054007EDEA240174EA460A5808D219D33100 - 9DC6A02332590034379E4BE9C7B2850960D77202386B090084B1DD920066A406 - D0830DC131E934E84C38B6E6E214830540A2449B2080A929F778408B2D80132B - 08E0180470C627007E7E2101D35E59066607A0BCCF63C302F08887E56B0174BB - 81C502084CF16CE2054101480D20023852B6A0FAC6537FE7D445625FDF941D7F - 7F43F019002B0840EE031001E0A02C00CB057C301D1321A0E8C1A083180C36AE - 90F173FD4804AE00F0F3F05508000F89B87DEB8A11000659E75BB9EA869C8EDC - EE91DF67EE59C4D6BC4760072097C012F538AE089A1B55703C5B007868050B60 - 6FB800F0CC003CBC827F1E7EEF864F0058EFC0EF13B1FE0147620780008C338A - 00C4EEEDC8EF36631B3AC70F403E1701308C000E1257C7CA17DE9F9A497DDD89 - C6629FDB7D2B3EF0E695740104AF04CA2CC0BD10F4CC2B0271B3C1F172114117 - 6F330A80C0022012B018A305A01D00031414009E0F80874380F4A000F0448EB3 - 674FA85B460076B1C5D3403A76DA9A3B8877AF5002F85B0B00A4F8AF5178C76B - 6969E0073E5CBD728E9F0202016CCF24003C1FE0F2597E56901600F58DFB97D2 - AE0407A07349FED7116FC648C64BC68E5C55C6F4649517D94CAE5903088AC0FD - 1C90F78D00F6952CAA0BB5F30324C8CF39D591D8278EE6C76B5EBFE40940A681 - 2200FB57C061B782C92C0007D7694043148B4E78AE808EE98210442032312562 - 0110F92C80FE5E26138F58C19338320900EFE1333C44421EC72264710AA01A40 - 3BC0281777701C7D35D2100F01B008E83DA424888048410A409BE41A85880002 - B87FFF86BA42C49E208241749A00E86F08039FE3D9460FEEDF5495240011373B - 0009002B93105C12EBFD341612189A788F7C715419D363951FB8E432C116E93E - 11C8E7661F760A23803D458BEA76C37CCDD84CEA134E241A73AE3C895F79CD12 - 802C04B9D34008C05A0892E7FEC952B02C047121280240C32102AE09F05A04A0 - 81340032900731D828B8648060BF2013510D7B479423DA6D01201DA030447AC0 - 03A3AE5FBFC8DF817B880864B075BED5F91F4423EADCAD11837EAD05C069C9B4 - 498E054423D59CD391DB91E391EB11F1B60090122000A4886B942A90325A9A1B - DCBE012C4A2A34B50074F1E7CD9E4CB4F338E9719331ED240405202920E8003E - 9730EFC9E5E0ACC20555DC3E7F65662EE5F0BF0DC92B8DBFF6FAE57001C8AF81 - 5C01C852700601747674F81A2CAF19962340001874583356DE6C0100201353BB - F3E74EF1542F2B6B2709608B5F003BB6F38399F0B896EC6B17D20400E822D05C - 77870310C97C2DC208C0BD4085E569DAB2036066C2AEE41700AC1C8FACBB78E1 - 343FB40A8FA8D18FAD9136690104DB640B805D89D212661A680FD64538E239E7 - 7BE44B00C918767676306C0130A942B805F7736B3F861100A680B1FEF9D7A84F - 5A0095F50DDFC23A40DAC39F3309402E0707AE05E8EA7289456037DC16007792 - 5EC3EA50FCA032E70B4264B74101E4DECDE6A76D61B0F1F0250CB608C067B727 - 3CBB854DEB6A5BCF2850C9C361F0D374CCF3997826DD5A7933AF210E5E9BA09A - 0124C9DA8454EF4F9FE4F16C03D3CEE54479405C2947BB5257679B4F00A879E0 - 32B8F387ED9FC6448F8B897A3346327E1A12FD7E01A45D0720D8029014C0206E - 500082AB91E9F96FB90288C61A7E7BD7ADC6F10DD74800B821C408C0BE1CCCCF - 02B06F080DB91C8CA9204ED20101B00834BA4C07806E748C852002E8E77C8805 - 1B5CBDE381A26D59E91363B7EFF19C3ACC6E79CA455188A788E1D97C79B939AA - B6A68CF32D3F2E1E02085E7A3576CFC45B901A801D89A68D700EFCAC8C8B373A - D6F8844E4BFEA969E6BA04B58BD425A8694400A8757811886A129C13F6CFAEC8 - 859E0914031EB30EF39AC6930510B2C297E97782AE08E47DE2663F1580E76A16 - C6E752F3BFED0AA0A1A1E163671E363E7DFDB2F58B603880754388FC20D4E700 - 10001582760A10077045800E10C41104503CEC0F5187A24B5F10F204002211D1 - 886C44787AC5FD2E3B42D6AE9DEE54103503A2D43D0E44405B5C12E6FBEF68C6 - 61D70172DD1DCBD2A80360FFB844CB35091C09D18FE3D016518C671122AFDBAB - 80323595F6EC2657C0E3E390BAE4C965AEBB51BF90EAD0169C0B69074EA8235E - 430205E3C640F098B15CAE0014B018AC7D00B746206E765301F8A065E1E9FCFC - FCC7A84DAE009CDBC5F12DAF190184DD12863B82F69000E49E409D02F44CC027 - 8052AA34E96410008BC0B880EE8827040800552F0A4144032E8F62DA0660B090 - 373178783CACFB4836B2D7E05A005BAE9B73CF73D1655B2E80A8B3D703E03A2C - 04121FA6A232FDE37B1425FAC9AAED6340904849701A384E4647A2F7F1F9A58B - EFA9FCBC1C55F4EC817636031C1BBF07C4F97B4DF1172CF43C01983133E41FB3 - EC1FF0110F10F9B81094691F08208B0450D7BBB08504E050BF1CFEE781104065 - 24FE37FCA390C0FF0048FF55905E0C9299804C056D07003A3ADA55673B3A6003 - 9DD335013A0901200251A1E38A1D2EBFB20068F0933D5D2C003C92559E1518B4 - 5C145D7005197490039278DA65910720F2F04C1E7D61486E0CF1EE074051066B - 66F2AD292920B312CC3460FF680B6625F2DC42690BCF00C8193003C062111C03 - C2D17DD2E28610650958F2BF4DBEDEEAF1E220A231EC686FD702B01CC047BCBC - 36A9205400C4C9610A4EACD78CCC2CFC0DEC9FFAA605C02E108F7FF6405E53CF - 5B57AD42D05A0DF43D110C027822AB81BA0EE0BB822C011CAB2011A0F14C3C89 - C11581110281D3000980EB008A4E58A5B8006EE4C0A0E3B1AC785A281E082985 - A01D753A0DECE047C7A2F0E2C7C6920BE011ED3689009C0004A32680CDEB9F82 - 79BF06D2E7F7473EC0D14FD53FEA11ACF0211D89FDC3FA01C9FFDC0E12096A05 - B41F6E2402E0FC8F8254F23FCFF9C9F6312620DE04883B4E443C02E94415FEA5 - 8C45BE45AC44BE4B3460F603441CE0647FC992CA8E2EF6A4E6E73F0B01505F3D - 01E05F886517369E7CE38A168014822C00D401F65D418FCD3F81C09DC1215341 - 561B9D14CA8508A423EC0A22003801D2004501D7011481880E10A0A10B41ACA4 - 711D705CD7017AE0BD3A0024E03D2CCAC005306BC0F411B54070662100117004 - 017E3C12463C0002518B201541601CFD94E783F6BF6DAB2E4821540816C28500 - 40B8F409BF8184D0916EE07C288499708B74897AB8A71EAF76753410FD2C021A - 5F897E16801101131EB21F3841FE2FEF5A3809FB4F1300D240595DE3B7792660 - 09C0FE6998FC36305321C8CFA52301F082039D14BF65D72200F95EE74408B03B - 9E0E5234C882900C1680E7F2D9D68BE8D26920DC0530FDC213BB2118CC082020 - 384918B1694094065E73E1476E8225694CFD301D85D02038443CCE6D8B108521 - DBFF9573EA3E8906E7B7FB0381A3E0C56C036BFFA8FAB51BEAB1E1AD191F068D - 1B967E21008E7A01085D06A1426107585403930BDF96FC4F6DF20B20DED8F8EB - FB73290D5CCB5C08062F0AC93501BE33C838002F39A231A4CAF6F636EE48BB08 - 8161148F9C67D2008A225E1032360CC09E390DDCBDA6175F507C519421FAE002 - DA7EF5337AB916A0CF302340A4A25A876DC309504F30A94184116F802214391C - 35085C05D6BF7FDF1E162004679F9F0548AEA06723DEF4AFB3B3D527002C2E41 - E8103CECBF1355BF8F7C43BC2500147E887E896A6C7544FB491704C917EC23FB - BF1659EC995F58F875C9FFE484FA09215208220DDC2E69DAF7C6D50C8520FF4F - 00734DC07A2C2C1CC0BE354CEA0039B91680168256B8D7692E06B12CCCD3C1A1 - 401A98E5FC8B28C4AA1A9EC08D28B75D4048C0DF98112042310D8308E00458B8 - C1F72B2B8A38A24182CEC964F9B495FC0CE0295D201E953BD620B09073FEFC29 - 4E3F9869C065B4F824FA715E3D139105295C00C277213C994D0048477C059084 - 0EC173F147D12F64B3E5F3F8E86001A4F00BDA3F0BC0825B03D0366C9D005CEC - 295E52B5BD8BFBC4FED3042075405D43E39F6CBADEFCFE3B39E91785F074507B - 4550EA005F210817C06A9325800B35292D80B636BF13A0E3480334187A36E05D - 189281EBEF4F7234614E0D17409E4FB761B8808E441101A211E900D18BFF2E82 - EFC396712C900341D8C0FB00C8BB45110CF160F681F369F275DEF79F939C0753 - 3FE47E121DEE4B90E86F6E8EB97D00ECEA5F473F82C04FBC443DC6E862ED824B - 3E47BF21D6269FADDDFA1B90FDC429804354FD1FAD587C7F626EE14FECFC4FF5 - 8F5F007081C6C6C68F9D79D4FCE4CD6B7A26800521DF8AE0BDCC8F88710560A7 - 01348A1AD3DE461D230174606B3A8C2D72206A011483B85A872209AB82F6E009 - 418848BE3C4CE462C125188D782D220029700B1008E740610652710CFCAB1914 - 8A482D28D6F01AC4A1D0E3FF02424422974344886C384E26F2790642E791FF0F - 80AB85C1E847A189E9279699DDE88700CC18D85B0E12821DFD62FFB6006CE2E5 - B52FFAAD7D11FDF75B169F2C2C2C7CCCCEFF9904E094D435FDCB860C7580FD90 - 28A903965B0F90066A1118176031E84E6B1174A4BB00D60466F40062058FA333 - 2F8749446463D0C32C19AF910E5013E073B801F64501876BF8480DC8D358A983 - BD0328F010ED584C42AEC73A3FF23DA69D10132AFC30F2210CB8038E8B2B8410 - 14DA19CCFD98626296A3A77E54FC91E075416C88A7B1E0D716F9992A7F812D00 - 1761FB120798FEF54D2CFE0B09C067FF9496F463E28275405353D3A78EDD6F8E - BF452EE0FB4FE066416897FC77106B36109C0ECA6C008D6001903ACF562DB89D - 444A70554F83817C88C141858C757B76012300A0B929C6830B2BC77C1C836EE7 - 659B2021096E805401A2E008886688010E02CB1680704CEF703C0806EE824BCD - FAB828F8BC63E33C12F9B8EA871B3F909AE48E245EF89176D396A31F4BBFC8FD - 7CE5AF8BFB1B463C5E9FADC11A8A1600136960931A241F7FF32AA0B5BFBCBF97 - A2FF567C314EE47F2A68FFE4527E01481D001728AC69FE6F2D00EB41117C5D20 - FD4191999685210069AC28B3BDB54DB589005C2768E3B5025C10611720ABC4AA - 1C6EC9E2C134905480C2EEE2452D02108A4805D1BA3A4F17023B0291867D402C - C803C90254F01009A25D1F470BCA3E962D287C07E905C5216A0CD40C68178A47 - BD92E8B5193F02C56AA32CFCE8051F897E4DBCA4478C4BD0FA83E48781C798F7 - 31FB1258140454FF9DA38BFF8DE817FB47F4671480A4017281CF1CCA6F69DD90 - ED4F03EEB302AC55419E0D147A6940AF09980521E30280888005E042779EA786 - 9417B1368E69927DAFA00C2606B7ACB4C01581FCE3264430A21BC48A1034819E - 103C3108B6F07E7A5FBDBF908EEF69E8F784784929526062BD5F6E4543DE07D1 - 36F97031FC0710B81A967D31E5453FED7EDBB0C9172235F90101844C01FDFBEB - F7407E4E6CA9757171F133C1EA1FF64F85A916408634E014D536FFC84E03DEB2 - F0EA7E2DCC2E602E0E4923056D6DAD7E216096405181FC881F92A020D4AB8388 - 28530F602997FE2E352240CEC59A3B2EBD2277C3C62104B67013CD62E37E82C3 - 21FB8070DB31703C1C17C7C779703E2CF6C8D5BE20F9102D16A060FD58DF40E1 - E7E67DAAF4D15FE93BB6C1C897317223DA8C9F8B8000781FF31DD95FA2BF7B6C - F14712FD41FBA7004B17809D069A9B9B3F75F251A2EEAD6CFFAA605831187C62 - 882C0AC9D541BBB182364A07480932101000EC911787285FEA6B04DE4FB5797A - 684420E90077DD62A50E45186608B065E47558344843EE0781B078DC590C6188 - 3804F21E3E97F4800B4C5233E078382E8E8FA8C73A3FA68B383F1C49D72B689F - FEDF4458F2E55BD1B1E4DBEB2DF972D16BFACAA237AF8F55FD228D7C86897C49 - A302FB6FEC17241FD85BFC5CDD6D5AAAA3E8FF5458F187E8A762DBFB871119D2 - 80531969F9F6C6EBAD3423F02F0AE1E290FD8B61DF43234800F694D01681DB39 - 03760216412B0F88884066055837E75F10BB22D0830CB4269AD4138A3E108155 - 3F1083851854F5A7A9DAC7C20CA6812010D10B3251E8A17843952FC07B07F6EF - F51588F89ECC1A3063C071717C9C07E7035098DA6D8208F4828FBE0915F71960 - A91B2B7EE817132F3510F7BBD547BE4F0096ED671200F603F941011C22873848 - 633E38B9F8EDE5A29FDAE9FF9F41C134605CC0B9FA2C71EBCD6BFE8B43726D40 - 8AC14CCF0D72A784A6D10CABC1E82844D04E83C18382C14151C8F580BE7D5CDF - A6658B4030CBAB6B91FA2A97144426EA831C9AEF63CA88621104C2B6713D01F3 - 75D40DC8E12EE86F080611CE53449A1A22D261F35837C0F1E4BF800291FA4A3E - AF265D5B3E5EF30F3E987CBBE823DBA77CCF0200F94600E8F3B14A2BF26DF20D - 7C636600F201FD79F8FE7B8A9EABA2CEA55B14FDCE72D14F631A2E80A00B3436 - B57C65E7EDD6E977C8057C6B02EC02DEFF0A0EBA803D25B44560375A8068E081 - A16D879921606A08FB8408703F1F448015354F001E404843431D57E2421456FE - 7051080B3DA8D411C1B85C8C051F2C2DE306126CB15208A2914A50D46171086B - 0EF80D801C0BC745C483604DB8E74400DA85F6F1BDFE494D3E2FF698291F8B9C - 05AE1DCF8E7A1640603C82512F70DFA77DC20470A0F4B97AAF6A697A6E7EF12B - 2B453FD5585A0099D28014837081A735899F6CC8810B986230E00272A3887D7D - 20E802BE4E590D175CAA9ED542404A40BE2474713A80087AF82E5A5C2FC04211 - ACD626C0069EBC09B22A2B9EB929E24501C26B6A4AF9D980385ED87900B403ED - 41C12A051F7ED225451FE779D327E0726D2A8D7C9F8503F6388542EF678F1DDE - C75AC0BE92E7AA6D64E927AB897E722ABF008222B0D3404B4BCB2F9F7FDAFAF4 - ADEB7A69782BD7028129A19911C8F501F702512015D88B167627900ECE54CE9B - 01D33501C08521E5D11EF92DC180F513EE65842098A4E8ECEBC3FD8749164618 - 40B4EC13768C20705E9C9FA3DE58BE4CF5BC793E6C5FF70590451E21DE1E834C - 15BF048D6CDDB1B2BE8763E0F33D54F83D6C5D7A4AE4FFF26AA29FEA2B4F002B - B90009C0893727BE9295DB3EFECE4DE302F8F771D67D02F20FA482B78BC9DD42 - BC26B04C2AF00603FFA3AF952122E0E290A20AC521A28CEFE0A58117212CE708 - EB094CEF84784CFDD00E14ABDAF2ED79BE44BE864BBA457E1036D1B65BE235C0 - FB04BE23C5E27EB2FE33354BE3B30B4B5F41F4679AF7DBD14F8E15FADFC39773 - 01A7B4BEF5FBEFDCE8509B6F076B01FFF270F039C2990A425F670CE4B3735573 - 3C78ADAD094F04EC06FA1232061EEB0510022C18B778E17E7EFD0F1FF47F005D - 2B701C149F201DC7C73235CE1724DE8D7A97F804B94A425DA89E77C97745B04C - 9FC32062E0FD0CECEFA1EA47EEEF195BFABE583F0400F2C3A27FC8FEE7D12B09 - 20E8028944C2B95DD676FCADEBE40277CCF230B980AC0BD8AB835210065381BD - 3AC8D7B0ED0E591D135CA99E526D091A541359B0561182CC1460C158371031A0 - 58436E067128D040225C02840A8460013EC77ED8DF259C221D75078E8BE3B3D5 - 837812A0BBB803AB07F104762E6AEBB5DA9934E2C3A257FA6A477CD8DFF6F744 - 04FC198DDF6EB2FECAE4D2719B7CDBFA25FAC5FA25FAA91F7E01ACD605A8939F - 3EFBB4BD74C375B33CCC1789F4EAA04C0BC30A4216010920382B107B0B423E07 - 707B1922AA8DC05146D534061E048008ED0A3D4C0E969211A158430071585606 - 200C100A606D4180074832D1F4B93C4A0ED53C08C7715CD211EDC8F142BCBB9C - ABD395263FC1B77105C94FEB5BA07F41C26DD8DF715F9BCF30E5CB6F592A25F2 - 3FBD1AEB47F4837C1A2387C64B0BE0455C0022800BB424DABE74E84147CFC61B - 7A7510D7087C770ECB12315C20D3DA801141260100D25100F7BCE36E637604B6 - 593DF87A9E4D290237581031A813E00C20CC7B2691FE31087E00C2A49A1F85E2 - 357EA28547D68068DE8F23DCFC569F6620381E04E6DDBCA1A35D2FE6902809D7 - 6AA7F9EEDDE32B102F588E701BC1EFD9D1BF8F22FF4A64A9677E61E94B12FD36 - F988FEB0C20FD68FE82731A70B603911C8BA80710127DAD2FE8DACDCCEC9776E - 79A90005A1BD36E08AC0D40328087DF70EDAE9009D34B6289D95D7610376BE72 - 8EA34E93600A46E4612689C83282E054819FA3C916A4825C23126C11D920BA13 - 3FCF921B3551D061ED1E8433E93A0DC1E20517AA579ED6C96BF42DD80FF91B5B - FB33F73B044DB8FD9A8A3E9AEE9DAE5A9A1C9B5BFAC66AF27ED0FAA9CF0E3999 - 2780D5BA80A402B8000D86531DEFF8876D77BB9636DFF15201DF2F10920A6481 - C8B74C4C0208BB62E876D606F6A19C670F96BC3E4B62407A102BC6CAA2388477 - C591C0AF094C300905EFE36FFA4C43EFABC9D64011CAC766D213EA3C91CE2B77 - 86706CD13E37A707C0EF99F60A6CB2837FDB63E01ECFAA1750F01D2D5F5AEA9F - 5CFA87B0BCBF1AEB47F4531A0B17C06A5D4044501EEBF8DED63B5DBFD87CC75C - 28422A30570BD344805F14172D5F14860D8240F613E2E5B5FD3E0D8E3A4382B8 - 5C35C5E48134DEB238B45BB800C9BC4863F6B3419F5FA99E5667ABE6C9DAE9FC - 86703BCA6D92C320ED6298BE493BD33E23841D0390FD403E6D7F4115FFF75E84 - FCA0F5837C70E71340980820005B042105A14351E3943774FE70EBDDEE5F6C32 - 22905BC87D0B44D6FA40E822912D0482DB797B2000FA2C540070076B906D60AA - 7498A2E850D9FB3488EFAB7D257EE03D7C867D00399F0D8E428944792FF05AEF - 67B5691570F735DF0F42F6C35C9F82E517DD634B3F0C926F177D61D62FE48BF5 - 833370B7A20032A502BB208492A0A88A78D70FB6E5F63CDF7CD7A4827B5A0469 - B78F713AB066061944C0038301B007C3FA5BF6CB047C5F06D77E2D9063DAF01D - DF7ABD1CC28E2F7F07CF190A1C23784CD91A4183FC23E54BCF89FC1F64227FB9 - BC1FB47E7006EED204102682A00B644A0538707563D7BFEECCEF99DF745BEA01 - 5D14FA9DC09B192CE7043278F6C00864D0DC41FC08E09E2BE433C14A24AFF499 - 770EDA5ACEC34BBC66BFFD54ED1FAF5C9AEF1D5FFAD7F5241FDCAD4A00B60B04 - 53813D2B1011D43777FDEDA1873D83EFB008A81EA0A2D0AD07324C0F8322F0D5 - 0566A08E99C1E10132C0EBE50639087BDFE0F75EE638D8DADFD3CFE9F523D371 - A52F6190C8C78D1D17EA960607A796FE7635E407F37E18F9E00A9C81BB500100 - CB89C04E0561F500724CBCADFB6BA70A93F1776E9BF501B348C4D70B328820ED - 770510020D826F80ED41B280BFEDFC9F69D0EDF783FBACEA3BE61C784F209FD9 - B03FB3F7C16BBB0F36D00FFB3B58E4B9DEB0141F9D5DFADACB909F29EF832B70 - 06EE42C917AC5604763D202288B7753A1D5DDD5FCC294FDEDA74A74F6DE79F95 - A53B015F33C8E004B610640081B0C103D21CC112848BB0F704CBEC6F13E3FB7C - 1904F7CDD45EF76F73AE8394EF713BF793B6A55BA985C52F8ECFAD1FF9E0085C - 813370174ABC2093005612016C26D2D2EEB4D389A901BF54104B6EDC79AFEF83 - CDB901113CF63B81AC138808DCFB0A4344101C507730913BE53D2B8F860104AD - 44A81DF14131AC0AD2AE4C08B411AB7B348DFD2032B8B491A2FE975244FCF08C - 47BE4CF55E947CC9FB36F9E02E94781B994460D70376512822A86FA65CD3DEC1 - 0D485043626DC96F9D2AEC4BBC7B7740ED343541D814912F1E85A404F7872601 - 21800C9BF495E0239D080D7DBD0278BF4CFBD339ECB6B8620C6CF9B5F53D4C53 - 77172DA9ECD85262706AF15B53C6F26752F3CED0948E7A7B9E6F177CCB916F17 - 7D423EB80267E02E94F420961341B01EC00990636A1BA9CA6C6D73DAA901B176 - 7602A73399FCADDCDABED348075BF2328800D34459360EB8817B112928049021 - 84840DB4F5DAE71006F667F2DA2617AFEDFD8315BB8DB4631AC87B6E9B2DC0EE - 71136749F7D2E9B9C5C5DF02F1C3A9052745513F3D97720627BDE5DD97255F8A - 3E7024D1FF520258AD086AE274C216AA09A801D1B60E4E071DD4B0D6AEA4539F - E8FBCED9E281F8E6DC41B5FDBE3745746F26312901420873035F6D60090144D9 - C4C9C08711B212C2BE97E95861FBC99661DA63B70D385082C7B62EA91B54E8F5 - 8C2D7E6732B5E8CC11F97344FCD02CD93D45FDE4CCACD33FAE2D5F56F8847C99 - EABD2CF9E02E94F030641240261154C5E884CD2D4E0BD241A2CD694383A861B1 - D66EA79B1ADADBD7F71BC5F1FE4D070B06A736E70DAB5D0F47BD3B8A0229C176 - 03D7118C107C8E40088A2038E8419282AF6D04F759D57E81F3C9F9DD2DB511D1 - 0EBB3F53BD34D530B0B8696171F13790EB0727E79D19227F9672FDE00C157A14 - F513D3334EEFA88E7A59DE0DCEF35F967C70174A7626BC88082AA394671AA926 - 403A684E380934888A91484B2709A1DBE98208688EDADAD3FF07F991C10B7B1F - 0D7DB0257F848430C6FF9CD24E096E81182204AF3EF0D60FC26A859560131A86 - A00082C25A16A64D074DC41FAF58FCA0A46BF1C2D8DCE21FC0EE6789F4A9B979 - 67602245DB39679A88EF9FA25C4F513F3639E52447D28B3D7B912753C1B712F9 - 2F2C0060B522A888C49D58BCD169443A68A279271A440DAB6B6A2721E8748005 - 8ACE64AFD3471D89770D7CF36EDD50CEBE82910FB6DE1F55BB1EE99420421011 - F0BFAAB3D2825D2378E9C1EF0CB6209623CEFEEC65F673D721AC7303B07A3CA0 - E978E5E20785ED8B397D930BDF9C27E2A7A8C043753F4D113F4111DF3736EB4C - 12F95354E8F54E90DD53D48F8C4F38DD43E9F9DE5EE17B59F2C15D28C9CBC116 - C0722228AF6F70A20D713C77C8A98A37513D400DA286D5C45B9DE6566A283518 - AB53AD5D3D4E5B4F92660A7D4E4FFF8093480E7EE3516CF8ECE1C291996DF7C7 - D48E87E3EE23EAF9A9642204CB112004B746101821A4158E61B048B491490478 - 9F3F33DF1781D9EE83EDDEE24526FEBDEAC599B2AE85B3349DFBC6F4FC823332 - 33EF4C10F9E394E751DD83F4F1E959B2FA19DA4E3B1394EB7BC6C8EE29EA8746 - C79C8EFE91D07C2F2B7C42BECCF3574BFE4B0900588D08CAEB624E24D680E70F - 3A950DD4106A509CA621D50D09A7B1851A4A0D46AE6AE9E872125DDD4E53A716 - 41575F3F77B46F60E8CBA52D231BCF978F36EF7A34A6B63E9850BB0A267D45A2 - 9E325A4208B8C2E112BF186C08792B023F6B33AF5D2709018E09B1E19F31EC7A - B6A80E942EAA9CE84273A46F61E36C6AE1CB88F449227D643AC5D3BAB1D93967 - 944847753F41113F3A39EDF40C4FD176D219A35CDF3542764F513F303CE2B4F5 - 7A966FE77B59DE0D5BE4590DF9E02E94E0D560251194D5469DFA68CC89211DC4 - A821D4A0066A5855B499B69412A8C1B0AB269A213477743AF176124107DCA0D7 - E9A64E42E92C84A1E14FB7F68E7CE761C3E8C55325E3835905136ADBA349B5EB - F11489413B825D2CBAB3068616038BC27607230AA91D82C0FBF2197EE66EBF1F - DC074FDFDE4B519EF56C81AC7E415DA85D182CE95CB8D83F31FF1DB2F84FCB02 - CE1461946C7E786A8E72FD2C0961C619A13C8FEA7E8C227E787CD2E91A9CA0ED - B8334CC4770C91DD53D4F70E0C922BEAA80F5ABE147BF6F2EE8B900F8492BB5A - D802006C1194D6449CBA4814FF92C6298F5243A841316A5865A489B6CDE402FA - 2A629C66088D6DED343BE8741ADBE106A80B925AE9E4065DBD039CF7608143C3 - 23BFD9DA37F6DD278DE3672F544EB4EF7F3AF92184B09DB0EBF134A5083D7574 - EB049F18BCE2D10509214D18197088C8C5BE0769BB97C806E17B8B1628FA173E - BC1A996F2FED983FDB3B3EFFDDB9D4FC6F8270607C264505DD1CDBFC0445FA08 - 45FCE0C40CE5FA6967988ABB61CAF3A8EE4728E20747C79D8E81316780F2FC20 - F5B56D60C8E9A720E8A1316821670CB37C3BDFBF0CF94028B12F02FB60809C04 - 02A8ADA713231D44900E08D4A8F2BA386DA991D460343C46338486442B2F1D37 - B476384D5420B69B02B19B0AC4F69E3EB63EB8810801C51015459FEE191EFF66 - 6DC7F84F0BE2133917AB2713478AA796901E76154CAB9D05332AEBC9ACCA7A3A - AB7617CEAA7DCFE648187088145F82B62135041CE300617FD13C913BAFF63C9B - A7EFCEF37FD9C46B88E644C5FCD2B5E87CA2B86D3E27DE9FFAE9F074EA9B44F6 - A78574902DAB76235328E8F4EADD1845FA30D97CFF98AEEA07A9B81B20D251DD - 0F52C4F753C4B7F60E93E311F1D4D7965E2AF22808BA680C1AC919EDA80FE67B - 901F247E35E403A1A4BE288207C5894AAAEB5900F574F2B27AA4030235AAACB6 - 81B6DA0DA0D808B941B4B9856607B8C9B4CD895381D86A0AC40EAA0DB07004EB - 8323202230382204440BAA634C8F9243E3BF32343AF1D59AEEC97FACEA9C7CB5 - B065EACC83A6E9C797AAA713672A66064F94CD4C1F2A9EFD500A48A48A20E018 - 874B521F9EAA484D9FAB4E0D5EA94F251E27528F4BDA5367EAFB52AFC60652FF - 38313DF7D5E1C9B95F11A2316D13C2317DC3DC1D8403C31328E8F402CE0845FA - 20D97CEF88AEEAFBA9B8EB1BD6957D3F5BFD9093E8197492D4C724F5B5995261 - 0F453DC6A0A1CD1FF5ABB1FCD5900FEED2C87C59040F0E01D4D4D149E9C4A575 - D4086A501DA1B426465B9A215083D1F07A9A21449A9A79E5B0BE29E1C4A8406C - 3105621BD506CD9416E006B0C024E6BC108271845E1202F2E400454FF7801642 - 3C39E60C51544D4C4C7C6A7062F2779AFA27FFB06B68EA2FDB07A6FEB9A56FFA - 7F9B7AA75F8FF44E6FACEA99D929A84ECEEE8CF5CF6E6CEE9F7D3D3130FBBF5D - C3B3FF9C1C99FDCBC4F0EC1F8ECCCCFE0E91FB295878EBB02EDA8628874F929D - 4F23B20DD97C718680B93B080706C750D0E9051CB4A98F0ABB9EA131A793DADA - 4BC55D7290D21AF5A197FAD24D11DFD449114F7DC442592352210501C6209A08 - 8FFA95C817E233915F5B5BEBFC3FD96849CB19CC192C0000000049454E44AE42 - 6082} Visible = False end object memParentFile: TSynEdit @@ -904,25 +297,44 @@ object frmMain: TfrmMain Font.Height = -13 Font.Name = 'Courier New' Font.Style = [] + Font.Quality = fqClearTypeNatural TabOrder = 0 - Gutter.AutoSize = True + UseCodeFolding = False Gutter.Font.Charset = DEFAULT_CHARSET Gutter.Font.Color = clWindowText Gutter.Font.Height = -11 Gutter.Font.Name = 'Courier New' Gutter.Font.Style = [] + Gutter.Font.Quality = fqClearTypeNatural Gutter.ShowLineNumbers = True + Gutter.Bands = < + item + Kind = gbkMarks + Width = 13 + end + item + Kind = gbkLineNumbers + end + item + Kind = gbkFold + end + item + Kind = gbkTrackChanges + end + item + Kind = gbkMargin + Width = 3 + end> Highlighter = SynPasSyn1 ReadOnly = True + ScrollbarAnnotations = <> OnChange = memParentFileChange - FontSmoothing = fsmNone ExplicitHeight = 371 end end object tabSelectedFile: TTabSheet Caption = 'Selected File' ImageIndex = 1 - ExplicitHeight = 377 object memSelectedFile: TSynEdit AlignWithMargins = True Left = 0 @@ -936,18 +348,38 @@ object frmMain: TfrmMain Font.Height = -13 Font.Name = 'Courier New' Font.Style = [] + Font.Quality = fqClearTypeNatural TabOrder = 0 - Gutter.AutoSize = True + UseCodeFolding = False Gutter.Font.Charset = DEFAULT_CHARSET Gutter.Font.Color = clWindowText Gutter.Font.Height = -11 Gutter.Font.Name = 'Courier New' Gutter.Font.Style = [] + Gutter.Font.Quality = fqClearTypeNatural Gutter.ShowLineNumbers = True + Gutter.Bands = < + item + Kind = gbkMarks + Width = 13 + end + item + Kind = gbkLineNumbers + end + item + Kind = gbkFold + end + item + Kind = gbkTrackChanges + end + item + Kind = gbkMargin + Width = 3 + end> Highlighter = SynPasSyn1 ReadOnly = True + ScrollbarAnnotations = <> OnChange = memSelectedFileChange - FontSmoothing = fsmNone ExplicitHeight = 371 end end @@ -957,7 +389,6 @@ object frmMain: TfrmMain object tabList: TTabSheet Caption = 'List' ImageIndex = 1 - ExplicitHeight = 415 object Splitter3: TSplitter Left = 497 Top = 0 @@ -975,7 +406,7 @@ object frmMain: TfrmMain Align = alLeft BevelOuter = bvNone TabOrder = 0 - ExplicitHeight = 415 + ExplicitHeight = 395 object edtListSearch: TSearchBox AlignWithMargins = True Left = 3 @@ -1012,11 +443,7 @@ object frmMain: TfrmMain Align = alClient Colors.UnfocusedColor = clMedGray Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] + Header.Height = 15 Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoShowSortGlyphs, hoVisible, hoFullRepaintOnResize, hoHeightResize] Images = ImageList1 PopupMenu = popTree @@ -1032,37 +459,38 @@ object frmMain: TfrmMain OnPaintText = vtUnitsListPaintText OnGetImageIndex = vtCommonGetImageIndex OnHeaderClick = vtCommonHeaderClick - ExplicitHeight = 383 + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] Columns = < item Position = 0 + Text = 'Unit' Width = 350 - WideText = 'Unit' end item Position = 1 + Text = 'File Type' Width = 70 - WideText = 'File Type' end item Position = 2 + Text = 'Lines' Width = 80 - WideText = 'Lines' end item Position = 3 + Text = 'Used By Units' Width = 80 - WideText = 'Used By Units' end item Position = 4 + Text = 'Used Units' Width = 80 - WideText = 'Used Units' end item Position = 5 + Text = 'Filename' Width = 400 - WideText = 'Filename' end> end end @@ -1075,7 +503,8 @@ object frmMain: TfrmMain BevelOuter = bvNone Caption = 'Select a file to display it'#39's contents here.' TabOrder = 1 - ExplicitHeight = 415 + ExplicitWidth = 534 + ExplicitHeight = 395 object pcList: TPageControl Left = 0 Top = 0 @@ -1084,10 +513,10 @@ object frmMain: TfrmMain ActivePage = tabUsedBy Align = alClient TabOrder = 0 - ExplicitHeight = 415 + ExplicitWidth = 534 + ExplicitHeight = 395 object tabUsedBy: TTabSheet Caption = 'Used By Units' - ExplicitHeight = 385 object edtSearchUsedByList: TSearchBox AlignWithMargins = True Left = 0 @@ -1114,6 +543,7 @@ object frmMain: TfrmMain TabOrder = 1 TextHint = 'Search Used By Units List' OnChange = edtSearchUsedByListEditChange + ExplicitWidth = 526 end object vtUsedUnits: TVirtualStringTree Left = 0 @@ -1124,11 +554,7 @@ object frmMain: TfrmMain Align = alClient Colors.UnfocusedColor = clMedGray Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] + Header.Height = 15 Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoShowSortGlyphs, hoVisible, hoFullRepaintOnResize, hoHeightResize] Images = ImageList1 PopupMenu = popTree @@ -1142,44 +568,44 @@ object frmMain: TfrmMain OnPaintText = vtUnitsListPaintText OnGetImageIndex = vtCommonGetImageIndex OnHeaderClick = vtCommonHeaderClick - ExplicitHeight = 359 + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] Columns = < item Position = 0 + Text = 'Unit' Width = 350 - WideText = 'Unit' end item Position = 1 + Text = 'File Type' Width = 70 - WideText = 'File Type' end item Position = 2 + Text = 'Lines' Width = 80 - WideText = 'Lines' end item Position = 3 + Text = 'Used By Units' Width = 80 - WideText = 'Used By Units' end item Position = 4 + Text = 'Used Units' Width = 80 - WideText = 'Used Units' end item Position = 5 + Text = 'Filename' Width = 400 - WideText = 'Filename' end> end end object tabUsesList: TTabSheet Caption = 'Uses Units' ImageIndex = 2 - ExplicitHeight = 385 object edtSearchUsesList: TSearchBox AlignWithMargins = True Left = 0 @@ -1216,11 +642,7 @@ object frmMain: TfrmMain Align = alClient Colors.UnfocusedColor = clMedGray Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] + Header.Height = 15 Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoShowSortGlyphs, hoVisible, hoFullRepaintOnResize, hoHeightResize] Images = ImageList1 PopupMenu = popTree @@ -1234,44 +656,45 @@ object frmMain: TfrmMain OnPaintText = vtUnitsListPaintText OnGetImageIndex = vtCommonGetImageIndex OnHeaderClick = vtCommonHeaderClick + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] ExplicitHeight = 359 Columns = < item Position = 0 + Text = 'Unit' Width = 350 - WideText = 'Unit' end item Position = 1 + Text = 'File Type' Width = 70 - WideText = 'File Type' end item Position = 2 + Text = 'Lines' Width = 80 - WideText = 'Lines' end item Position = 3 + Text = 'Used By Units' Width = 80 - WideText = 'Used By Units' end item Position = 4 + Text = 'Used Units' Width = 80 - WideText = 'Used Units' end item Position = 5 + Text = 'Filename' Width = 400 - WideText = 'Filename' end> end end object tabSource: TTabSheet Caption = 'Source' ImageIndex = 1 - ExplicitHeight = 385 object memListFile: TSynEdit AlignWithMargins = True Left = 0 @@ -1285,18 +708,38 @@ object frmMain: TfrmMain Font.Height = -13 Font.Name = 'Courier New' Font.Style = [] + Font.Quality = fqClearTypeNatural TabOrder = 0 - Gutter.AutoSize = True + UseCodeFolding = False Gutter.Font.Charset = DEFAULT_CHARSET Gutter.Font.Color = clWindowText Gutter.Font.Height = -11 Gutter.Font.Name = 'Courier New' Gutter.Font.Style = [] + Gutter.Font.Quality = fqClearTypeNatural Gutter.ShowLineNumbers = True + Gutter.Bands = < + item + Kind = gbkMarks + Width = 13 + end + item + Kind = gbkLineNumbers + end + item + Kind = gbkFold + end + item + Kind = gbkTrackChanges + end + item + Kind = gbkMargin + Width = 3 + end> Highlighter = SynPasSyn1 ReadOnly = True + ScrollbarAnnotations = <> OnChange = memListFileChange - FontSmoothing = fsmNone ExplicitHeight = 379 end end @@ -1313,7 +756,8 @@ object frmMain: TfrmMain Align = alBottom BevelOuter = bvNone TabOrder = 1 - ExplicitTop = 448 + ExplicitTop = 428 + ExplicitWidth = 1042 object Panel9: TPanel Left = 784 Top = 0 @@ -1322,6 +766,7 @@ object frmMain: TfrmMain Align = alRight BevelOuter = bvNone TabOrder = 1 + ExplicitLeft = 778 object vtStats: TVirtualStringTree AlignWithMargins = True Left = 2 @@ -1331,12 +776,8 @@ object frmMain: TfrmMain Margins.Left = 2 Align = alClient Colors.UnfocusedColor = clMedGray + DefaultNodeHeight = 19 Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] Header.Options = [hoAutoResize, hoColumnResize, hoDblClickResize, hoDrag] TabOrder = 0 TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale] @@ -1344,6 +785,8 @@ object frmMain: TfrmMain TreeOptions.SelectionOptions = [toFullRowSelect] OnGetText = vtStatsGetText OnPaintText = vtStatsPaintText + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] Columns = < item Position = 0 @@ -1365,12 +808,9 @@ object frmMain: TfrmMain Margins.Right = 0 Align = alClient Colors.UnfocusedColor = clMedGray + DefaultNodeHeight = 19 Header.AutoSizeIndex = 0 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] + Header.Height = 15 Header.MainColumn = -1 Images = ImageList1 NodeDataSize = 24 @@ -1380,15 +820,14 @@ object frmMain: TfrmMain TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect] OnGetText = vtLogGetText OnGetImageIndex = vtLogGetImageIndex + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] Columns = <> end end end end object SynPasSyn1: TSynPasSyn - Options.AutoDetectEnabled = False - Options.AutoDetectLineLimit = 0 - Options.Visible = False CommentAttri.Foreground = clGreen DirectiveAttri.Foreground = clTeal KeyAttri.Foreground = clNavy @@ -1403,7 +842,7 @@ object frmMain: TfrmMain item Action = actStartScan Caption = 'Sca&n' - ImageIndex = 0 + ImageIndex = 6 ShortCut = 120 end item @@ -1453,7 +892,7 @@ object frmMain: TfrmMain item Action = actStartScan Caption = '&Scan' - ImageIndex = 0 + ImageIndex = 6 ShortCut = 120 end item @@ -1519,10 +958,6 @@ object frmMain: TfrmMain item Caption = '-' end - item - Action = actExpandAll - Caption = '&Expand All' - end item Action = actCollapseAll Caption = '&Collapse All' @@ -1551,16 +986,8 @@ object frmMain: TfrmMain item Caption = '-' end - item - Action = actSaveToGephiCSV - Caption = 'Save t&o Gephi CSV' - end item Caption = '-' - end - item - Action = actSaveToGraphML - Caption = 'Save to &GraphML' end> ActionBar = ActionToolBar1 end> @@ -1866,7 +1293,7 @@ object frmMain: TfrmMain Left = 48 Top = 408 Bitmap = { - 494C01010B0018002C0010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 + 494C01010B001800040010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000003000000001002000000000000030 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/Source/Duds.Vcl.Form.Main.pas b/Source/Duds.Vcl.Form.Main.pas index d8b0e20..af44153 100644 --- a/Source/Duds.Vcl.Form.Main.pas +++ b/Source/Duds.Vcl.Form.Main.pas @@ -44,7 +44,7 @@ interface Vcl.ImgList, Vcl.ActnCtrls, Vcl.PlatformDefaultStyleActnCtrls, Vcl.Mask, Vcl.Menus, Vcl.WinXCtrls, - VirtualTrees, + VirtualTrees, VirtualTrees.Types, SynEditHighlighter, SynHighlighterPas, SynEdit, @@ -58,7 +58,8 @@ interface Duds.Vcl.HourGlass, Duds.Vcl.Utils, - Duds.Vcl.VirtualTreeview; + Duds.Vcl.VirtualTreeview, SynEditCodeFolding, VirtualTrees.BaseAncestorVCL, + VirtualTrees.BaseTree, VirtualTrees.AncestorVCL; type TfrmMain = class(TForm) @@ -192,7 +193,7 @@ TfrmMain = class(TForm) Column: TColumnIndex); procedure vtUnitsGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; - var ImageIndex: TImageIndex); + var ImageIndex: System.UITypes.TImageIndex); procedure vtUnitsDblClick(Sender: TObject); procedure actStartScanExecute(Sender: TObject); procedure actShowUnitsNotInPathExecute(Sender: TObject); @@ -256,10 +257,10 @@ TfrmMain = class(TForm) procedure vtCommonHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo); procedure vtLogGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; - var ImageIndex: TImageIndex); + var ImageIndex: System.UITypes.TImageIndex); procedure vtCommonGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; - var Ghosted: Boolean; var ImageIndex: TImageIndex); + var Ghosted: Boolean; var ImageIndex: System.UITypes.TImageIndex); private FLogEntries: TLogEntries; FFiles: TDictionary; @@ -894,7 +895,7 @@ procedure TfrmMain.SearchTree(const SearchText: String; FromFirstNode: Boolean); procedure TfrmMain.vtLogGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; - var Ghosted: Boolean; var ImageIndex: TImageIndex); + var Ghosted: Boolean; var ImageIndex: System.UITypes.TImageIndex); begin if (Kind in [ikNormal, ikSelected]) and (Column <= 0) then begin @@ -1067,7 +1068,7 @@ function TfrmMain.GetUnitFilename(const DelphiUnitName: String): String; procedure TfrmMain.vtUnitsGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; - var Ghosted: Boolean; var ImageIndex: TImageIndex); + var Ghosted: Boolean; var ImageIndex: System.UITypes.TImageIndex); begin if (Kind in [ikNormal, ikSelected]) and (Column = 0) then @@ -1198,7 +1199,8 @@ procedure TfrmMain.vtCommonHeaderClick(Sender: TVTHeader; Sender.SortDirection := sdAscending; end; - Sender.Treeview.Sort(nil, Sender.SortColumn, Sender.SortDirection); + Assert(Sender.Treeview.InheritsFrom(TVirtualStringTree)); + TVirtualStringTree(Sender.Treeview).Sort(nil, Sender.SortColumn, Sender.SortDirection); Sender.Treeview.Invalidate; finally @@ -1297,7 +1299,7 @@ procedure TfrmMain.vtUnitsListFocusChanging(Sender: TBaseVirtualTree; OldNode, procedure TfrmMain.vtCommonGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; - var Ghosted: Boolean; var ImageIndex: TImageIndex); + var Ghosted: Boolean; var ImageIndex: System.UITypes.TImageIndex); begin if (Kind in [ikNormal, ikSelected]) and (Column = 0) then begin @@ -1547,7 +1549,7 @@ procedure TfrmMain.CloseControls; vtUsesUnits.Clear; vtStats.Clear; - vtUnits.Header.Columns[1].Options := vtUnits.Header.Columns[1].Options - [coVisible]; + vtUnits.Header.Columns[1].Options := vtUnits.Header.Columns[1].Options - [TVTColumnOption.coVisible]; FDelphiFileList.Clear; FDelphiFiles.Clear; @@ -1687,7 +1689,7 @@ function TfrmMain.RenameDelphiFileWithDialog(const DelphiFile: TDelphiFile; Rena end; if Result then - vtUnits.Header.Columns[1].Options := vtUnits.Header.Columns[1].Options + [coVisible]; + vtUnits.Header.Columns[1].Options := vtUnits.Header.Columns[1].Options + [TVTColumnOption.coVisible]; end; procedure TfrmMain.RenameDelphiFile(const SearchString, ReplaceString: String; UpdateUsesClasues, PromptBeforeUpdate, DummyRun, RenameHistoryFiles, ExactMatch: Boolean); diff --git a/Source/Duds.Vcl.Form.Rename.dfm b/Source/Duds.Vcl.Form.Rename.dfm index 9d0c377..f7a86dd 100644 --- a/Source/Duds.Vcl.Form.Rename.dfm +++ b/Source/Duds.Vcl.Form.Rename.dfm @@ -3,17 +3,15 @@ object frmRenameUnit: TfrmRenameUnit Top = 0 BorderStyle = bsDialog Caption = 'Rename Unit' - ClientHeight = 139 - ClientWidth = 450 + ClientHeight = 156 + ClientWidth = 456 Color = clBtnFace Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Segoe UI' Font.Style = [] - OldCreateOrder = False Position = poScreenCenter - PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 8 diff --git a/Source/Duds.Vcl.Form.Settings.dfm b/Source/Duds.Vcl.Form.Settings.dfm index 0886fe5..34faf1a 100644 --- a/Source/Duds.Vcl.Form.Settings.dfm +++ b/Source/Duds.Vcl.Form.Settings.dfm @@ -3,8 +3,8 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting Top = 0 BorderIcons = [biSystemMenu] Caption = 'Settings' - ClientHeight = 449 - ClientWidth = 603 + ClientHeight = 466 + ClientWidth = 609 Color = clBtnFace Constraints.MinHeight = 300 Constraints.MinWidth = 400 @@ -13,31 +13,32 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting Font.Height = -11 Font.Name = 'Segoe UI' Font.Style = [] - OldCreateOrder = False Position = poScreenCenter OnCreate = FormCreate - PixelsPerInch = 96 TextHeight = 13 object pcSettings: TPageControl AlignWithMargins = True Left = 3 Top = 3 - Width = 597 - Height = 415 + Width = 603 + Height = 432 ActivePage = tabRootFiles Align = alClient TabOrder = 0 + ExplicitWidth = 597 + ExplicitHeight = 415 object tabRootFiles: TTabSheet Caption = 'Root Files' object Panel4: TPanel - Left = 476 + Left = 482 Top = 0 Width = 113 - Height = 334 + Height = 351 Align = alRight BevelOuter = bvNone TabOrder = 0 - ExplicitHeight = 299 + ExplicitLeft = 476 + ExplicitHeight = 334 object btnAddFile: TButton AlignWithMargins = True Left = 3 @@ -77,8 +78,8 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting object pnlFTSInfo: TPanel AlignWithMargins = True Left = 3 - Top = 337 - Width = 583 + Top = 354 + Width = 589 Height = 47 Align = alBottom BevelOuter = bvNone @@ -86,11 +87,13 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ParentBackground = False TabOrder = 2 Visible = False + ExplicitTop = 337 + ExplicitWidth = 583 object Panel14: TPanel AlignWithMargins = True Left = 1 Top = 1 - Width = 581 + Width = 587 Height = 45 Margins.Left = 1 Margins.Top = 1 @@ -101,14 +104,13 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting Color = 12910591 ParentBackground = False TabOrder = 0 - ExplicitTop = -2 - ExplicitHeight = 18 + ExplicitWidth = 581 object lnkFTSInfo: TLabel AlignWithMargins = True Left = 1 Top = 1 - Width = 557 - Height = 39 + Width = 585 + Height = 43 Margins.Left = 1 Margins.Top = 1 Margins.Right = 1 @@ -130,6 +132,8 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ParentFont = False Transparent = True WordWrap = True + ExplicitWidth = 555 + ExplicitHeight = 39 end end end @@ -137,8 +141,8 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting AlignWithMargins = True Left = 3 Top = 3 - Width = 470 - Height = 328 + Width = 476 + Height = 345 Align = alClient Font.Charset = ANSI_CHARSET Font.Color = clWindowText @@ -150,21 +154,24 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ScrollBars = ssBoth TabOrder = 1 WordWrap = False - Zoom = 100 OnChange = OnSettingChange + ExplicitWidth = 470 + ExplicitHeight = 328 end end object tabSearchPaths: TTabSheet Caption = 'Search Paths' ImageIndex = 1 object Panel2: TPanel - Left = 476 + Left = 482 Top = 0 Width = 113 - Height = 387 + Height = 404 Align = alRight BevelOuter = bvNone TabOrder = 0 + ExplicitLeft = 476 + ExplicitHeight = 387 object btnAddPath: TButton AlignWithMargins = True Left = 3 @@ -192,8 +199,8 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting AlignWithMargins = True Left = 3 Top = 3 - Width = 470 - Height = 381 + Width = 476 + Height = 398 Align = alClient Font.Charset = ANSI_CHARSET Font.Color = clWindowText @@ -205,23 +212,20 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ScrollBars = ssBoth TabOrder = 1 WordWrap = False - Zoom = 100 OnChange = OnSettingChange + ExplicitWidth = 470 + ExplicitHeight = 381 end end object tabUnitScopes: TTabSheet Caption = 'Unit Scope Names' ImageIndex = 4 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object memUnitScopeNames: TRichEdit AlignWithMargins = True Left = 3 Top = 3 - Width = 583 - Height = 381 + Width = 589 + Height = 398 Align = alClient Font.Charset = ANSI_CHARSET Font.Color = clWindowText @@ -253,17 +257,14 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ScrollBars = ssBoth TabOrder = 0 WordWrap = False - Zoom = 100 OnChange = OnSettingChange + ExplicitWidth = 583 + ExplicitHeight = 381 end end object tabScan: TTabSheet Caption = 'Scan' ImageIndex = 3 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object chkLinkUnits: TCheckBox Left = 16 Top = 16 @@ -289,10 +290,6 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting object tabEnvironment: TTabSheet Caption = 'Environment' ImageIndex = 2 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object chkLoadLastProject: TCheckBox Left = 16 Top = 16 @@ -307,17 +304,19 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting end object Panel1: TPanel Left = 0 - Top = 421 - Width = 603 + Top = 438 + Width = 609 Height = 28 Align = alBottom BevelOuter = bvNone TabOrder = 1 + ExplicitTop = 421 + ExplicitWidth = 603 object lblStatus: TLabel AlignWithMargins = True Left = 3 Top = 5 - Width = 438 + Width = 444 Height = 20 Margins.Top = 5 Align = alClient @@ -330,7 +329,7 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting end object btnOK: TButton AlignWithMargins = True - Left = 447 + Left = 453 Top = 0 Width = 75 Height = 25 @@ -343,10 +342,11 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting ParentDoubleBuffered = False TabOrder = 0 OnClick = btnOKClick + ExplicitLeft = 447 end object btnCancel: TButton AlignWithMargins = True - Left = 525 + Left = 531 Top = 0 Width = 75 Height = 25 @@ -356,6 +356,7 @@ object frmDependencyScannerSetting: TfrmDependencyScannerSetting Caption = '&Cancel' TabOrder = 1 OnClick = btnCancelClick + ExplicitLeft = 525 end end object OpenDialog1: TOpenDialog diff --git a/Source/Duds.Vcl.VirtualTreeview.pas b/Source/Duds.Vcl.VirtualTreeview.pas index 183b19e..7cce991 100644 --- a/Source/Duds.Vcl.VirtualTreeview.pas +++ b/Source/Duds.Vcl.VirtualTreeview.pas @@ -30,7 +30,7 @@ interface uses - VirtualTrees, + VirtualTrees, VirtualTrees.BaseTree, Duds.Vcl.HourGlass; @@ -39,7 +39,7 @@ TVirtualTreeHelper = class helper for TVirtualStringTree private procedure InternalExpandCollapse(const Node: PVirtualNode; const Expand: Boolean); public - procedure AutoFitColumns(Animated: Boolean = FALSE; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn; IncludeHeader: Boolean = TRUE); + procedure AutoFitColumns(Animated: Boolean = FALSE; SmartAutoFitType: TSmartAutoFitType = TSmartAutoFitType.smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn; IncludeHeader: Boolean = TRUE); procedure SelectNodeEx(const Node: PVirtualNode; const ScrollNodeIntoView: Boolean = True; const Centre: Boolean = False); procedure ExpandAll(const Node: PVirtualNode = nil); procedure CollapseAll(const Node: PVirtualNode = nil);