├── .gitattributes ├── .gitignore ├── DLLs ├── DWCSITHVerInfo.RC ├── DWCSITHVerInfo.res ├── DebugWithCodeSiteImages.res ├── DebugWithCodeSiteXE.dpr ├── DebugWithCodeSiteXE.res ├── DebugWithCodeSiteXE10.dpr ├── DebugWithCodeSiteXE10.res ├── DebugWithCodeSiteXE101.dpr ├── DebugWithCodeSiteXE101.res ├── DebugWithCodeSiteXE102.dpr ├── DebugWithCodeSiteXE102.dproj ├── DebugWithCodeSiteXE102.eof ├── DebugWithCodeSiteXE102.ithelper ├── DebugWithCodeSiteXE102.res ├── DebugWithCodeSiteXE2.dpr ├── DebugWithCodeSiteXE2.res ├── DebugWithCodeSiteXE3.dpr ├── DebugWithCodeSiteXE3.res ├── DebugWithCodeSiteXE4.dpr ├── DebugWithCodeSiteXE4.res ├── DebugWithCodeSiteXE5.dpr ├── DebugWithCodeSiteXE5.res ├── DebugWithCodeSiteXE6.dpr ├── DebugWithCodeSiteXE6.res ├── DebugWithCodeSiteXE7.dpr ├── DebugWithCodeSiteXE7.res ├── DebugWithCodeSiteXE8.dpr └── DebugWithCodeSiteXE8.res ├── DebugWithCodeSiteXE102.eof ├── Images ├── DWCSMenuBitMap16x16.bmp ├── DWCSMenuBitMap16x16.xcf ├── DWCSSplashScreenBM24x24.bmp ├── DWCSSplashScreenBM48x48.bmp ├── DebugWithCodeSiteImages.rc ├── MainIcon24x24.xcf └── MainIcon48x48.xcf ├── License.md ├── README.md └── Source ├── CompilerDefinitions.inc ├── DebugWithCodeSite.AboutBox.pas ├── DebugWithCodeSite.Common.pas ├── DebugWithCodeSite.Functions.pas ├── DebugWithCodeSite.InterfaceInitialisation.pas ├── DebugWithCodeSite.Interfaces.pas ├── DebugWithCodeSite.OptionsFrame.dfm ├── DebugWithCodeSite.OptionsFrame.pas ├── DebugWithCodeSite.OptionsIDEInterface.pas ├── DebugWithCodeSite.PluginOptions.pas ├── DebugWithCodeSite.SplashScreen.pas ├── DebugWithCodeSite.Types.pas └── DebugWithCodeSite.Wizard.pas /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Uncomment these types if you want even more clean repository. But be careful. 2 | # It can make harm to an existing project source. Read explanations below. 3 | # 4 | # Resource files are binaries containing manifest, project icon and version info. 5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. 6 | #*.res 7 | # 8 | # Type library file (binary). In old Delphi versions it should be stored. 9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. 10 | #*.tlb 11 | # 12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7. 13 | # Uncomment this if you are not using diagrams or use newer Delphi version. 14 | #*.ddp 15 | # 16 | # Visual LiveBindings file. Added in Delphi XE2. 17 | # Uncomment this if you are not using LiveBindings Designer. 18 | #*.vlb 19 | # 20 | # Deployment Manager configuration file for your project. Added in Delphi XE2. 21 | # Uncomment this if it is not mobile development and you do not use remote debug feature. 22 | #*.deployproj 23 | # 24 | # C++ object files produced when C/C++ Output file generation is configured. 25 | # Uncomment this if you are not using external objects (zlib library for example). 26 | #*.obj 27 | # 28 | 29 | # Delphi compiler-generated binaries (safe to delete) 30 | *.exe 31 | *.dll 32 | *.bpl 33 | *.bpi 34 | *.dcp 35 | *.so 36 | *.apk 37 | *.drc 38 | *.map 39 | *.dres 40 | *.rsm 41 | *.tds 42 | *.dcu 43 | *.lib 44 | *.a 45 | *.o 46 | *.ocx 47 | 48 | # Delphi autogenerated files (duplicated info) 49 | *.cfg 50 | *.hpp 51 | *Resource.rc 52 | 53 | # Delphi local files (user-specific info) 54 | *.local 55 | *.identcache 56 | *.projdata 57 | *.tvsconfig 58 | *.dsk 59 | 60 | # Delphi history and backups 61 | __history/ 62 | __recovery/ 63 | *.~* 64 | 65 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi) 66 | *.stat 67 | 68 | # ========================= 69 | # Operating System Files 70 | # ========================= 71 | 72 | # OSX 73 | # ========================= 74 | 75 | .DS_Store 76 | .AppleDouble 77 | .LSOverride 78 | 79 | # Thumbnails 80 | ._* 81 | 82 | # Files that might appear in the root of a volume 83 | .DocumentRevisions-V100 84 | .fseventsd 85 | .Spotlight-V100 86 | .TemporaryItems 87 | .Trashes 88 | .VolumeIcon.icns 89 | 90 | # Directories potentially created on remote AFP share 91 | .AppleDB 92 | .AppleDesktop 93 | Network Trash Folder 94 | Temporary Items 95 | .apdisk 96 | 97 | # Windows 98 | # ========================= 99 | 100 | # Windows image file caches 101 | Thumbs.db 102 | ehthumbs.db 103 | 104 | # Folder config file 105 | Desktop.ini 106 | 107 | # Recycle Bin used on file shares 108 | $RECYCLE.BIN/ 109 | 110 | # Windows Installer files 111 | *.cab 112 | *.msi 113 | *.msm 114 | *.msp 115 | 116 | # Windows shortcuts 117 | *.lnk 118 | -------------------------------------------------------------------------------- /DLLs/DWCSITHVerInfo.RC: -------------------------------------------------------------------------------- 1 | LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US 2 | 3 | 1 VERSIONINFO LOADONCALL MOVEABLE DISCARDABLE IMPURE 4 | FILEVERSION 1, 1, 0, 113 5 | PRODUCTVERSION 1, 1, 0, 113 6 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 7 | FILEOS VOS__WINDOWS32 8 | FILETYPE VFT_APP 9 | { 10 | BLOCK "StringFileInfo" 11 | { 12 | BLOCK "040904E4" 13 | { 14 | VALUE "CompanyName", "Season's Fall Music\000" 15 | VALUE "FileDescription", "Debug with CodeSite: RAD Studio IDE plug-in to allow quick setting of a breakpoint to send debugging information to CodeSite\000" 16 | VALUE "FileVersion", "1.1.0.113\000" 17 | VALUE "InternalName", "DebugWithCodeSite\000" 18 | VALUE "LegalCopyright", "Season's Fall Music\000" 19 | VALUE "LegalTrademarks", "Season's Fall Music\000" 20 | VALUE "OriginalFilename", "DebugWithCodeSite\000" 21 | VALUE "ProductName", "DebugWithCodeSite\000" 22 | VALUE "ProductVersion", "1.1\000" 23 | VALUE "Comments", "Debug with CodeSite: RAD Studio IDE plug-in to allow quick setting of a breakpoint to send debugging information to CodeSite\000" 24 | } 25 | } 26 | BLOCK "VarFileInfo" 27 | { 28 | VALUE "Translation", 1033, 1252 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DLLs/DWCSITHVerInfo.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DWCSITHVerInfo.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteImages.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteImages.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE10.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE10; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE10.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE10.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE101.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE101; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE101.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE101.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE102.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE102; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE102.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {0CD4BD5F-6B0D-46BC-B047-A92E3544F877} 4 | 18.2 5 | VCL 6 | DebugWithCodeSiteXE102.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 11 | Library 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Cfg_1 34 | true 35 | true 36 | 37 | 38 | true 39 | Base 40 | true 41 | 42 | 43 | true 44 | Cfg_2 45 | true 46 | true 47 | 48 | 49 | .\$(Platform)\$(Config) 50 | ..\ 51 | false 52 | false 53 | false 54 | false 55 | false 56 | true 57 | VCL;RTL;DesignIDE;$(DCC_UsePackage) 58 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 59 | DebugWithCodeSiteXE102 60 | true 61 | true 62 | 2057 63 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 64 | 65 | 66 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 67 | Debug 68 | C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\bds.exe 69 | 1033 70 | -rDebugWithCodeSite 71 | (None) 72 | 73 | 74 | DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;RaizeComponentsVcl;FmxTeeUI;emsedge;RaizeComponentsVclDb;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;VirtualTreesR;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;SynEdit_R;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 75 | 76 | 77 | DEBUG;$(DCC_Define) 78 | true 79 | false 80 | true 81 | true 82 | true 83 | 84 | 85 | false 86 | 1033 87 | 88 | 89 | false 90 | RELEASE;$(DCC_Define) 91 | 0 92 | 0 93 | 94 | 95 | 1033 96 | 97 | 98 | 99 | MainSource 100 | 101 | 102 |
DWCSITHVerInfo.res
103 |
104 | 105 |
DebugWithCodeSiteImages.res
106 |
107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 |
frameDWCSOptions
116 | TFrame 117 |
118 | 119 | 120 |
; 121 | 122 | {$R *.res
123 |
124 | 125 | 126 | 127 | 128 | 129 | Cfg_2 130 | Base 131 | 132 | 133 | Base 134 | 135 | 136 | Cfg_1 137 | Base 138 | 139 |
140 | 141 | Delphi.Personality.12 142 | Application 143 | 144 | 145 | 146 | DebugWithCodeSiteXE102.dpr 147 | 148 | 149 | Microsoft Office XP Sample Automation Server Wrapper Components 150 | Embarcadero C++Builder Office XP Servers Package 151 | Embarcadero C++Builder Office 2000 Servers Package 152 | Microsoft Office 2000 Sample Automation Server Wrapper Components 153 | 154 | 155 | 156 | 157 | 158 | true 159 | 160 | 161 | 162 | 163 | true 164 | 165 | 166 | 167 | 168 | true 169 | 170 | 171 | 172 | 173 | true 174 | 175 | 176 | 177 | 178 | DebugWithCodeSiteXE102.dll 179 | true 180 | 181 | 182 | 183 | 184 | 1 185 | 186 | 187 | Contents\MacOS 188 | 1 189 | 190 | 191 | Contents\MacOS 192 | 0 193 | 194 | 195 | 196 | 197 | classes 198 | 1 199 | 200 | 201 | 202 | 203 | library\lib\armeabi-v7a 204 | 1 205 | 206 | 207 | 208 | 209 | library\lib\armeabi 210 | 1 211 | 212 | 213 | 214 | 215 | library\lib\mips 216 | 1 217 | 218 | 219 | 220 | 221 | library\lib\armeabi-v7a 222 | 1 223 | 224 | 225 | 226 | 227 | res\drawable 228 | 1 229 | 230 | 231 | 232 | 233 | res\values 234 | 1 235 | 236 | 237 | 238 | 239 | res\drawable 240 | 1 241 | 242 | 243 | 244 | 245 | res\drawable-xxhdpi 246 | 1 247 | 248 | 249 | 250 | 251 | res\drawable-ldpi 252 | 1 253 | 254 | 255 | 256 | 257 | res\drawable-mdpi 258 | 1 259 | 260 | 261 | 262 | 263 | res\drawable-hdpi 264 | 1 265 | 266 | 267 | 268 | 269 | res\drawable-xhdpi 270 | 1 271 | 272 | 273 | 274 | 275 | res\drawable-small 276 | 1 277 | 278 | 279 | 280 | 281 | res\drawable-normal 282 | 1 283 | 284 | 285 | 286 | 287 | res\drawable-large 288 | 1 289 | 290 | 291 | 292 | 293 | res\drawable-xlarge 294 | 1 295 | 296 | 297 | 298 | 299 | 1 300 | 301 | 302 | Contents\MacOS 303 | 1 304 | 305 | 306 | 0 307 | 308 | 309 | 310 | 311 | Contents\MacOS 312 | 1 313 | .framework 314 | 315 | 316 | 0 317 | 318 | 319 | 320 | 321 | 1 322 | .dylib 323 | 324 | 325 | 1 326 | .dylib 327 | 328 | 329 | 1 330 | .dylib 331 | 332 | 333 | Contents\MacOS 334 | 1 335 | .dylib 336 | 337 | 338 | 0 339 | .dll;.bpl 340 | 341 | 342 | 343 | 344 | 1 345 | .dylib 346 | 347 | 348 | 1 349 | .dylib 350 | 351 | 352 | 1 353 | .dylib 354 | 355 | 356 | Contents\MacOS 357 | 1 358 | .dylib 359 | 360 | 361 | 0 362 | .bpl 363 | 364 | 365 | 366 | 367 | 0 368 | 369 | 370 | 0 371 | 372 | 373 | 0 374 | 375 | 376 | 0 377 | 378 | 379 | Contents\Resources\StartUp\ 380 | 0 381 | 382 | 383 | 0 384 | 385 | 386 | 387 | 388 | 1 389 | 390 | 391 | 1 392 | 393 | 394 | 1 395 | 396 | 397 | 398 | 399 | 1 400 | 401 | 402 | 1 403 | 404 | 405 | 1 406 | 407 | 408 | 409 | 410 | 1 411 | 412 | 413 | 1 414 | 415 | 416 | 1 417 | 418 | 419 | 420 | 421 | 1 422 | 423 | 424 | 1 425 | 426 | 427 | 1 428 | 429 | 430 | 431 | 432 | 1 433 | 434 | 435 | 1 436 | 437 | 438 | 1 439 | 440 | 441 | 442 | 443 | 1 444 | 445 | 446 | 1 447 | 448 | 449 | 1 450 | 451 | 452 | 453 | 454 | 1 455 | 456 | 457 | 1 458 | 459 | 460 | 1 461 | 462 | 463 | 464 | 465 | 1 466 | 467 | 468 | 469 | 470 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 471 | 1 472 | 473 | 474 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 475 | 1 476 | 477 | 478 | 479 | 480 | 1 481 | 482 | 483 | 1 484 | 485 | 486 | 487 | 488 | ..\ 489 | 1 490 | 491 | 492 | ..\ 493 | 1 494 | 495 | 496 | 497 | 498 | 1 499 | 500 | 501 | 1 502 | 503 | 504 | 1 505 | 506 | 507 | 508 | 509 | 1 510 | 511 | 512 | 1 513 | 514 | 515 | 1 516 | 517 | 518 | 519 | 520 | ..\ 521 | 1 522 | 523 | 524 | 525 | 526 | Contents 527 | 1 528 | 529 | 530 | 531 | 532 | Contents\Resources 533 | 1 534 | 535 | 536 | 537 | 538 | library\lib\armeabi-v7a 539 | 1 540 | 541 | 542 | 1 543 | 544 | 545 | 1 546 | 547 | 548 | 1 549 | 550 | 551 | 1 552 | 553 | 554 | Contents\MacOS 555 | 1 556 | 557 | 558 | 0 559 | 560 | 561 | 562 | 563 | 1 564 | 565 | 566 | 1 567 | 568 | 569 | 570 | 571 | Assets 572 | 1 573 | 574 | 575 | Assets 576 | 1 577 | 578 | 579 | 580 | 581 | Assets 582 | 1 583 | 584 | 585 | Assets 586 | 1 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | True 600 | False 601 | 602 | 603 | 12 604 | 605 | 606 | 607 | 608 |
609 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE102.eof: -------------------------------------------------------------------------------- 1 |  2 | 3 | [Exception Log] 4 | EurekaLog Version=8000 5 | Activate=1 6 | DeleteMapAfterCompile=0 7 | Encrypt Password="" 8 | 9 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE102.ithelper: -------------------------------------------------------------------------------- 1 | [Setup] 2 | IncBuild=1 3 | CopyVersionInfoFrom= 4 | ExcludedResExts=.dcr 5 | EnabledVersionInfo=1 6 | IncludeInProject=1 7 | CompileWithBRCC32=0 8 | MajorVer=1 9 | MinorVer=1 10 | ReleaseVer=0 11 | BuildVer=114 12 | ResourceName=DWCSITHVerInfo 13 | WarnBefore=0 14 | WarnAfter=0 15 | 16 | [Zipping] 17 | Enabled=1 18 | ZipFile=D:\HoylD\Web Page\Zips\DebugWithCodeSite.zip 19 | BasePath=D:\HoylD\RAD Studio\ 20 | ExclusionFiles= 21 | 22 | [Additional Zip Files] 23 | Item0=D:\HoylD\RAD Studio\IDE Addins\Debug with CodeSite\Images\* 24 | 25 | [VersionInfo] 26 | CompanyName=Season's Fall Music 27 | FileDescription=Debug with CodeSite: RAD Studio IDE plug-in to allow quick setting of a breakpoint to send debugging information to CodeSite 28 | FileVersion=1.1.0.114 29 | InternalName=DebugWithCodeSite 30 | LegalCopyright=Season's Fall Music 31 | LegalTrademarks=Season's Fall Music 32 | OriginalFilename=DebugWithCodeSite 33 | ProductName=DebugWithCodeSite 34 | ProductVersion=1.1 35 | Comments=Debug with CodeSite: RAD Studio IDE plug-in to allow quick setting of a breakpoint to send debugging information to CodeSite 36 | 37 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE102.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE102.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE2.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE2; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE2.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE2.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE3.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE3; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE3.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE3.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE4.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE4; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE4.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE4.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE5.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE5; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE5.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE5.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE6.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE6; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE6.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE6.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE7.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE7; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE7.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE7.res -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE8.dpr: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main project code for a RAD Studio IDE plug-in for adding CodeSite 4 | debugging messages via a breakpoint. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @date 17 Sep 2017 9 | 10 | **) 11 | Library DebugWithCodeSiteXE8; 12 | 13 | { Important note about DLL memory management: ShareMem must be the 14 | first unit in your library's USES clause AND your project's (select 15 | Project-View Source) USES clause if your DLL exports any procedures or 16 | functions that pass strings as parameters or function results. This 17 | applies to all strings passed to and from your DLL--even those that 18 | are nested in records and classes. ShareMem is the interface unit to 19 | the BORLNDMM.DLL shared memory manager, which must be deployed along 20 | with your DLL. To avoid using BORLNDMM.DLL, pass string information 21 | using PChar or ShortString parameters. } 22 | 23 | {$R 'DWCSITHVerInfo.res' 'DWCSITHVerInfo.RC'} 24 | {$R 'DebugWithCodeSiteImages.res' '..\Images\DebugWithCodeSiteImages.rc'} 25 | 26 | Uses 27 | DebugWithCodeSite.InterfaceInitialisation in '..\Source\DebugWithCodeSite.InterfaceInitialisation.pas', 28 | DebugWithCodeSite.Wizard in '..\Source\DebugWithCodeSite.Wizard.pas', 29 | DebugWithCodeSite.Functions in '..\Source\DebugWithCodeSite.Functions.pas', 30 | DebugWithCodeSite.AboutBox in '..\Source\DebugWithCodeSite.AboutBox.pas', 31 | DebugWithCodeSite.Common in '..\Source\DebugWithCodeSite.Common.pas', 32 | DebugWithCodeSite.SplashScreen in '..\Source\DebugWithCodeSite.SplashScreen.pas', 33 | DebugWithCodeSite.OptionsIDEInterface in '..\Source\DebugWithCodeSite.OptionsIDEInterface.pas', 34 | DebugWithCodeSite.OptionsFrame in '..\Source\DebugWithCodeSite.OptionsFrame.pas' {frameDWCSOptions: TFrame}, 35 | DebugWithCodeSite.Types in '..\Source\DebugWithCodeSite.Types.pas', 36 | DebugWithCodeSite.Interfaces in '..\Source\DebugWithCodeSite.Interfaces.pas', 37 | DebugWithCodeSite.PluginOptions in '..\Source\DebugWithCodeSite.PluginOptions.pas'; 38 | 39 | {$R *.res} 40 | 41 | Begin 42 | 43 | End. 44 | -------------------------------------------------------------------------------- /DLLs/DebugWithCodeSiteXE8.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/DLLs/DebugWithCodeSiteXE8.res -------------------------------------------------------------------------------- /DebugWithCodeSiteXE102.eof: -------------------------------------------------------------------------------- 1 |  2 | 3 | [Exception Log] 4 | EurekaLog Version=8000 5 | Activate=1 6 | DeleteMapAfterCompile=0 7 | Encrypt Password="" 8 | 9 | -------------------------------------------------------------------------------- /Images/DWCSMenuBitMap16x16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/DWCSMenuBitMap16x16.bmp -------------------------------------------------------------------------------- /Images/DWCSMenuBitMap16x16.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/DWCSMenuBitMap16x16.xcf -------------------------------------------------------------------------------- /Images/DWCSSplashScreenBM24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/DWCSSplashScreenBM24x24.bmp -------------------------------------------------------------------------------- /Images/DWCSSplashScreenBM48x48.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/DWCSSplashScreenBM48x48.bmp -------------------------------------------------------------------------------- /Images/DebugWithCodeSiteImages.rc: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This is a Windows Resource File which generates a Splash Screen Icons for the 4 | RAD Studio IDEs. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @Date 16 Sep 2017 9 | 10 | */ 11 | DWCSSplashScreenBitMap48x48 BITMAP "..\Images\DWCSSplashScreenBM48x48.bmp" 12 | DWCSSplashScreenBitMap24x24 BITMAP "..\Images\DWCSSplashScreenBM24x24.bmp" 13 | DWCSMenuBitMap16x16 BITMAP "..\Images\DWCSMenuBitMap16x16.bmp" -------------------------------------------------------------------------------- /Images/MainIcon24x24.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/MainIcon24x24.xcf -------------------------------------------------------------------------------- /Images/MainIcon48x48.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DGH2112/Debug-with-CodeSite/227cd349fd02a2929ccf4f75e9f7b3ca291d45d5/Images/MainIcon48x48.xcf -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | # Debug with CodeSite 2 | 3 | Author: David Hoyle 4 | 5 | Version: 1.0 6 | 7 | Date: 17 Sep 2017 8 | 9 | Web Page: http://www.davidghoyle.co.uk/WordPress/?page_id=1777 10 | 11 | 12 | 13 | The code contained in the project can be used as an aid to learning and used 14 | to compile the project for your personal use. The code can be modified for 15 | your personel use however you should retain the headers identifying the 16 | original author and should not be published without the author's consent. 17 | 18 | The code should not be used verbatum in any other projects but the essense / ideas 19 | in the code can be reused in your applications. 20 | 21 | This code should not be published without the author's prior consent nor should 22 | the code be used in a commercial product without the author's consent. 23 | 24 | 25 | 26 | regards 27 | 28 | David Hoyle (c) 17 Sep 2017 29 | 30 | davidghoyle@gmail.com 31 | 32 | Web Page: http://www.davidghoyle.co.uk/WordPress/?page_id=1777 33 | 34 | Season's Fall Music 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Debug with CodeSite 2 | 3 | Author: David Hoyle 4 | 5 | Version: 1.0 6 | 7 | Date: 17 Sep 2017 8 | 9 | Web Page: http://www.davidghoyle.co.uk/WordPress/?page_id=1777 10 | 11 | 12 | 13 | Description 14 | 15 | This is a RAD Studio wizard / expert / plug-in which allow you to right click on 16 | an identifier in the code editor and add a breakpoint which contains a 17 | CodeSite.Send() evaluation expression so you can debug code with CodeSite without 18 | having to alter the underlying code (useful for debugging RTL and the VCL). 19 | 20 | -------------------------------------------------------------------------------- /Source/CompilerDefinitions.inc: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | An include unit to define compiler definitions for versions of Delphi. If the 4 | definition exists it means that that version of the compiler or high is 5 | available. 6 | 7 | @Version 1.0 8 | @Date 16 Sep 2017 9 | @Author David Hoyle 10 | 11 | **) 12 | 13 | // Borland Delphi 1, Version 1 14 | {$IFDEF VER80} 15 | {$ENDIF} 16 | 17 | // Borland Delphi 2, Version 2 18 | {$IFDEF VER90} 19 | {$DEFINE D0002} 20 | {$ENDIF} 21 | 22 | // Borland C++ Builder update 23 | {$IFDEF VER93} 24 | {$DEFINE D0002} 25 | {$ENDIF} 26 | 27 | // Borland Delphi 3, Version 3 28 | {$IFDEF VER100} 29 | {$DEFINE D0002} 30 | {$DEFINE D0003} 31 | {$ENDIF} 32 | 33 | // Borland C++ Builder Update, Version 3 34 | {$IFDEF VER110} 35 | {$DEFINE D0002} 36 | {$DEFINE D0003} 37 | {$ENDIF} 38 | 39 | // Borland Delphi 4, Version 4 40 | {$IFDEF VER120} 41 | {$DEFINE D0002} 42 | {$DEFINE D0003} 43 | {$DEFINE D0004} 44 | {$ENDIF} 45 | 46 | // Borland C++ Builder Update, Version 4 47 | {$IFDEF VER125} 48 | {$DEFINE D0002} 49 | {$DEFINE D0003} 50 | {$DEFINE D0004} 51 | {$ENDIF} 52 | 53 | // Borland Delphi 5, Version 5, Package version 50 54 | {$IFDEF VER130} 55 | {$DEFINE D0002} 56 | {$DEFINE D0003} 57 | {$DEFINE D0004} 58 | {$DEFINE D0005} 59 | {$ENDIF} 60 | 61 | // Borland Delphi 6, Version 6, Package version 60 62 | {$IFDEF VER140} 63 | {$DEFINE D0002} 64 | {$DEFINE D0003} 65 | {$DEFINE D0004} 66 | {$DEFINE D0005} 67 | {$DEFINE D0006} 68 | {$ENDIF} 69 | 70 | // Borland Delphi 7 & 7.1, Version 7, Package version 70 71 | {$IFDEF VER150} 72 | {$DEFINE D0002} 73 | {$DEFINE D0003} 74 | {$DEFINE D0004} 75 | {$DEFINE D0005} 76 | {$DEFINE D0006} 77 | {$DEFINE D0007} 78 | {$ENDIF} 79 | 80 | // Borland Delphi 8 for .NET, Version 8, Package version 80 81 | {$IFDEF VER160} 82 | {$DEFINE D0002} 83 | {$DEFINE D0003} 84 | {$DEFINE D0004} 85 | {$DEFINE D0005} 86 | {$DEFINE D0006} 87 | {$DEFINE D0007} 88 | {$DEFINE D0008} 89 | {$ENDIF} 90 | 91 | // Borland Delphi 2005 (BDS 3.0?), Version 9, Package version 90 92 | {$IFDEF VER170} 93 | {$DEFINE D0002} 94 | {$DEFINE D0003} 95 | {$DEFINE D0004} 96 | {$DEFINE D0005} 97 | {$DEFINE D0006} 98 | {$DEFINE D0007} 99 | {$DEFINE D0008} 100 | {$DEFINE D2005} 101 | {$ENDIF} 102 | 103 | // Borland Delphi 2006 (BDS 4.0), Version 10, Package version 100 104 | {$IFDEF VER180} 105 | {$DEFINE D0002} 106 | {$DEFINE D0003} 107 | {$DEFINE D0004} 108 | {$DEFINE D0005} 109 | {$DEFINE D0006} 110 | {$DEFINE D0007} 111 | {$DEFINE D0008} 112 | {$DEFINE D2005} 113 | {$DEFINE D2006} 114 | {$ENDIF} 115 | 116 | // CodeGear Delphi 2007 (RAD Studio 5.0), Version 11, Package version 110 117 | {$IFDEF VER185} 118 | {$DEFINE D0002} 119 | {$DEFINE D0003} 120 | {$DEFINE D0004} 121 | {$DEFINE D0005} 122 | {$DEFINE D0006} 123 | {$DEFINE D0007} 124 | {$DEFINE D0008} 125 | {$DEFINE D2005} 126 | {$DEFINE D2006} 127 | {$DEFINE D2007} 128 | {$ENDIF} 129 | 130 | // CodeGear Delphi 2007 for .NET (RAD Studio 5.0), Version 11, Package version 110 131 | {$IFDEF VER190} 132 | {$DEFINE D0002} 133 | {$DEFINE D0003} 134 | {$DEFINE D0004} 135 | {$DEFINE D0005} 136 | {$DEFINE D0006} 137 | {$DEFINE D0007} 138 | {$DEFINE D0008} 139 | {$DEFINE D2005} 140 | {$DEFINE D2006} 141 | {$DEFINE D2007} 142 | {$ENDIF} 143 | 144 | // CodeGear Delphi 2009 (RAD Studio 6.0), Version 12, Package version 12 145 | {$IFDEF VER200} 146 | {$DEFINE D0002} 147 | {$DEFINE D0003} 148 | {$DEFINE D0004} 149 | {$DEFINE D0005} 150 | {$DEFINE D0006} 151 | {$DEFINE D0007} 152 | {$DEFINE D0008} 153 | {$DEFINE D2005} 154 | {$DEFINE D2006} 155 | {$DEFINE D2007} 156 | {$DEFINE D2009} 157 | {$ENDIF} 158 | 159 | // Embarcadero Delphi 2010 (RAD Studio 7.0), Version 14, Package version 140 160 | {$IFDEF VER210} 161 | {$DEFINE D0002} 162 | {$DEFINE D0003} 163 | {$DEFINE D0004} 164 | {$DEFINE D0005} 165 | {$DEFINE D0006} 166 | {$DEFINE D0007} 167 | {$DEFINE D0008} 168 | {$DEFINE D2005} 169 | {$DEFINE D2006} 170 | {$DEFINE D2007} 171 | {$DEFINE D2009} 172 | {$DEFINE D2010} 173 | {$ENDIF} 174 | 175 | // Embarcadero Delphi XE (RAD Studio 8.0), Version 15, Package version 15 176 | {$IFDEF VER220} 177 | {$DEFINE D0002} 178 | {$DEFINE D0003} 179 | {$DEFINE D0004} 180 | {$DEFINE D0005} 181 | {$DEFINE D0006} 182 | {$DEFINE D0007} 183 | {$DEFINE D0008} 184 | {$DEFINE D2005} 185 | {$DEFINE D2006} 186 | {$DEFINE D2007} 187 | {$DEFINE D2009} 188 | {$DEFINE D2010} 189 | {$DEFINE DXE00} 190 | {$ENDIF} 191 | 192 | // Embarcadero Delphi XE2 (RAD Studio 9.0), Version 16, Package version 160 193 | {$IFDEF VER230} // 161 is the version for the five FireMonkey packages at XE2 Update 2 194 | {$DEFINE D0002} 195 | {$DEFINE D0003} 196 | {$DEFINE D0004} 197 | {$DEFINE D0005} 198 | {$DEFINE D0006} 199 | {$DEFINE D0007} 200 | {$DEFINE D0008} 201 | {$DEFINE D2005} 202 | {$DEFINE D2006} 203 | {$DEFINE D2007} 204 | {$DEFINE D2009} 205 | {$DEFINE D2010} 206 | {$DEFINE DXE00} 207 | {$DEFINE DXE20} 208 | {$ENDIF} 209 | 210 | // Embarcadero Delphi XE3 (RAD Studio 10.0), Version 17, Package version 170 211 | {$IFDEF VER240} 212 | {$DEFINE D0002} 213 | {$DEFINE D0003} 214 | {$DEFINE D0004} 215 | {$DEFINE D0005} 216 | {$DEFINE D0006} 217 | {$DEFINE D0007} 218 | {$DEFINE D0008} 219 | {$DEFINE D2005} 220 | {$DEFINE D2006} 221 | {$DEFINE D2007} 222 | {$DEFINE D2009} 223 | {$DEFINE D2010} 224 | {$DEFINE DXE00} 225 | {$DEFINE DXE20} 226 | {$DEFINE DXE30} 227 | {$ENDIF} 228 | 229 | // Embarcadero Delphi XE4 (RAD Studio 11.0), Version 18, Package version 180 230 | {$IFDEF VER250} 231 | {$DEFINE D0002} 232 | {$DEFINE D0003} 233 | {$DEFINE D0004} 234 | {$DEFINE D0005} 235 | {$DEFINE D0006} 236 | {$DEFINE D0007} 237 | {$DEFINE D0008} 238 | {$DEFINE D2005} 239 | {$DEFINE D2006} 240 | {$DEFINE D2007} 241 | {$DEFINE D2009} 242 | {$DEFINE D2010} 243 | {$DEFINE DXE00} 244 | {$DEFINE DXE20} 245 | {$DEFINE DXE30} 246 | {$DEFINE DXE40} 247 | {$ENDIF} 248 | 249 | // Embarcadero Delphi XE5 (RAD Studio 12.0), Version 19, Package version 190 250 | {$IFDEF VER260} 251 | {$DEFINE D0002} 252 | {$DEFINE D0003} 253 | {$DEFINE D0004} 254 | {$DEFINE D0005} 255 | {$DEFINE D0006} 256 | {$DEFINE D0007} 257 | {$DEFINE D0008} 258 | {$DEFINE D2005} 259 | {$DEFINE D2006} 260 | {$DEFINE D2007} 261 | {$DEFINE D2009} 262 | {$DEFINE D2010} 263 | {$DEFINE DXE00} 264 | {$DEFINE DXE20} 265 | {$DEFINE DXE30} 266 | {$DEFINE DXE40} 267 | {$DEFINE DXE50} 268 | {$ENDIF} 269 | 270 | // Embarcadero Delphi XE6 (RAD Studio 14.0), Version 20, Package version 200 271 | {$IFDEF VER270} 272 | {$DEFINE D0002} 273 | {$DEFINE D0003} 274 | {$DEFINE D0004} 275 | {$DEFINE D0005} 276 | {$DEFINE D0006} 277 | {$DEFINE D0007} 278 | {$DEFINE D0008} 279 | {$DEFINE D2005} 280 | {$DEFINE D2006} 281 | {$DEFINE D2007} 282 | {$DEFINE D2009} 283 | {$DEFINE D2010} 284 | {$DEFINE DXE00} 285 | {$DEFINE DXE20} 286 | {$DEFINE DXE30} 287 | {$DEFINE DXE40} 288 | {$DEFINE DXE50} 289 | {$DEFINE DXE60} 290 | {$ENDIF} 291 | 292 | // Embarcadero Delphi XE7 (Studio 15.0), Version 21, Package version 210 293 | {$IFDEF VER280} 294 | {$DEFINE D0002} 295 | {$DEFINE D0003} 296 | {$DEFINE D0004} 297 | {$DEFINE D0005} 298 | {$DEFINE D0006} 299 | {$DEFINE D0007} 300 | {$DEFINE D0008} 301 | {$DEFINE D2005} 302 | {$DEFINE D2006} 303 | {$DEFINE D2007} 304 | {$DEFINE D2009} 305 | {$DEFINE D2010} 306 | {$DEFINE DXE00} 307 | {$DEFINE DXE20} 308 | {$DEFINE DXE30} 309 | {$DEFINE DXE40} 310 | {$DEFINE DXE50} 311 | {$DEFINE DXE60} 312 | {$DEFINE DXE70} 313 | {$ENDIF} 314 | 315 | // Embarcadero Delphi XE8 (Studio 16.0), Version 22, Package version 220 316 | {$IFDEF VER290} 317 | {$DEFINE D0002} 318 | {$DEFINE D0003} 319 | {$DEFINE D0004} 320 | {$DEFINE D0005} 321 | {$DEFINE D0006} 322 | {$DEFINE D0007} 323 | {$DEFINE D0008} 324 | {$DEFINE D2005} 325 | {$DEFINE D2006} 326 | {$DEFINE D2007} 327 | {$DEFINE D2009} 328 | {$DEFINE D2010} 329 | {$DEFINE DXE00} 330 | {$DEFINE DXE20} 331 | {$DEFINE DXE30} 332 | {$DEFINE DXE40} 333 | {$DEFINE DXE50} 334 | {$DEFINE DXE60} 335 | {$DEFINE DXE70} 336 | {$DEFINE DXE80} 337 | {$ENDIF} 338 | 339 | // Embarcadero Delphi XE10 Seattle (Studio 17.0), Version 23, Package version 230 340 | {$IFDEF VER300} 341 | {$DEFINE D0002} 342 | {$DEFINE D0003} 343 | {$DEFINE D0004} 344 | {$DEFINE D0005} 345 | {$DEFINE D0006} 346 | {$DEFINE D0007} 347 | {$DEFINE D0008} 348 | {$DEFINE D2005} 349 | {$DEFINE D2006} 350 | {$DEFINE D2007} 351 | {$DEFINE D2009} 352 | {$DEFINE D2010} 353 | {$DEFINE DXE00} 354 | {$DEFINE DXE20} 355 | {$DEFINE DXE30} 356 | {$DEFINE DXE40} 357 | {$DEFINE DXE50} 358 | {$DEFINE DXE60} 359 | {$DEFINE DXE70} 360 | {$DEFINE DXE80} 361 | {$DEFINE DXE100} 362 | {$ENDIF} 363 | 364 | // Embarcadero Delphi XE10.1 Berlin (Studio 18.0), Version 24, Package version 240 365 | {$IFDEF VER310} 366 | {$DEFINE D0002} 367 | {$DEFINE D0003} 368 | {$DEFINE D0004} 369 | {$DEFINE D0005} 370 | {$DEFINE D0006} 371 | {$DEFINE D0007} 372 | {$DEFINE D0008} 373 | {$DEFINE D2005} 374 | {$DEFINE D2006} 375 | {$DEFINE D2007} 376 | {$DEFINE D2009} 377 | {$DEFINE D2010} 378 | {$DEFINE DXE00} 379 | {$DEFINE DXE20} 380 | {$DEFINE DXE30} 381 | {$DEFINE DXE40} 382 | {$DEFINE DXE50} 383 | {$DEFINE DXE60} 384 | {$DEFINE DXE70} 385 | {$DEFINE DXE80} 386 | {$DEFINE DXE100} 387 | {$DEFINE DXE101} 388 | {$ENDIF} 389 | 390 | // Embarcadero Delphi XE10.2 Tokyo (Studio 19.0), Version 25, Package version 250 391 | {$IFDEF VER320} 392 | {$DEFINE D0002} 393 | {$DEFINE D0003} 394 | {$DEFINE D0004} 395 | {$DEFINE D0005} 396 | {$DEFINE D0006} 397 | {$DEFINE D0007} 398 | {$DEFINE D0008} 399 | {$DEFINE D2005} 400 | {$DEFINE D2006} 401 | {$DEFINE D2007} 402 | {$DEFINE D2009} 403 | {$DEFINE D2010} 404 | {$DEFINE DXE00} 405 | {$DEFINE DXE20} 406 | {$DEFINE DXE30} 407 | {$DEFINE DXE40} 408 | {$DEFINE DXE50} 409 | {$DEFINE DXE60} 410 | {$DEFINE DXE70} 411 | {$DEFINE DXE80} 412 | {$DEFINE DXE100} 413 | {$DEFINE DXE101} 414 | {$DEFINE DXE102} 415 | {$ENDIF} 416 | 417 | 418 | 419 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.AboutBox.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains two procedures for adding and removing an about box entry in the RAD Studio 4 | IDE. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @Date 16 Sep 2017 9 | 10 | **) 11 | Unit DebugWithCodeSite.AboutBox; 12 | 13 | Interface 14 | 15 | {$INCLUDE CompilerDefinitions.inc} 16 | 17 | Procedure AddAboutBoxEntry; 18 | Procedure RemoveAboutBoxEntry; 19 | 20 | Implementation 21 | 22 | Uses 23 | ToolsAPI, 24 | SysUtils, 25 | Windows, 26 | DebugWithCodeSite.Common, 27 | Forms; 28 | 29 | {$IFDEF D2005} 30 | Var 31 | (** This is an internal reference for the about box entry`s plugin index - requried for 32 | removal. **) 33 | iAboutPlugin : Integer; 34 | {$ENDIF} 35 | 36 | (** 37 | 38 | This method adds an Aboutbox entry to the RAD Studio IDE. 39 | 40 | @precon None. 41 | @postcon The about box entry is added to the IDE and its plugin index stored in iAboutPlugin. 42 | 43 | **) 44 | Procedure AddAboutBoxEntry; 45 | 46 | Var 47 | iMajor : Integer; 48 | iMinor : Integer; 49 | iBugFix : Integer; 50 | iBuild : Integer; 51 | bmSplashScreen : HBITMAP; 52 | 53 | Begin //FI:W519 54 | {$IFDEF D2005} 55 | BuildNumber(iMajor, iMinor, iBugFix, iBuild); 56 | bmSplashScreen := LoadBitmap(hInstance, 'DWCSSplashScreenBitMap48x48'); 57 | iAboutPlugin := (BorlandIDEServices As IOTAAboutBoxServices).AddPluginInfo( 58 | Format(strSplashScreenName, [iMajor, iMinor, Copy(strRevision, iBugFix + 1, 1), 59 | Application.Title]), 60 | 'An IDE plug-in to added CodeSite debugging via Breakpoints.', 61 | bmSplashScreen, 62 | False, 63 | Format(strSplashScreenBuild, [iMajor, iMinor, iBugfix, iBuild]), 64 | Format('SKU Build %d.%d.%d.%d', [iMajor, iMinor, iBugfix, iBuild])); 65 | {$ENDIF} 66 | End; 67 | 68 | (** 69 | 70 | This method removes the indexed abotu box entry from the RAD Studio IDE. 71 | 72 | @precon None. 73 | @postcon The about box entry is remvoed from the IDE. 74 | 75 | **) 76 | Procedure RemoveAboutBoxEntry; 77 | 78 | Begin //FI:W519 79 | {$IFDEF D2010} 80 | If iAboutPlugin > iWizardFailState Then 81 | (BorlandIDEServices As IOTAAboutBoxServices).RemovePluginInfo(iAboutPlugin); 82 | {$ENDIF} 83 | End; 84 | 85 | End. 86 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.Common.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains some common resource strings and a procedure for setting the wizard /expert / 4 | plug-ins build information for the splash screen and about box. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @Date 16 Sep 2017 9 | 10 | **) 11 | Unit DebugWithCodeSite.Common; 12 | 13 | Interface 14 | 15 | Uses 16 | ToolsAPI; 17 | 18 | Procedure BuildNumber(var iMajor, iMinor, iBugFix, iBuild : Integer); 19 | 20 | {$IFNDEF _FIXINSIGHT_} 21 | Resourcestring 22 | (** This resource string is used for the bug fix number in the splash screen and about box 23 | entries. **) 24 | strRevision = ' abcdefghijklmnopqrstuvwxyz'; 25 | (** This resource string is used in the splash screen and about box entries. **) 26 | strSplashScreenName = 'Debug with CodeSite %d.%d%s for %s'; 27 | (** This resource string is used in the splash screen and about box entries. **) 28 | strSplashScreenBuild = 'Freeware by David Hoyle (Build %d.%d.%d.%d)'; 29 | 30 | Const 31 | (** A constant to define the failed state for a notifier not installed. **) 32 | iWizardFailState = -1; //FI:O803 33 | {$ENDIF} 34 | 35 | Implementation 36 | 37 | Uses 38 | SysUtils, 39 | Windows; 40 | 41 | (** 42 | 43 | This procedure returns the build information for the OTA Plugin. 44 | 45 | @precon None. 46 | @postcon the build information for the OTA plugin is returned. 47 | 48 | @param iMajor as an Integer as a reference 49 | @param iMinor as an Integer as a reference 50 | @param iBugFix as an Integer as a reference 51 | @param iBuild as an Integer as a reference 52 | 53 | **) 54 | Procedure BuildNumber(var iMajor, iMinor, iBugFix, iBuild : Integer); 55 | 56 | Var 57 | VerInfoSize: DWORD; 58 | VerInfo: Pointer; 59 | VerValueSize: DWORD; 60 | VerValue: PVSFixedFileInfo; 61 | Dummy: DWORD; 62 | strBuffer : Array[0..MAX_PATH] Of Char; 63 | 64 | Begin 65 | { Build Number } 66 | GetModuleFilename(hInstance, strBuffer, MAX_PATH); 67 | VerInfoSize := GetFileVersionInfoSize(strBuffer, Dummy); 68 | If VerInfoSize <> 0 Then 69 | Begin 70 | GetMem(VerInfo, VerInfoSize); 71 | Try 72 | GetFileVersionInfo(strBuffer, 0, VerInfoSize, VerInfo); 73 | VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); 74 | With VerValue^ Do 75 | Begin 76 | iMajor := dwFileVersionMS shr 16; 77 | iMinor := dwFileVersionMS and $FFFF; 78 | iBugFix := dwFileVersionLS shr 16; 79 | iBuild := dwFileVersionLS and $FFFF; 80 | End; 81 | Finally 82 | FreeMem(VerInfo, VerInfoSize); 83 | End; 84 | End; 85 | End; 86 | 87 | End. 88 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.Functions.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains OTA functions for use throughout the application. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 17 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.Functions; 11 | 12 | Interface 13 | 14 | Uses 15 | ToolsAPI; 16 | 17 | {$INCLUDE CompilerDefinitions.Inc} 18 | 19 | Function GetIdentifierAtCursor : String; 20 | Procedure CheckCodeSiteLogging; 21 | Procedure CheckDebuggingDCUs; 22 | Procedure CheckLibraryPath; 23 | 24 | Implementation 25 | 26 | Uses 27 | {$IFDEF DEBUG} 28 | CodeSiteLogging, 29 | {$ENDIF} 30 | Classes, 31 | SysUtils, 32 | RegularExpressions, 33 | Variants; 34 | 35 | (** 36 | 37 | This method returns the editor code as a string from the given source editor 38 | reference. 39 | 40 | @precon SourceEditor must be a valid instance. 41 | @postcon returns the editor code as a string from the given source editor 42 | reference. 43 | 44 | @param SourceEditor as an IOTASourceEditor 45 | @return a String 46 | 47 | **) 48 | Function EditorAsString(SourceEditor : IOTASourceEditor) : String; 49 | 50 | Const 51 | iBufferSize : Integer = 1024; 52 | 53 | Var 54 | Reader : IOTAEditReader; 55 | iRead : Integer; 56 | iPosition : Integer; 57 | strBuffer : AnsiString; 58 | 59 | Begin 60 | Result := ''; 61 | Reader := SourceEditor.CreateReader; 62 | Try 63 | iPosition := 0; 64 | Repeat 65 | SetLength(strBuffer, iBufferSize); 66 | iRead := Reader.GetText(iPosition, PAnsiChar(strBuffer), iBufferSize); 67 | SetLength(strBuffer, iRead); 68 | Result := Result + String(strBuffer); 69 | Inc(iPosition, iRead); 70 | Until iRead < iBufferSize; 71 | Finally 72 | Reader := Nil; 73 | End; 74 | End; 75 | 76 | (** 77 | 78 | This method returns the source editor for the given module. 79 | 80 | @precon Module must be a valid instance. 81 | @postcon Returns the source editor for the given module. 82 | 83 | @param Module as an IOTAMOdule 84 | @return an IOTASourceEditor 85 | 86 | **) 87 | Function SourceEditor(Module : IOTAMOdule) : IOTASourceEditor; 88 | 89 | Var 90 | iFileCount : Integer; 91 | i : Integer; 92 | 93 | Begin 94 | Result := Nil; 95 | If Module = Nil Then Exit; 96 | With Module Do 97 | Begin 98 | iFileCount := GetModuleFileCount; 99 | For i := 0 To iFileCount - 1 Do 100 | If GetModuleFileEditor(i).QueryInterface(IOTASourceEditor, 101 | Result) = S_OK Then 102 | Break; 103 | End; 104 | End; 105 | 106 | (** 107 | 108 | This method returns the Source Editor interface for the active source editor 109 | else returns nil. 110 | 111 | @precon None. 112 | @postcon Returns the Source Editor interface for the active source editor 113 | else returns nil. 114 | 115 | @return an IOTASourceEditor 116 | 117 | **) 118 | Function ActiveSourceEditor : IOTASourceEditor; 119 | 120 | Var 121 | CM : IOTAModule; 122 | 123 | Begin 124 | Result := Nil; 125 | If BorlandIDEServices = Nil Then 126 | Exit; 127 | CM := (BorlandIDEServices as IOTAModuleServices).CurrentModule; 128 | Result := SourceEditor(CM); 129 | End; 130 | 131 | (** 132 | 133 | This method returns the identifier at the cursor position in the editor. 134 | 135 | @precon SourceEditor must be a valid instance. 136 | @postcon Returns the identifier at the cursor position in the editor if found else returns null. 137 | 138 | @param SourceEditor as an IOTASourceEditor as a constant 139 | @param EditPos as a TOTAEditPos as a constant 140 | @return a String 141 | 142 | **) 143 | Function IdentifierAtCursor(Const SourceEditor : IOTASourceEditor; Const EditPos : TOTAEditPos) : String; 144 | 145 | Const 146 | strValidIdentChars = ['a'..'z', 'A'..'Z', '_']; 147 | 148 | Var 149 | slSrcCode : TStringList; 150 | iLine : Integer; 151 | iStart, iEnd : Integer; 152 | strLine : String; 153 | 154 | Begin 155 | Result := ''; 156 | slSrcCode := TStringList.Create; 157 | Try 158 | slSrcCode.Text := EditorAsString(SourceEditor); 159 | iLine := EditPos.Line - 1; 160 | If (iLine <= slSrcCode.Count - 1) And (EditPos.Col <= Length(slSrcCode[iLine])) Then 161 | Begin 162 | strLine := slSrcCode[iLine]; 163 | iStart := EditPos.Col; 164 | // Search backwards for the start of a qualitied identifier 165 | While (iStart > 0) And CharInSet(strLine[iStart], strValidIdentChars + ['.']) Do 166 | Dec(iStart); 167 | Inc(iStart); 168 | iEnd := EditPos.Col; 169 | // Search forwards for the end of the current identifier 170 | While (iEnd < Length(strLine)) And CharInSet(strLine[iEnd], strValidIdentChars) Do 171 | Inc(iEnd); 172 | Result := Copy(strLine, iStart, iEnd - iStart); 173 | End; 174 | Finally 175 | slSrcCode.Free; 176 | End; 177 | End; 178 | 179 | (** 180 | 181 | This method returns the selected text in the editor. 182 | 183 | @precon SourceEditor must be a valid instance. 184 | @postcon Returns the selected text in the editor. 185 | 186 | @param SourceEditor as an IOTASourceEditor as a constant 187 | @return a String 188 | 189 | **) 190 | Function SelectedText(Const SourceEditor : IOTASourceEditor) : String; 191 | 192 | Var 193 | R: IOTAEditReader; 194 | iStart, iEnd : Integer; 195 | strAnsiBuffer : AnsiString; 196 | 197 | Begin 198 | iStart := SourceEditor.EditViews[0].CharPosToPos(SourceEditor.BlockStart); 199 | iEnd := SourceEditor.EditViews[0].CharPosToPos(SourceEditor.BlockAfter); 200 | R := SourceEditor.CreateReader; 201 | SetLength(strAnsiBuffer, iEnd - iStart); 202 | R.GetText( 203 | iStart, 204 | PAnsiChar(strAnsiBuffer), 205 | iEnd - iStart 206 | ); 207 | Result := String(strAnsiBuffer); 208 | End; 209 | 210 | (** 211 | 212 | This method returns the identifier at the cursor position in the passed module. 213 | 214 | @precon Module must be a valid instance. 215 | @postcon The identifier at the module cursor position is returned if found. 216 | 217 | @return a String 218 | 219 | **) 220 | Function GetIdentifierAtCursor : String; 221 | 222 | Var 223 | SourceEditor : IOTASourceEditor; 224 | EditPos: TOTAEditPos; 225 | 226 | Begin 227 | Result := ''; 228 | SourceEditor := ActiveSourceEditor; 229 | EditPos := SourceEditor.EditViews[0].CursorPos; 230 | If Assigned(SourceEditor) Then 231 | Begin 232 | If SourceEditor.EditViews[0].CharPosToPos(SourceEditor.BlockStart) < SourceEditor.EditViews[0].CharPosToPos(SourceEditor.BlockAfter) Then 233 | Result := SelectedText(SourceEditor) 234 | Else 235 | Result := IdentifierAtCursor(SourceEditor, EditPos); 236 | End; 237 | End; 238 | 239 | (** 240 | 241 | This method outputs a tool message to the message view. 242 | 243 | @precon None. 244 | @postcon A message is output the the message view. 245 | 246 | @param strMsg as a String as a constant 247 | 248 | **) 249 | Procedure OutputMsg(Const strMsg : String); 250 | 251 | Var 252 | ModS : IOTAModuleServices; 253 | MsgS : IOTAMessageServices; 254 | SE : IOTASourceEditor; 255 | Ptr : Pointer; 256 | 257 | Begin 258 | If Supports(BorlandIDEServices, IOTAModuleServices, ModS) Then 259 | Begin 260 | SE := SourceEditor(ModS.CurrentModule); 261 | Ptr := Nil; 262 | If Supports(BorlandIDEServices, IOTAMessageServices, MsgS) Then 263 | Begin 264 | MsgS.AddToolMessage( 265 | ModS.CurrentModule.FileName, 266 | strMsg, 267 | 'DebugWithCodeSite', 268 | SE.EditViews[0].CursorPos.Line, 269 | SE.EditViews[0].CursorPos.Col, 270 | Nil, 271 | Ptr 272 | ); 273 | MsgS.ShowMessageView(Nil); 274 | End; 275 | End; 276 | End; 277 | 278 | (** 279 | 280 | This method returns the current project group reference or nil if there is no 281 | project group open. 282 | 283 | @precon None. 284 | @postcon Returns the current project group reference or nil if there is no 285 | project group open. 286 | 287 | @return an IOTAProjectGroup 288 | 289 | **) 290 | Function ProjectGroup: IOTAProjectGroup; 291 | 292 | Var 293 | AModuleServices: IOTAModuleServices; 294 | AModule: IOTAModule; 295 | i: integer; 296 | AProjectGroup: IOTAProjectGroup; 297 | 298 | Begin 299 | Result := Nil; 300 | AModuleServices := (BorlandIDEServices as IOTAModuleServices); 301 | For i := 0 To AModuleServices.ModuleCount - 1 Do 302 | Begin 303 | AModule := AModuleServices.Modules[i]; 304 | If (AModule.QueryInterface(IOTAProjectGroup, AProjectGroup) = S_OK) Then 305 | Break; 306 | End; 307 | Result := AProjectGroup; 308 | end; 309 | 310 | (** 311 | 312 | This method returns the active project in the IDE else returns Nil if there is 313 | no active project. 314 | 315 | @precon None. 316 | @postcon Returns the active project in the IDE else returns Nil if there is 317 | no active project. 318 | 319 | @return an IOTAProject 320 | 321 | **) 322 | Function ActiveProject : IOTAProject; 323 | 324 | var 325 | G : IOTAProjectGroup; 326 | 327 | Begin 328 | Result := Nil; 329 | G := ProjectGroup; 330 | If G <> Nil Then 331 | Result := G.ActiveProject; 332 | End; 333 | 334 | (** 335 | 336 | This method returns the project module for the given project. 337 | 338 | @precon Project must be a valid instance. 339 | @postcon Returns the project module for the given project. 340 | 341 | @param Project as an IOTAProject 342 | @return an IOTAModule 343 | 344 | **) 345 | Function ProjectModule(Project : IOTAProject) : IOTAModule; 346 | 347 | Var 348 | AModuleServices: IOTAModuleServices; 349 | AModule: IOTAModule; 350 | i: integer; 351 | AProject: IOTAProject; 352 | 353 | Begin 354 | Result := Nil; 355 | AModuleServices := (BorlandIDEServices as IOTAModuleServices); 356 | For i := 0 To AModuleServices.ModuleCount - 1 Do 357 | Begin 358 | AModule := AModuleServices.Modules[i]; 359 | If (AModule.QueryInterface(IOTAProject, AProject) = S_OK) And 360 | (Project = AProject) Then 361 | Break; 362 | End; 363 | Result := AProject; 364 | End; 365 | 366 | (** 367 | 368 | This method checks the DPR or DPK file for CodeSiteLogging in the uses clause using regular 369 | expressions. 370 | 371 | @precon None. 372 | @postcon A messages is output if CodeSiteLogging is not found between the Uses and the Begin of the 373 | project file. 374 | 375 | **) 376 | Procedure CheckCodeSiteLogging; 377 | 378 | Const 379 | strUses = '\bUses\b'; 380 | strCodeSiteLoggingUses = '\bCodeSiteLogging\b'; 381 | strBegin = '\bBegin\b'; 382 | 383 | Var 384 | RegEx : TRegEx; 385 | strCode: String; 386 | SE: IOTASourceEditor; 387 | UsesMatch, CodeSiteLoggingMatch, BeginMatch: TMatch; 388 | 389 | Begin 390 | SE := SourceEditor(ProjectModule(ActiveProject)); 391 | If Assigned(SE) Then 392 | Begin 393 | strCode := EditorAsString(SE); 394 | RegEx := TRegEx.Create(strUses, [roIgnoreCase, roMultiLine, roCompiled]); 395 | UsesMatch := RegEx.Match(strCode); 396 | RegEx := TRegEx.Create(strCodeSiteLoggingUses, [roIgnoreCase, roMultiLine, roCompiled]); 397 | CodeSiteLoggingMatch := RegEx.Match(strCode); 398 | RegEx := TRegEx.Create(strBegin, [roIgnoreCase, roMultiLine, roCompiled]); 399 | BeginMatch := RegEx.Match(strCode); 400 | If Not(UsesMatch.Success And CodeSiteLoggingMatch.Success And BeginMatch.Success And 401 | (UsesMatch.Index < CodeSiteLoggingMatch.Index) And 402 | (CodeSiteLoggingMatch.Index < BeginMatch.Index)) Then 403 | OutputMsg('CodeSiteLogging NOT FOUND in the project file.'); 404 | End; 405 | End; 406 | 407 | (** 408 | 409 | This method changes the active projects options to see if the Debugging DCUs is enabled. Outputs 410 | a message if they are not. 411 | 412 | @precon None. 413 | @postcon Outputs a message if Debugging DCUs are not enabled. 414 | 415 | **) 416 | Procedure CheckDebuggingDCUs; 417 | 418 | Var 419 | Options: TOTAOptionNameArray; 420 | iOp: Integer; 421 | V: Variant; 422 | AP: IOTAProject; 423 | 424 | Begin 425 | AP := ActiveProject; 426 | If Assigned(AP) Then 427 | Begin 428 | Options := AP.ProjectOptions.GetOptionNames; 429 | For iOp := Low(options) To High(Options) Do 430 | If Pos('linkdebugvcl', LowerCase(Options[iOp].Name)) > 0 Then 431 | Begin 432 | V := ActiveProject.ProjectOptions.Values[Options[iOp].Name]; 433 | If Not V Then 434 | OutputMsg('You need to build your project with debugging DCUs.'); 435 | End; 436 | End; 437 | End; 438 | 439 | Procedure CheckLibraryPath; 440 | 441 | //Var 442 | // i : Integer; 443 | // P : IOTAProjectOptionsConfigurations; 444 | // B : IOTABuildConfiguration; 445 | 446 | Begin 447 | OutputMsg('Checking of LibrayrPath not currently implemented'); 448 | // If Supports(ActiveProject.ProjectOptions, IOTAProjectOptionsConfigurations, P) Then 449 | // Begin 450 | // CodeSite.Send(P.ActiveConfigurationName); 451 | // CodeSite.Send(P.ActivePlatformName); 452 | // CodeSite.Send('LibraryPath', P.ActiveConfiguration.InheritedValue('LibraryPath')); 453 | // End; 454 | End; 455 | 456 | End. 457 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.InterfaceInitialisation.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contaisn the code to load the wizard in to the RAD Studio IDE. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 16 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.InterfaceInitialisation; 11 | 12 | Interface 13 | 14 | Uses 15 | ToolsAPI; 16 | 17 | Procedure Register; 18 | Function InitWizard(Const BorlandIDEServices: IBorlandIDEServices; 19 | RegisterProc: TWizardRegisterProc; 20 | Var Terminate: TWizardTerminateProc): Boolean; StdCall; 21 | 22 | Exports 23 | InitWizard Name WizardEntryPoint; 24 | 25 | Implementation 26 | 27 | Uses 28 | DebugWithCodeSite.Wizard; 29 | 30 | (** 31 | 32 | This method is required by the RAD Studio IDE in order to load the plugin as a package. 33 | 34 | @precon None. 35 | @postcon Creates the plugin wizard. 36 | 37 | **) 38 | Procedure Register; 39 | 40 | Begin 41 | RegisterPackageWizard(TDWCSWizard.Create); 42 | End; 43 | 44 | (** 45 | 46 | This method is requested by the RAD Studio IDE in order to load the plugin as a DLL wizard. 47 | 48 | @precon None. 49 | @postcon Creates the plugin. 50 | 51 | @param BorlandIDEServices as an IBorlandIDEServices as a constant 52 | @param RegisterProc as a TWizardRegisterProc 53 | @param Terminate as a TWizardTerminateProc as a reference 54 | @return a Boolean 55 | 56 | **) 57 | Function InitWizard(Const BorlandIDEServices: IBorlandIDEServices; 58 | RegisterProc: TWizardRegisterProc; 59 | Var Terminate: TWizardTerminateProc): Boolean; StdCall; //FI:O804 60 | 61 | Begin 62 | Result := BorlandIDEServices <> Nil; 63 | RegisterProc(TDWCSWizard.Create); 64 | End; 65 | 66 | End. 67 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.Interfaces.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains interfaces for use within the application. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 17 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.Interfaces; 11 | 12 | Interface 13 | 14 | Uses 15 | DebugWithCodeSite.Types; 16 | 17 | Type 18 | (** An interface for loading and save options from the Options frame. **) 19 | IDWCSOptions = Interface 20 | ['{2C30AC8E-9C54-4544-A6AD-394DA361341F}'] 21 | Procedure LoadOptions(Const CheckOptions : TDWCSChecks; Const strCodeSiteMsg : String); 22 | Procedure SaveOptions(Var CheckOptions : TDWCSChecks; Var strCodeSiteMsg : String); 23 | End; 24 | 25 | (** An interface for the Plugin Options **) 26 | IDWCSPluginOptions = Interface 27 | ['{C0C072B8-4F4C-4EE1-938A-333FF7BCE881}'] 28 | Function GetCodeSiteTemplate : String; 29 | Procedure SetCodeSiteTemplate(Const strCodeSiteTemplate : String); 30 | Function GetCheckOptions : TDWCSChecks; 31 | Procedure SetCheckOptions(Const setCheckOptions : TDWCSChecks); 32 | Procedure LoadSettings; 33 | Procedure SaveSettings; 34 | (** 35 | This property gets and sets the CodeSite template that is used to fill the breakpoint evaluation 36 | expression. 37 | @precon None. 38 | @postcon Gets and sets the CodeSite template that is used to fill the breakpoint evaluation 39 | expression. 40 | @return a String 41 | **) 42 | Property CodeSiteTemplate : String Read GetCodeSiteTemplate Write SetCodeSiteTemplate; 43 | (** 44 | This property gets and sets the check options that is used to fill the breakpoint. 45 | @precon None. 46 | @postcon Gets and sets the check options that is used to fill the breakpoint. 47 | @return a TDWCSChecks 48 | **) 49 | Property CheckOptions : TDWCSChecks Read GetCheckOptions Write SetCheckOptions; 50 | End; 51 | 52 | Implementation 53 | 54 | End. 55 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.OptionsFrame.dfm: -------------------------------------------------------------------------------- 1 | object frameDWCSOptions: TframeDWCSOptions 2 | Left = 0 3 | Top = 0 4 | Width = 490 5 | Height = 327 6 | TabOrder = 0 7 | object lblCodeSiteMsg: TLabel 8 | AlignWithMargins = True 9 | Left = 3 10 | Top = 3 11 | Width = 484 12 | Height = 13 13 | Align = alTop 14 | Caption = 'Code Site Message (include at least 1 %s)' 15 | Font.Charset = DEFAULT_CHARSET 16 | Font.Color = clWindowText 17 | Font.Height = -11 18 | Font.Name = 'Tahoma' 19 | Font.Style = [fsBold] 20 | ParentFont = False 21 | end 22 | object lblCodeSiteOptions: TLabel 23 | AlignWithMargins = True 24 | Left = 3 25 | Top = 46 26 | Width = 484 27 | Height = 13 28 | Align = alTop 29 | Caption = 'Debug with CodeSite Options' 30 | Font.Charset = DEFAULT_CHARSET 31 | Font.Color = clWindowText 32 | Font.Height = -11 33 | Font.Name = 'Tahoma' 34 | Font.Style = [fsBold] 35 | ParentFont = False 36 | end 37 | object lvOptions: TListView 38 | AlignWithMargins = True 39 | Left = 3 40 | Top = 62 41 | Width = 484 42 | Height = 262 43 | Align = alClient 44 | Checkboxes = True 45 | Columns = < 46 | item 47 | AutoSize = True 48 | Caption = 'Options' 49 | end> 50 | GridLines = True 51 | ReadOnly = True 52 | RowSelect = True 53 | TabOrder = 0 54 | ViewStyle = vsReport 55 | OnChange = lvOptionsChange 56 | end 57 | object edtCodeSiteMsg: TEdit 58 | AlignWithMargins = True 59 | Left = 3 60 | Top = 19 61 | Width = 484 62 | Height = 21 63 | Align = alTop 64 | TabOrder = 1 65 | end 66 | end 67 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.OptionsFrame.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains a frame for editing the plug-ins options in the IDE options dialogue. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @date 16 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.OptionsFrame; 11 | 12 | Interface 13 | 14 | Uses 15 | Windows, 16 | Messages, 17 | SysUtils, 18 | Variants, 19 | Classes, 20 | Graphics, 21 | Controls, 22 | Forms, 23 | Dialogs, 24 | ComCtrls, 25 | DebugWithCodeSite.Types, 26 | DebugWithCodeSite.Interfaces, 27 | StdCtrls; 28 | 29 | Type 30 | (** A frame to decsribe tand edit the plug-ins optins in the IDE. **) 31 | TframeDWCSOptions = Class(TFrame, IDWCSOptions) 32 | lvOptions: TListView; 33 | lblCodeSiteMsg: TLabel; 34 | edtCodeSiteMsg: TEdit; 35 | lblCodeSiteOptions: TLabel; 36 | procedure lvOptionsChange(Sender: TObject; Item: TListItem; Change: TItemChange); 37 | Strict Private 38 | FChecks : TDWCSChecks; 39 | Strict Protected 40 | Procedure LoadOptions(Const CheckOptions : TDWCSChecks; Const strCodeSiteMsg : String); 41 | Procedure SaveOptions(Var CheckOptions : TDWCSChecks; Var strCodeSiteMsg : String); 42 | Public 43 | Constructor Create(AOwner: TComponent); Override; 44 | End; 45 | 46 | Implementation 47 | 48 | {$R *.dfm} 49 | 50 | 51 | Const 52 | (** A constant array of strings to provide text for each check option. **) 53 | strDWCSCheck: Array [Low(TDWCSCheck) .. High(TDWCSCheck)] Of String = ( 54 | 'Check that CodeSiteLogging is in the DPR/DPK unit list', 55 | 'Check that the project has Debugging DCUs checked', 56 | 'Check that CodeSite path is in the library', 57 | 'Log the Result of the CodeSite breakpoint to the event log', 58 | 'Break at the CodeSite breakpoint', 59 | 'Edit the breakpoint after its added' 60 | ); 61 | 62 | { TframeDWCSOptions } 63 | 64 | (** 65 | 66 | A constructor for the frameDWCSOptions class. 67 | 68 | @precon None. 69 | @postcon Populates the list view with options. 70 | 71 | @param AOwner as a TComponent 72 | 73 | **) 74 | Constructor TframeDWCSOptions.Create(AOwner: TComponent); 75 | 76 | Var 77 | iOp: TDWCSCheck; 78 | Item: TListItem; 79 | 80 | Begin 81 | Inherited Create(AOwner); 82 | For iOp := Low(TDWCSCheck) To High(TDWCSCheck) Do 83 | Begin 84 | Item := lvOptions.Items.Add; 85 | Item.Caption := strDWCSCheck[iOp]; 86 | End; 87 | End; 88 | 89 | (** 90 | 91 | This method loads the given options into the list view. 92 | 93 | @precon None. 94 | @postcon The checked status of the list view items is updated based on the given check set. 95 | 96 | @param CheckOptions as a TDWCSChecks as a constant 97 | @param strCodeSiteMsg as a String as a constant 98 | 99 | **) 100 | Procedure TframeDWCSOptions.LoadOptions(Const CheckOptions : TDWCSChecks; Const strCodeSiteMsg : String); 101 | 102 | Var 103 | iOp: TDWCSCheck; 104 | 105 | Begin 106 | FChecks := CheckOptions; 107 | For iOp := Low(TDWCSCheck) To High(TDWCSCheck) Do 108 | lvOptions.Items[Ord(iOp)].Checked := iOp In CheckOptions; 109 | edtCodeSiteMsg.Text := strCodeSiteMsg; 110 | End; 111 | 112 | (** 113 | 114 | This is an on change event handler for the ListView control. 115 | 116 | @precon None. 117 | @postcon Updates the internal check list with state changes. 118 | 119 | @param Sender as a TObject 120 | @param Item as a TListItem 121 | @param Change as a TItemChange 122 | 123 | **) 124 | Procedure TframeDWCSOptions.lvOptionsChange(Sender: TObject; Item: TListItem; Change: TItemChange); 125 | 126 | Begin 127 | If Change = ctState Then 128 | If Item.Checked Then 129 | Include(FChecks, TDWCSCheck(Item.Index)) 130 | Else 131 | Exclude(FChecks, TDWCSCheck(Item.Index)); 132 | End; 133 | 134 | (** 135 | 136 | This method saves the options from the list view to the given options set. 137 | 138 | @precon None. 139 | @postcon The given options set is updated with the selected options. 140 | 141 | @param CheckOptions as a TDWCSChecks as a reference 142 | @param strCodeSiteMsg as a String as a reference 143 | 144 | **) 145 | Procedure TframeDWCSOptions.SaveOptions(Var CheckOptions : TDWCSChecks; Var strCodeSiteMsg : String); 146 | 147 | Begin 148 | CheckOptions := FChecks; 149 | strCodeSiteMsg := edtCodeSiteMsg.Text; 150 | End; 151 | 152 | End. 153 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.OptionsIDEInterface.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains an a class to handle the installation of the options frame into the IDEs 4 | options dialogue. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @Date 17 Sep 2017 9 | 10 | **) 11 | Unit DebugWithCodeSite.OptionsIDEInterface; 12 | 13 | Interface 14 | 15 | {$INCLUDE CompilerDefinitions.inc} 16 | 17 | {$IFDEF DXE00} 18 | 19 | Uses 20 | ToolsAPI, 21 | DebugWithCodeSite.OptionsFrame, 22 | Forms, 23 | DebugWithCodeSite.Interfaces; 24 | 25 | Type 26 | (** A class which implements the INTAAddingOptions interface to added options frames 27 | to the IDEs options dialogue. **) 28 | TDWCSIDEOptionsHandler = Class(TInterfacedObject, IUnknown, INTAAddInOptions) 29 | Strict Private 30 | Class Var 31 | (** A class variable to hold the instance reference for this IDE options handler. **) 32 | FDWCSIDEOptions : TDWCSIDEOptionsHandler; 33 | Strict Private 34 | FDWCSOptionsFrame : TframeDWCSOptions; 35 | FDWCSPluginOptions : IDWCSPluginOptions; 36 | Strict Protected 37 | Procedure DialogClosed(Accepted: Boolean); 38 | Procedure FrameCreated(AFrame: TCustomFrame); 39 | Function GetArea: String; 40 | Function GetCaption: String; 41 | Function GetFrameClass: TCustomFrameClass; 42 | Function GetHelpContext: Integer; 43 | Function IncludeInIDEInsight: Boolean; 44 | Function ValidateContents: Boolean; 45 | Public 46 | Constructor Create(Const PluginOptions : IDWCSPluginOptions); 47 | Class Procedure AddOptionsFrameHandler(Const PluginOptions : IDWCSPluginOptions); 48 | Class Procedure RemoveOptionsFrameHandler; 49 | End; 50 | {$ENDIF} 51 | 52 | Implementation 53 | 54 | {$IFDEF DXE00} 55 | 56 | Uses 57 | {$IFDEF DEBUG} 58 | CodeSiteLogging, 59 | {$ENDIF} 60 | {$IFDEF DXE20}System.SysUtils{$ELSE}SysUtils{$ENDIF}, 61 | DebugWithCodeSite.Types; 62 | 63 | (** 64 | 65 | This is a class method to add the options frame handler to the IDEs options dialogue. 66 | 67 | @precon None. 68 | @postcon The IDE options handler is installed into the IDE. 69 | 70 | @param PluginOptions as an IDWCSPluginOptions as a constant 71 | 72 | **) 73 | Class Procedure TDWCSIDEOptionsHandler.AddOptionsFrameHandler(Const PluginOptions : IDWCSPluginOptions); 74 | 75 | Var 76 | EnvironmentOptionsServices : INTAEnvironmentOptionsServices; 77 | 78 | Begin 79 | FDWCSIDEOptions := TDWCSIDEOptionsHandler.Create(PluginOptions); 80 | If Supports(BorlandIDEServices, INTAEnvironmentOptionsServices, EnvironmentOptionsServices) Then 81 | EnvironmentOptionsServices.RegisterAddInOptions(FDWCSIDEOptions); 82 | End; 83 | 84 | (** 85 | 86 | A constructor for the TDWVSIDEOptionsHandler class. 87 | 88 | @precon None. 89 | @postcon Stores the Options Read Wrtier interface reference. 90 | 91 | @param PluginOptions as an IDWCSPluginOptions as a constant 92 | 93 | **) 94 | Constructor TDWCSIDEOptionsHandler.Create(Const PluginOptions : IDWCSPluginOptions); 95 | 96 | Begin 97 | Inherited Create; 98 | FDWCSPluginOptions := PluginOptions; 99 | End; 100 | 101 | (** 102 | 103 | This method is called by the IDE when the IDEs options dialogue is closed. 104 | 105 | @precon None. 106 | @postcon If the dialogue was accepted and the frame supports the interface then it saves 107 | the frame settings. 108 | 109 | @param Accepted as a Boolean 110 | 111 | **) 112 | Procedure TDWCSIDEOptionsHandler.DialogClosed(Accepted: Boolean); 113 | 114 | Var 115 | I : IDWCSOptions; 116 | Ops : TDWCSChecks; 117 | strCodeSiteMsg: String; 118 | 119 | Begin 120 | If Accepted Then 121 | If Supports(FDWCSOptionsFrame, IDWCSOptions, I) Then 122 | Begin 123 | I.SaveOptions(Ops, strCodeSiteMsg); 124 | FDWCSPluginOptions.CodeSiteTemplate := strCodeSiteMsg; 125 | FDWCSPluginOptions.CheckOptions := Ops; 126 | FDWCSPluginOptions.SaveSettings; 127 | End; 128 | End; 129 | 130 | (** 131 | 132 | This method is called by the IDe when the frame is created. 133 | 134 | @precon None. 135 | @postcon If the frame supports the interface its settings are loaded. 136 | 137 | @param AFrame as a TCustomFrame 138 | 139 | **) 140 | Procedure TDWCSIDEOptionsHandler.FrameCreated(AFrame: TCustomFrame); 141 | 142 | Var 143 | I : IDWCSOptions; 144 | Options : TDWCSChecks; 145 | strCodeSiteMsg : String; 146 | 147 | Begin 148 | FDWCSOptionsFrame := AFrame As TframeDWCSOptions; 149 | If Supports(FDWCSOptionsFrame, IDWCSOptions, I) Then 150 | Begin 151 | Options := FDWCSPluginOptions.CheckOptions; 152 | strCodeSiteMsg := FDWCSPluginOptions.CodeSiteTemplate; 153 | I.LoadOptions(Options, strCodeSiteMsg); 154 | End; 155 | End; 156 | 157 | (** 158 | 159 | This is a getter method for the Area property. 160 | 161 | @precon None. 162 | @postcon Called by the IDE. NULL string is returned to place the options frame under the 163 | third party node. 164 | 165 | @return a String 166 | 167 | **) 168 | Function TDWCSIDEOptionsHandler.GetArea: String; 169 | 170 | Begin 171 | Result := ''; 172 | End; 173 | 174 | (** 175 | 176 | This is a getter method for the Caption property. 177 | 178 | @precon None. 179 | @postcon This is called by the IDe to get the caption of the options frame in the IDEs 180 | options dialogue in the left treeview. 181 | 182 | @return a String 183 | 184 | **) 185 | Function TDWCSIDEOptionsHandler.GetCaption: String; 186 | 187 | Begin 188 | Result := 'Debug With CodeSite'; 189 | End; 190 | 191 | (** 192 | 193 | This is a getter method for the FrameClass property. 194 | 195 | @precon None. 196 | @postcon This is called by the IDE to get the frame class to create when displaying the 197 | options dialogue. 198 | 199 | @return a TCustomFrameClass 200 | 201 | **) 202 | Function TDWCSIDEOptionsHandler.GetFrameClass: TCustomFrameClass; 203 | 204 | Begin 205 | Result := TframeDWCSOptions; 206 | End; 207 | 208 | (** 209 | 210 | This is a getter method for the HelpContext property. 211 | 212 | @precon None. 213 | @postcon This is called by the IDe and returns 0 to signify no help. 214 | 215 | @return an Integer 216 | 217 | **) 218 | Function TDWCSIDEOptionsHandler.GetHelpContext: Integer; 219 | 220 | Begin 221 | Result := 0; 222 | End; 223 | 224 | (** 225 | 226 | This is called by the IDE to determine whether the controls on the options frame are 227 | displayed in the IDE Insight search. 228 | 229 | @precon None. 230 | @postcon Returns true to be include in IDE Insight. 231 | 232 | @return a Boolean 233 | 234 | **) 235 | Function TDWCSIDEOptionsHandler.IncludeInIDEInsight: Boolean; 236 | 237 | Begin 238 | Result := True; 239 | End; 240 | 241 | (** 242 | 243 | This is a class method to remove the options frame handler from the IDEs options dialogue. 244 | 245 | @precon None. 246 | @postcon The IDE options handler is removed from the IDE. 247 | 248 | **) 249 | Class Procedure TDWCSIDEOptionsHandler.RemoveOptionsFrameHandler; 250 | 251 | Var 252 | EnvironmentOptionsServices : INTAEnvironmentOptionsServices; 253 | 254 | Begin 255 | If Supports(BorlandIDEServices, INTAEnvironmentOptionsServices, EnvironmentOptionsServices) Then 256 | EnvironmentOptionsServices.UnregisterAddInOptions(FDWCSIDEOptions); 257 | End; 258 | 259 | (** 260 | 261 | This method is called by the IDE to validate the frame. 262 | 263 | @precon None. 264 | @postcon Not used so returns true. 265 | 266 | @return a Boolean 267 | 268 | **) 269 | Function TDWCSIDEOptionsHandler.ValidateContents: Boolean; 270 | 271 | Begin 272 | Result := True; 273 | End; 274 | 275 | {$ENDIF} 276 | 277 | End. 278 | 279 | 280 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.PluginOptions.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains a class to handle the plug-ins settings. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 17 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.PluginOptions; 11 | 12 | Interface 13 | 14 | Uses 15 | DebugWithCodeSite.Types, 16 | DebugWithCodeSite.Interfaces; 17 | 18 | Type 19 | (** A class to handle the plug-ins settings. **) 20 | TDWCSPluginOptions = Class(TInterfacedObject, IDWCSPluginOptions) 21 | Strict Private 22 | FChecksOptions: TDWCSChecks; 23 | FCodeSiteTemplate: String; 24 | Strict Protected 25 | Function GetCheckOptions: TDWCSChecks; 26 | Function GetCodeSiteTemplate: String; 27 | Procedure SetCheckOptions(Const setCheckOptions: TDWCSChecks); 28 | Procedure SetCodeSiteTemplate(Const strCodeSiteTemplate: String); 29 | Procedure LoadSettings; 30 | Procedure SaveSettings; 31 | Public 32 | Constructor Create; 33 | End; 34 | 35 | Implementation 36 | 37 | Uses 38 | {$IFDEF DEBUG} 39 | CodeSiteLogging, 40 | {$ENDIF} 41 | Registry; 42 | 43 | Const 44 | (** The registry key under which the settings are stored. **) 45 | strRegKey = 'Software\Season''s Fall\Debug with CodeSite\'; 46 | 47 | { TDWCSPluginOptions } 48 | 49 | (** 50 | 51 | A constructor for the TDWCSPluginOptions class. 52 | 53 | @precon None. 54 | @postcon Initialises the settings; 55 | 56 | **) 57 | Constructor TDWCSPluginOptions.Create; 58 | 59 | Begin 60 | FChecksOptions := [dwcscCodeSiteLogging .. dwcscBreak]; 61 | FCodeSiteTemplate := 'CodeSite.Send(''%s'', %s)'; 62 | LoadSettings; 63 | End; 64 | 65 | (** 66 | 67 | This is a getter method for the CheckOptions property. 68 | 69 | @precon None. 70 | @postcon Returns the check options. 71 | 72 | @return a TDWCSChecks 73 | 74 | **) 75 | Function TDWCSPluginOptions.GetCheckOptions: TDWCSChecks; 76 | 77 | Begin 78 | Result := FChecksOptions; 79 | End; 80 | 81 | (** 82 | 83 | This is a getter method for the CoedSiteTemplate property. 84 | 85 | @precon None. 86 | @postcon Returns the CodeSite template. 87 | 88 | @return a String 89 | 90 | **) 91 | Function TDWCSPluginOptions.GetCodeSiteTemplate: String; 92 | 93 | Begin 94 | Result := FCodeSiteTemplate; 95 | End; 96 | 97 | (** 98 | 99 | This method loads the plug-ins settings from the regsitry. 100 | 101 | @precon None. 102 | @postcon The plug-ins settings are loaded. 103 | 104 | **) 105 | Procedure TDWCSPluginOptions.LoadSettings; 106 | 107 | Var 108 | R : TRegIniFile; 109 | 110 | Begin 111 | R := TRegIniFile.Create(strRegKey); 112 | Try 113 | FCodeSiteTemplate := R.ReadString('Setup', 'CodeSiteMsg', FCodeSiteTemplate); 114 | FChecksOptions := TDWCSChecks(Byte(R.ReadInteger('Setup', 'Options', Byte(FChecksOptions)))); 115 | Finally 116 | R.Free; 117 | End; 118 | End; 119 | 120 | (** 121 | 122 | This method saves the settings to the registry. 123 | 124 | @precon None. 125 | @postcon The settings are saved. 126 | 127 | **) 128 | Procedure TDWCSPluginOptions.SaveSettings; 129 | 130 | Var 131 | R: TRegIniFile; 132 | 133 | Begin 134 | R := TRegIniFile.Create(strRegKey); 135 | Try 136 | R.WriteString('Setup', 'CodeSiteMsg', FCodeSiteTemplate); 137 | R.WriteInteger('Setup', 'Options', Byte(FChecksOptions)); 138 | Finally 139 | R.Free; 140 | End; 141 | End; 142 | 143 | (** 144 | 145 | This is a setter method for the CheckOptions property. 146 | 147 | @precon None. 148 | @postcon Updates the check options. 149 | 150 | @param setCheckOptions as a TDWCSChecks as a constant 151 | 152 | **) 153 | Procedure TDWCSPluginOptions.SetCheckOptions(Const setCheckOptions: TDWCSChecks); 154 | 155 | Begin 156 | FChecksOptions := setCheckOptions; 157 | End; 158 | 159 | (** 160 | 161 | This is a setter method for the CodeSiteTemplate property. 162 | 163 | @precon None. 164 | @postcon Updates the CodeSite template. 165 | 166 | @param strCodeSiteTemplate as a String as a constant 167 | 168 | **) 169 | Procedure TDWCSPluginOptions.SetCodeSiteTemplate(Const strCodeSiteTemplate: String); 170 | 171 | Begin 172 | FCodeSiteTemplate := strCodeSiteTemplate; 173 | End; 174 | 175 | End. 176 | 177 | 178 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.SplashScreen.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains a procedure to add a splash screen entry to the RAD Studio splash screen on 4 | startup. 5 | 6 | @Author David Hoyle 7 | @Version 1.0 8 | @Date 16 Sep 2017 9 | 10 | **) 11 | Unit DebugWithCodeSite.SplashScreen; 12 | 13 | Interface 14 | 15 | {$INCLUDE CompilerDefinitions.inc} 16 | 17 | Procedure AddSplashScreen; 18 | 19 | Implementation 20 | 21 | Uses 22 | ToolsAPI, 23 | SysUtils, 24 | Windows, 25 | Forms, 26 | DebugWithCodeSite.Common; 27 | 28 | (** 29 | 30 | This method installs an entry in the RAD Studio IDE splash screen. 31 | 32 | @precon None. 33 | @postcon An entry is added to the splash screen for this plugin. 34 | 35 | **) 36 | Procedure AddSplashScreen; 37 | 38 | Var 39 | iMajor : Integer; 40 | iMinor : Integer; 41 | iBugFix : Integer; 42 | iBuild : Integer; 43 | bmSplashScreen : HBITMAP; 44 | 45 | Begin //FI:W519 46 | {$IFDEF D2005} 47 | BuildNumber(iMajor, iMinor, iBugFix, iBuild); 48 | {$IFDEF D2007} 49 | bmSplashScreen := LoadBitmap(hInstance, 'DWCSSplashScreenBitMap24x24'); 50 | {$ELSE} 51 | bmSplashScreen := LoadBitmap(hInstance, 'DWCSSplashScreenBitMap48x48'); 52 | {$ENDIF} 53 | (SplashScreenServices As IOTASplashScreenServices).AddPluginBitmap( 54 | Format(strSplashScreenName, [iMajor, iMinor, Copy(strRevision, iBugFix + 1, 1), 55 | Application.Title]), 56 | bmSplashScreen, 57 | False, 58 | Format(strSplashScreenBuild, [iMajor, iMinor, iBugfix, iBuild]), '' 59 | ); 60 | {$ENDIF} 61 | End; 62 | 63 | End. 64 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.Types.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This method contains simple types to be used throughout the application. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 16 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.Types; 11 | 12 | Interface 13 | 14 | Type 15 | (** An enumerate to describe the boolean options for the plug-in. **) 16 | TDWCSCheck = ( 17 | dwcscCodeSiteLogging, // Check that CodeSiteLogging is in the DPR/DPK unit list. 18 | dwcscDebuggingDCUs, // Check that the project has Debugging DCUs checked 19 | dwcscLibraryPath, // Check that CodeSite path is in the library 20 | dwcscLogResult, // Log the Result of the CodeSite breakpoint to the event log 21 | dwcscBreak, // Break at the CodeSite breakpoint 22 | dwcscEditBreakpoint // Edit the breakpoint after its added 23 | ); 24 | (** A set of the above enumerates to describe the options for the plug-in. **) 25 | TDWCSChecks = Set Of TDWCSCheck; 26 | 27 | Implementation 28 | 29 | End. 30 | -------------------------------------------------------------------------------- /Source/DebugWithCodeSite.Wizard.pas: -------------------------------------------------------------------------------- 1 | (** 2 | 3 | This module contains the main IDE wizard which manages the life time of all objects. 4 | 5 | @Author David Hoyle 6 | @Version 1.0 7 | @Date 17 Sep 2017 8 | 9 | **) 10 | Unit DebugWithCodeSite.Wizard; 11 | 12 | Interface 13 | 14 | {$INCLUDE CompilerDefinitions.Inc} 15 | 16 | Uses 17 | Classes, 18 | ToolsAPI, 19 | Menus, 20 | ActnList, 21 | ExtCtrls, 22 | ImgList, 23 | DebugWithCodeSite.Types, 24 | DebugWithCodeSite.Interfaces; 25 | 26 | Type 27 | (** A class which implements the OIOTAWizard interface to provide the plug-ins main IDE wizard. **) 28 | TDWCSWizard = Class(TInterfacedObject, IOTANotifier, IOTAWizard) 29 | Strict Private 30 | FMenuTimer : TTimer; 31 | FMenuInstalled : Boolean; 32 | FPluginOptions : IDWCSPluginOptions; 33 | Strict Protected 34 | // IOTAWizard 35 | Procedure Execute; 36 | Function GetIDString: String; 37 | Function GetName: String; 38 | Function GetState: TWizardState; 39 | // IOTANotifier 40 | Procedure AfterSave; 41 | Procedure BeforeSave; 42 | Procedure Destroyed; 43 | Procedure Modified; 44 | // General Methods 45 | Function AddImageToList(Const ImageList : TCustomImageList) : Integer; 46 | Procedure AddMenuToEditorContextMenu; 47 | Procedure MenuInstallerTimer(Sender : TObject); 48 | Procedure DebugWithCodeSiteClick(Sender : TObject); 49 | Public 50 | Constructor Create; 51 | Destructor Destroy; Override; 52 | End; 53 | 54 | Implementation 55 | 56 | Uses 57 | {$IFDEF DEBUG} 58 | CodeSiteLogging, 59 | {$ENDIF} 60 | SysUtils, 61 | Windows, 62 | Controls, 63 | Graphics, 64 | Forms, 65 | ActnPopup, 66 | DebugWithCodeSite.Functions, 67 | Dialogs, 68 | Registry, 69 | DebugWithCodeSite.AboutBox, 70 | DebugWithCodeSite.SplashScreen, 71 | DebugWithCodeSite.OptionsIDEInterface, 72 | DebugWithCodeSite.PluginOptions; 73 | 74 | { TDWCSWizard } 75 | 76 | (** 77 | 78 | This method adds an image to the given image list so that there is an image for the context menu in the 79 | IDEs editor. 80 | 81 | @precon ImageList must be a valid instance. 82 | @postcon The image is loaded from the resource and added to the given image list. 83 | 84 | @param ImageList as a TCustomImageList as a constant 85 | @return an Integer 86 | 87 | **) 88 | Function TDWCSWizard.AddImageToList(Const ImageList : TCustomImageList): Integer; 89 | 90 | Const 91 | strImageName = 'DWCSMenuBitMap16x16'; 92 | 93 | Var 94 | BM : TBitMap; 95 | 96 | Begin 97 | Result := -1; 98 | If FindResource(hInstance, strImageName, RT_BITMAP) > 0 Then 99 | Begin 100 | BM := TBitMap.Create; 101 | Try 102 | BM.LoadFromResourceName(hInstance, strImageName); 103 | Result := ImageList.AddMasked(BM, clLime); 104 | Finally 105 | BM.Free; 106 | End; 107 | End; 108 | End; 109 | 110 | (** 111 | 112 | This method adds the Debug with CodeSite context menu to the editors menu. 113 | 114 | @precon None. 115 | @postcon The contect menu is added and disables the timer if the editor context menu it found. 116 | 117 | **) 118 | Procedure TDWCSWizard.AddMenuToEditorContextMenu; 119 | 120 | (** 121 | 122 | This method searches the screens objects forms for the form with the given class name. 123 | 124 | @precon None. 125 | @postcon The form reference is returned IF found else nil. 126 | 127 | @return a TForm 128 | 129 | **) 130 | Function FindEditWindow : TForm; 131 | 132 | Var 133 | iForm: Integer; 134 | 135 | Begin 136 | Result := Nil; 137 | For iForm := 0 To Screen.FormCount - 1 Do 138 | If CompareText(Screen.Forms[iForm].ClassName, 'TEditWindow') = 0 Then 139 | Begin 140 | Result := Screen.Forms[iForm]; 141 | Break; 142 | End; 143 | End; 144 | 145 | (** 146 | 147 | This method returns the component of the given component with the given name and class type. 148 | 149 | @precon OwnerConponent must be a valid instance. 150 | @postcon Returns the component of the owner with the name and class type provided if found else 151 | returns nil. 152 | 153 | @param OwnerComponent as a TComponent as a constant 154 | @param strName as a String as a constant 155 | @param ClsType as a TClass as a constant 156 | @return a TComponent 157 | 158 | **) 159 | Function FindComponent(Const OwnerComponent : TComponent; Const strName : String; 160 | Const ClsType : TClass) : TComponent; 161 | 162 | Var 163 | iComponent: Integer; 164 | 165 | Begin 166 | Result := Nil; 167 | For iComponent := 0 To OwnerComponent.ComponentCount - 1 Do 168 | If CompareText(OwnerComponent.Components[iComponent].Name, strName) = 0 Then 169 | If OwnerComponent.Components[iComponent] Is ClsType Then 170 | Begin 171 | Result := OwnerComponent.Components[iComponent]; 172 | Break; 173 | End; 174 | End; 175 | 176 | Var 177 | F: TForm; 178 | CM: TPopupActionBar; 179 | iImageIndex: Integer; 180 | MenuItem: TMenuItem; 181 | 182 | Begin 183 | F := FindEditWindow; 184 | If Assigned(F) Then 185 | Begin 186 | CM := FindComponent(F, 'EditorLocalMenu', TPopupActionBar) As TPopupActionBar; 187 | If Assigned(CM) Then 188 | Begin 189 | iImageIndex := AddImageToList(CM.Images); 190 | MenuItem := TMenuItem.Create(CM); 191 | MenuItem.Name := 'miDWCSDebugWithCodeSite'; 192 | MenuItem.Caption := 'Debug &with CodeSite'; 193 | MenuItem.OnClick := DebugWithCodeSiteClick; 194 | MenuItem.ImageIndex := iImageIndex; 195 | CM.Items.Add(MenuItem); 196 | End; 197 | FMenuTimer.Enabled := False; 198 | End; 199 | End; 200 | 201 | (** 202 | 203 | This method does nothing in the context of an IOTAWizard. 204 | 205 | @precon None. 206 | @postcon None. 207 | 208 | **) 209 | Procedure TDWCSWizard.AfterSave; 210 | 211 | Begin 212 | // Do nothing in the context of an IOTAWizard 213 | End; 214 | 215 | (** 216 | 217 | This method does nothing in the context of an IOTAWizard. 218 | 219 | @precon None. 220 | @postcon None. 221 | 222 | **) 223 | Procedure TDWCSWizard.BeforeSave; 224 | 225 | Begin 226 | // Do nothing 227 | End; 228 | 229 | (** 230 | 231 | A constructor for the TDWVSWizard class. 232 | 233 | @precon None. 234 | @postcon Adds a splash screena dn about box and start the timer for installing the context menu. 235 | 236 | **) 237 | Constructor TDWCSWizard.Create; 238 | 239 | Begin 240 | Inherited Create; 241 | AddSplashScreen; 242 | AddAboutBoxEntry; 243 | FPluginOptions := TDWCSPluginOptions.Create; 244 | TDWCSIDEOptionsHandler.AddOptionsFrameHandler(FPluginOptions); 245 | FMenuInstalled := False; 246 | FMenuTimer := TTimer.Create(Nil); 247 | FMenuTimer.Interval := 1000; 248 | FMenuTimer.OnTimer := MenuInstallerTimer; 249 | FMenuTimer.Enabled := True; 250 | End; 251 | 252 | (** 253 | 254 | This is the on click event handler for the editor Debug With CodeSite contetx menu. 255 | 256 | @precon None. 257 | @postcon Adds a breakpoint on the line of the cursor with CodeSite information in the EvalExpression 258 | property for the identifier at the cursor. 259 | 260 | @param Sender as a TObject 261 | 262 | **) 263 | Procedure TDWCSWizard.DebugWithCodeSiteClick(Sender: TObject); 264 | 265 | Var 266 | ES : IOTAEditorServices; 267 | DS : IOTADebuggerServices; 268 | CP: TOTAEditPos; 269 | BP: IOTABreakpoint; 270 | strIdentifierAtCursor: String; 271 | strMsg : String; 272 | iPos: Integer; 273 | 274 | Begin 275 | If Supports(BorlandIDEServices, IOTAEditorServices, ES) Then 276 | If Supports(BorlandIDEServices, IOTADebuggerServices, DS) Then 277 | Begin 278 | CP := ES.TopView.CursorPos; 279 | strIdentifierAtCursor := GetIdentifierAtCursor; 280 | If strIdentifierAtCursor <> '' Then 281 | Begin 282 | BP := DS.NewSourceBreakpoint(ES.TopBuffer.FileName, CP.Line, Nil); 283 | strMsg := FPluginOptions.CodeSiteTemplate; 284 | iPos := Pos('%s', strMsg); 285 | While iPos > 0 Do 286 | Begin 287 | strMsg := Copy(strMsg, 1, Pred(iPos)) + strIdentifierAtCursor + 288 | Copy(strMsg, iPos + 2, Length(strMsg) - iPos - 1); 289 | iPos := Pos('%s', strMsg); 290 | End; 291 | BP.EvalExpression := strMsg; 292 | BP.LogResult := dwcscLogResult In FPluginOptions.CheckOptions; 293 | BP.DoBreak := dwcscBreak In FPluginOptions.CheckOptions; 294 | If dwcscCodeSiteLogging In FPluginOptions.CheckOptions Then 295 | CheckCodeSiteLogging; 296 | If dwcscDebuggingDCUs In FPluginOptions.CheckOptions Then 297 | CheckDebuggingDCUs; 298 | If dwcscLibraryPath In FPluginOptions.CheckOptions Then 299 | CheckLibraryPath; 300 | If dwcscEditBreakpoint In FPluginOptions.CheckOptions Then 301 | BP.Edit(True); 302 | End Else 303 | MessageDlg('There is no identifier at the cursor position!', mtWarning, [mbOK], 0); 304 | End; 305 | End; 306 | 307 | (** 308 | 309 | A destructor for the TDWCSWizard class. 310 | 311 | @precon None. 312 | @postcon Removes the about box and frees the contet menu timer. 313 | 314 | **) 315 | Destructor TDWCSWizard.Destroy; 316 | 317 | Begin 318 | FPluginOptions.SaveSettings; 319 | TDWCSIDEOptionsHandler.RemoveOptionsFrameHandler; 320 | RemoveAboutBoxEntry; 321 | FMenuTimer.Free; 322 | Inherited Destroy; 323 | End; 324 | 325 | (** 326 | 327 | This method does nothing in the context of an IOTAWizard. 328 | 329 | @precon None. 330 | @postcon None. 331 | 332 | **) 333 | Procedure TDWCSWizard.Destroyed; 334 | 335 | Begin 336 | // Do nothing 337 | End; 338 | 339 | (** 340 | 341 | This method does nothing in the context of an IOTAWizard. 342 | 343 | @precon None. 344 | @postcon None. 345 | 346 | **) 347 | Procedure TDWCSWizard.Execute; 348 | 349 | Begin 350 | // Do nothing 351 | End; 352 | 353 | (** 354 | 355 | This is a getter method for the IDString property. 356 | 357 | @precon None. 358 | @postcon Returns the ID String for the wizard. 359 | 360 | @return a String 361 | 362 | **) 363 | Function TDWCSWizard.GetIDString: String; 364 | 365 | Begin 366 | Result := 'Season''s Fall Music.David Hoyle.Debug with CodeSite'; 367 | End; 368 | 369 | (** 370 | 371 | This is a getter method for the Name property. 372 | 373 | @precon None. 374 | @postcon Returns the name of the wizard. 375 | 376 | @return a String 377 | 378 | **) 379 | Function TDWCSWizard.GetName: String; 380 | 381 | Begin 382 | Result := 'Debug with CodeSite'; 383 | End; 384 | 385 | (** 386 | 387 | This is a getter method for the WizardState property. 388 | 389 | @precon None. 390 | @postcon Returns the state that the wizard is enabled. 391 | 392 | @return a TWizardState 393 | 394 | **) 395 | Function TDWCSWizard.GetState: TWizardState; 396 | 397 | Begin 398 | Result := [wsEnabled]; 399 | End; 400 | 401 | (** 402 | 403 | This is an on timer event handler. 404 | 405 | @precon None. 406 | @postcon Tries to install the editoer context menu. 407 | 408 | @param Sender as a TObject 409 | 410 | **) 411 | Procedure TDWCSWizard.MenuInstallerTimer(Sender: TObject); 412 | 413 | Begin 414 | AddMenuToEditorContextMenu; 415 | End; 416 | 417 | (** 418 | 419 | This method does nothing in the context of an IOTAWizard. 420 | 421 | @precon None. 422 | @postcon None. 423 | 424 | **) 425 | Procedure TDWCSWizard.Modified; 426 | 427 | Begin 428 | // Do nothing 429 | End; 430 | 431 | End. 432 | 433 | 434 | --------------------------------------------------------------------------------