├── .gitignore ├── CMDHighlighter ├── .gitignore ├── CMDHighlighter.dpk ├── CMDHighlighter.dproj ├── KeyWords.txt ├── Sample.cmd └── uH.pas ├── LICENSE ├── MsgHelperDemo ├── MsgHelperDemo.dpr ├── MsgHelperDemo.dproj ├── MsgHelperDemo.res ├── frMain.dfm └── frMain.pas ├── MsgHlpr.pas ├── ObjInspFntChngr ├── dnObjInspFntChngr.dpk ├── dnObjInspFntChngr.dproj ├── dnObjInspFntChngr.res └── uObjInspFntChngr.pas ├── RADAntiFlick ├── RADAntiFlick.dpk ├── RADAntiFlick.dproj ├── RADAntiFlick.res └── uA.pas ├── README.md └── VTVDisableAutoScroll ├── dnVTVDisableAutoScroll.dpk ├── dnVTVDisableAutoScroll.dproj ├── dnVTVDisableAutoScroll.res └── uVTVDisableAutoScroll.pas /.gitignore: -------------------------------------------------------------------------------- 1 | *.dcu 2 | *.~*~ 3 | *.local 4 | *.identcache 5 | __history 6 | *.drc 7 | *.map 8 | *.exe 9 | *.dll 10 | bin/* 11 | *.cbk 12 | *.dsk 13 | *.~dsk 14 | *.cfg 15 | *.dof 16 | *.bak 17 | -------------------------------------------------------------------------------- /CMDHighlighter/.gitignore: -------------------------------------------------------------------------------- 1 | /CMDHighlighter.dres 2 | /CMDHighlighter.res 3 | /CMDHighlighterResource.rc 4 | -------------------------------------------------------------------------------- /CMDHighlighter/CMDHighlighter.dpk: -------------------------------------------------------------------------------- 1 | package CMDHighlighter; 2 | 3 | {$R *.res} 4 | {$R *.dres} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'delphinotes.ru - CMD/BAT Highlighter'} 30 | {$LIBSUFFIX '210'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD ON} 33 | 34 | requires 35 | designide; 36 | 37 | contains 38 | uH in 'uH.pas'; 39 | 40 | end. 41 | -------------------------------------------------------------------------------- /CMDHighlighter/CMDHighlighter.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {203B61AD-C330-4DA3-A89C-AA4BE72320D5} 4 | CMDHighlighter.dpk 5 | 16.0 6 | None 7 | True 8 | Release 9 | Win32 10 | 1 11 | Package 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 | Cfg_1 29 | true 30 | true 31 | 32 | 33 | true 34 | Base 35 | true 36 | 37 | 38 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 39 | true 40 | delphinotes.ru - CMD/BAT Highlighter 41 | 210 42 | 1049 43 | CMDHighlighter 44 | All 45 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 46 | true 47 | true 48 | .\$(Platform)\$(Config) 49 | .\$(Platform)\$(Config) 50 | false 51 | false 52 | false 53 | false 54 | false 55 | 56 | 57 | rtl;vcl;$(DCC_UsePackage) 58 | 1033 59 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 60 | true 61 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 62 | 63 | 64 | DEBUG;$(DCC_Define) 65 | true 66 | false 67 | true 68 | true 69 | true 70 | 71 | 72 | 1033 73 | true 74 | false 75 | 76 | 77 | false 78 | RELEASE;$(DCC_Define) 79 | 0 80 | 0 81 | 82 | 83 | 84 | MainSource 85 | 86 | 87 | 88 | 89 | ResourceItem 90 | RCDATA 91 | SAMPLE_CMD 92 | 93 | 94 | ResourceItem 95 | RCDATA 96 | KEYWORDS_TXT 97 | 98 | 99 | Cfg_2 100 | Base 101 | 102 | 103 | Base 104 | 105 | 106 | Cfg_1 107 | Base 108 | 109 | 110 | 111 | Delphi.Personality.12 112 | Package 113 | 114 | 115 | 116 | CMDHighlighter.dpk 117 | 118 | 119 | Microsoft Office 2000 Sample Automation Server Wrapper Components 120 | Microsoft Office XP Sample Automation Server Wrapper Components 121 | 122 | 123 | 124 | 125 | 126 | CMDHighlighter.bpl 127 | true 128 | 129 | 130 | 131 | 132 | true 133 | 134 | 135 | true 136 | 137 | 138 | 139 | 140 | CMDHighlighter.bpl 141 | true 142 | 143 | 144 | 145 | 146 | 1 147 | .dylib 148 | 149 | 150 | 0 151 | .bpl 152 | 153 | 154 | 1 155 | .dylib 156 | 157 | 158 | 1 159 | .dylib 160 | 161 | 162 | 163 | 164 | 1 165 | .dylib 166 | 167 | 168 | 0 169 | .dll;.bpl 170 | 171 | 172 | 173 | 174 | 1 175 | 176 | 177 | 1 178 | 179 | 180 | 181 | 182 | 183 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 184 | 1 185 | 186 | 187 | 188 | 189 | res\drawable-normal 190 | 1 191 | 192 | 193 | 194 | 195 | library\lib\x86 196 | 1 197 | 198 | 199 | 200 | 201 | 1 202 | 203 | 204 | 1 205 | 206 | 207 | 208 | 209 | 210 | library\lib\armeabi-v7a 211 | 1 212 | 213 | 214 | 215 | 216 | 1 217 | 218 | 219 | 1 220 | 221 | 222 | 223 | 224 | res\drawable-xlarge 225 | 1 226 | 227 | 228 | 229 | 230 | res\drawable-xhdpi 231 | 1 232 | 233 | 234 | 235 | 236 | 1 237 | 238 | 239 | 1 240 | 241 | 242 | 243 | 244 | res\drawable-xxhdpi 245 | 1 246 | 247 | 248 | 249 | 250 | library\lib\mips 251 | 1 252 | 253 | 254 | 255 | 256 | res\drawable 257 | 1 258 | 259 | 260 | 261 | 262 | 1 263 | 264 | 265 | 1 266 | 267 | 268 | 0 269 | 270 | 271 | 272 | 273 | 1 274 | .framework 275 | 276 | 277 | 0 278 | 279 | 280 | 281 | 282 | res\drawable-small 283 | 1 284 | 285 | 286 | 287 | 288 | 289 | 1 290 | 291 | 292 | Contents\MacOS 293 | 0 294 | 295 | 296 | 297 | 298 | classes 299 | 1 300 | 301 | 302 | 303 | 304 | 305 | 1 306 | 307 | 308 | 1 309 | 310 | 311 | 312 | 313 | res\drawable 314 | 1 315 | 316 | 317 | 318 | 319 | Contents\Resources 320 | 1 321 | 322 | 323 | 324 | 325 | 326 | 1 327 | 328 | 329 | 1 330 | 331 | 332 | 333 | 334 | 1 335 | 336 | 337 | library\lib\armeabi-v7a 338 | 1 339 | 340 | 341 | 0 342 | 343 | 344 | 1 345 | 346 | 347 | 1 348 | 349 | 350 | 351 | 352 | library\lib\armeabi 353 | 1 354 | 355 | 356 | 357 | 358 | res\drawable-large 359 | 1 360 | 361 | 362 | 363 | 364 | 0 365 | 366 | 367 | 0 368 | 369 | 370 | 0 371 | 372 | 373 | 0 374 | 375 | 376 | 0 377 | 378 | 379 | 380 | 381 | 1 382 | 383 | 384 | 1 385 | 386 | 387 | 388 | 389 | res\drawable-ldpi 390 | 1 391 | 392 | 393 | 394 | 395 | res\values 396 | 1 397 | 398 | 399 | 400 | 401 | 1 402 | 403 | 404 | 1 405 | 406 | 407 | 408 | 409 | res\drawable-mdpi 410 | 1 411 | 412 | 413 | 414 | 415 | res\drawable-hdpi 416 | 1 417 | 418 | 419 | 420 | 421 | 1 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | True 433 | 434 | 435 | 12 436 | 437 | 438 | 439 | 440 | 441 | -------------------------------------------------------------------------------- /CMDHighlighter/KeyWords.txt: -------------------------------------------------------------------------------- 1 | break 2 | call 3 | cd 4 | chcp 5 | chdir 6 | choice 7 | cls 8 | cmdextversion 9 | com 10 | con 11 | copy 12 | country 13 | ctty 14 | date 15 | defined 16 | del 17 | dir 18 | do 19 | echo 20 | else 21 | endlocal 22 | eql 23 | erase 24 | errorlevel 25 | exist 26 | exit 27 | for 28 | geq 29 | goto 30 | gtr 31 | if 32 | in 33 | leq 34 | loadfix 35 | loadhigh 36 | lpt 37 | lss 38 | md 39 | mkdir 40 | move 41 | neq 42 | not 43 | nul 44 | path 45 | pause 46 | prompt 47 | rd 48 | rem 49 | ren 50 | rename 51 | rmdir 52 | set 53 | setlocal 54 | shift 55 | time 56 | type 57 | ver 58 | verify 59 | vol -------------------------------------------------------------------------------- /CMDHighlighter/Sample.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem Syntax Higlighting 3 | 4 | call :factorial %1 5 | echo %RESULT% 6 | exit /b 7 | 8 | rem Search Match, Text Block 9 | rem Function to calculate the factorial 10 | rem Input: 11 | rem %1 12 | rem Output: 13 | rem %RESULT% 14 | :factorial 15 | if %1 leq 1 ( 16 | set RESULT=1 17 | exit /b 18 | ) 19 | set /a PARAM=%1 - 1 20 | call :factorial %PARAM% 21 | set /a RESULT=%1 * %RESULT% 22 | exit /b -------------------------------------------------------------------------------- /CMDHighlighter/uH.pas: -------------------------------------------------------------------------------- 1 | unit uH; 2 | 3 | interface 4 | 5 | procedure Register; 6 | 7 | implementation 8 | 9 | uses 10 | Windows, SysUtils, Classes, ToolsAPI; 11 | 12 | type 13 | TCMDHighlighter = class(TNotifierObject, IOTAWizard, IOTAHighlighter, IOTAHighlighterPreview) 14 | const 15 | SIDString = 'DelphiNotes.Highlighter.CMD'; 16 | SName = 'CMD/BAT Highlighter'; 17 | SDisplayName = 'CMD/BAT'; 18 | atLabelDeclaration = ToolsApi.atPreproc; 19 | atA = ToolsApi.atPreproc; 20 | atLabel = ToolsApi.atIdentifier; 21 | atKeyWord = ToolsApi.atReservedWord; 22 | atRem = ToolsApi.atComment; 23 | atCommand = ToolsApi.atIdentifier; 24 | atVar = ToolsApi.atString; 25 | class var 26 | FKeyWords: TStringList; 27 | public 28 | class constructor Create; 29 | class destructor Destroy; 30 | constructor Create; 31 | 32 | // IOTAWizard 33 | function GetIDString: string; 34 | function GetName: string; 35 | function GetState: TWizardState; 36 | procedure Execute; 37 | 38 | // IOTAHighlighter 39 | procedure Tokenize(StartClass: TOTALineClass; LineBuf: POTAEdChar; LineBufLen: TOTALineSize; 40 | HighlightCodes: POTASyntaxCode); 41 | function TokenizeLineClass(StartClass: TOTALineClass; LineBuf: POTAEdChar; LineBufLen: TOTALineSize): TOTALineClass; 42 | 43 | // IOTAHighlighterPreview 44 | function GetDisplayName: string; 45 | function GetSampleText: string; 46 | function GetInvalidBreakpointLine: Integer; 47 | function GetCurrentInstructionLine: Integer; 48 | function GetValidBreakpointLine: Integer; 49 | function GetDisabledBreakpointLine: Integer; 50 | function GetErrorLine: Integer; 51 | function GetSampleSearchText: string; 52 | function GetBlockStartLine: Integer; 53 | function GetBlockStartCol: Integer; 54 | function GetBlockEndLine: Integer; 55 | function GetBlockEndCol: Integer; 56 | end; 57 | 58 | procedure Register; 59 | begin 60 | RegisterPackageWizard(TCMDHighlighter.Create); 61 | end; 62 | 63 | procedure LoadStringsFromResource(Strings: TStrings; const ResName: string); 64 | var 65 | Stream: TStream; 66 | begin 67 | Stream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); 68 | try 69 | Strings.LoadFromStream(Stream); 70 | finally 71 | Stream.Free; 72 | end; 73 | end; 74 | 75 | { TCMDHighlighter } 76 | 77 | class constructor TCMDHighlighter.Create; 78 | begin 79 | FKeyWords := TStringList.Create; 80 | FKeyWords.CaseSensitive := True; 81 | FKeyWords.Sorted := True; 82 | LoadStringsFromResource(FKeyWords, 'KEYWORDS_TXT'); 83 | end; 84 | 85 | class destructor TCMDHighlighter.Destroy; 86 | begin 87 | FreeAndNil(FKeyWords); 88 | end; 89 | 90 | constructor TCMDHighlighter.Create; 91 | begin 92 | inherited; 93 | (BorlandIDEServices as IOTAHighlightServices).AddHighlighter(Self); 94 | end; 95 | 96 | function TCMDHighlighter.GetIDString: string; 97 | begin 98 | Result := SIDString; 99 | end; 100 | 101 | function TCMDHighlighter.GetName: string; 102 | begin 103 | Result := SName; 104 | end; 105 | 106 | function TCMDHighlighter.GetState: TWizardState; 107 | begin 108 | Result := [wsEnabled]; 109 | end; 110 | 111 | procedure TCMDHighlighter.Execute; 112 | begin 113 | end; 114 | 115 | procedure TCMDHighlighter.Tokenize(StartClass: TOTALineClass; LineBuf: POTAEdChar; LineBufLen: TOTALineSize; 116 | HighlightCodes: POTASyntaxCode); 117 | var 118 | Codes: PByte; 119 | 120 | function Skip(Start: Integer; const CharSet: TSysCharSet): Integer; 121 | begin 122 | for Result := Start to Pred(LineBufLen) do 123 | if not CharInSet(LineBuf[Result], CharSet) then 124 | Exit; 125 | end; 126 | 127 | function ScanTo(Start, Stop: Integer; const CharSet: TSysCharSet): Integer; 128 | begin 129 | for Result := Start to Stop do 130 | if CharInSet(LineBuf[Result], CharSet) then 131 | Exit; 132 | if not CharInSet(#0, CharSet) then 133 | Result := -1; 134 | end; 135 | 136 | procedure SkipSpaces(var Start: Integer); 137 | begin 138 | Start := Skip(Start, [#32, #9]); 139 | end; 140 | 141 | procedure MarkTo(Start, Stop: Integer; Flag: Byte); 142 | var 143 | i: Integer; 144 | begin 145 | for i := Start to Stop do 146 | Codes[i] := Flag; 147 | end; 148 | 149 | procedure Mark(Start, Count: Integer; Flag: Byte); 150 | begin 151 | MarkTo(Start, Start + Count - 1, Flag); 152 | end; 153 | 154 | procedure ScanForVar(Idx, Len: Integer); 155 | var 156 | SavePos: Integer; 157 | IsExclamation: Boolean; 158 | IsPercent: Boolean; 159 | i: Integer; 160 | begin 161 | IsExclamation := False; 162 | IsPercent := False; 163 | 164 | for i := Idx to Idx + Len - 1 do 165 | case LineBuf[i] of 166 | '%': 167 | begin 168 | IsPercent := not IsPercent; 169 | if IsPercent then 170 | SavePos := i 171 | else 172 | MarkTo(SavePos, i, atVar); 173 | end; 174 | '!': 175 | begin 176 | IsExclamation := not IsExclamation; 177 | if IsExclamation then 178 | SavePos := i 179 | else 180 | MarkTo(SavePos, i, atVar); 181 | end; 182 | '0'.. '9', '*': 183 | if IsPercent and (i - SavePos = 1) then 184 | MarkTo(SavePos, i, atVar); 185 | end 186 | end; 187 | 188 | var 189 | Idx: Integer; 190 | l, k: Integer; 191 | Flag: Byte; 192 | LastIdx: Integer; 193 | LastWord: AnsiString; 194 | 195 | begin 196 | Codes := PByte(HighlightCodes); 197 | FillChar(HighlightCodes^, LineBufLen, SyntaxOff); 198 | 199 | LastIdx := Pred(LineBufLen); 200 | Idx := 0; 201 | SkipSpaces(Idx); 202 | if Idx >= LastIdx then 203 | Exit; 204 | if LineBuf[Idx] = ':' then 205 | begin 206 | // this is a label declaration, which occupies the entire row 207 | Mark(Idx, LineBufLen - Idx, atLabelDeclaration); 208 | Exit; 209 | end; 210 | 211 | while Idx < LineBufLen do 212 | begin 213 | SkipSpaces(Idx); 214 | if Idx >= LastIdx then 215 | Exit; 216 | 217 | k := ScanTo(Idx, LastIdx, [#0, #9, #32, '=', '|', '&']); 218 | if k <= 0 then 219 | k := idx; 220 | l := k - Idx; 221 | if l > 0 then 222 | begin 223 | SetString(LastWord, PAnsiChar(Integer(LineBuf) + Idx), l); 224 | 225 | if LastWord[1] = '@' then 226 | begin 227 | Mark(Idx, 1, atA); 228 | Inc(Idx); 229 | Dec(l); 230 | Delete(LastWord, 1, 1); 231 | end; 232 | end; 233 | 234 | if l > 0 then 235 | begin 236 | LastWord := LowerCase(LastWord); 237 | if LastWord = 'rem' then 238 | begin 239 | // start comment from here to the end of line 240 | Mark(Idx, LineBufLen - Idx, atRem); 241 | Exit; 242 | end; 243 | 244 | Flag := SyntaxOff; 245 | if LastWord[1] = ':' then 246 | Flag := atLabel else 247 | if FKeyWords.IndexOf(LastWord) >= 0 then 248 | Flag := atKeyWord; 249 | Mark(Idx, l, Flag); 250 | 251 | ScanForVar(Idx, l); 252 | end; 253 | 254 | Idx := k + 1; 255 | end; 256 | end; 257 | 258 | function TCMDHighlighter.TokenizeLineClass(StartClass: TOTALineClass; LineBuf: POTAEdChar; 259 | LineBufLen: TOTALineSize): TOTALineClass; 260 | begin 261 | Result := 0; 262 | end; 263 | 264 | function TCMDHighlighter.GetDisplayName: string; 265 | begin 266 | Result := SDisplayName; 267 | end; 268 | 269 | function TCMDHighlighter.GetSampleText: string; 270 | var 271 | Strings: TStrings; 272 | begin 273 | Strings := TStringList.Create; 274 | try 275 | LoadStringsFromResource(Strings, 'SAMPLE_CMD'); 276 | Result := Strings.Text; 277 | finally 278 | Strings.Free; 279 | end; 280 | end; 281 | 282 | function TCMDHighlighter.GetInvalidBreakpointLine: Integer; 283 | begin 284 | Result := -1; 285 | end; 286 | 287 | function TCMDHighlighter.GetCurrentInstructionLine: Integer; 288 | begin 289 | Result := -1; 290 | end; 291 | 292 | function TCMDHighlighter.GetValidBreakpointLine: Integer; 293 | begin 294 | Result := -1; 295 | end; 296 | 297 | function TCMDHighlighter.GetDisabledBreakpointLine: Integer; 298 | begin 299 | Result := -1; 300 | end; 301 | 302 | function TCMDHighlighter.GetErrorLine: Integer; 303 | begin 304 | Result := -1; 305 | end; 306 | 307 | function TCMDHighlighter.GetSampleSearchText: string; 308 | begin 309 | Result := 'Match'; 310 | end; 311 | 312 | function TCMDHighlighter.GetBlockStartLine: Integer; 313 | begin 314 | Result := 8; 315 | end; 316 | 317 | function TCMDHighlighter.GetBlockStartCol: Integer; 318 | begin 319 | Result := 24; 320 | end; 321 | 322 | function TCMDHighlighter.GetBlockEndLine: Integer; 323 | begin 324 | Result := 8; 325 | end; 326 | 327 | function TCMDHighlighter.GetBlockEndCol: Integer; 328 | begin 329 | Result := 29; 330 | end; 331 | 332 | end. 333 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Zverev Nikolay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MsgHelperDemo/MsgHelperDemo.dpr: -------------------------------------------------------------------------------- 1 | program MsgHelperDemo; 2 | 3 | uses 4 | Forms, 5 | frMain in 'frMain.pas' {frmMain}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.MainFormOnTaskbar := True; 12 | Application.CreateForm(TfrmMain, frmMain); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /MsgHelperDemo/MsgHelperDemo.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {0DD00C27-C424-4870-99F7-F39B4177F957} 4 | MsgHelperDemo.dpr 5 | Debug 6 | DCC32 7 | 12.0 8 | 9 | 10 | true 11 | 12 | 13 | true 14 | Base 15 | true 16 | 17 | 18 | true 19 | Base 20 | true 21 | 22 | 23 | WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias) 24 | .\bin 25 | .\bin 26 | bin\MsgHelperDemo.exe 27 | 00400000 28 | x86 29 | 30 | 31 | RELEASE;$(DCC_Define) 32 | 0 33 | false 34 | false 35 | 36 | 37 | DEBUG;$(DCC_Define) 38 | 39 | 40 | 41 | MainSource 42 | 43 | 44 |
frmMain
45 |
46 | 47 | Base 48 | 49 | 50 | Cfg_1 51 | Base 52 | 53 | 54 | Cfg_2 55 | Base 56 | 57 |
58 | 59 | 60 | Delphi.Personality.12 61 | VCLApplication 62 | 63 | 64 | 65 | MsgHelperDemo.dpr 66 | 67 | 68 | False 69 | True 70 | False 71 | 72 | 73 | False 74 | False 75 | 1 76 | 0 77 | 0 78 | 0 79 | False 80 | False 81 | False 82 | False 83 | False 84 | 1049 85 | 1251 86 | 87 | 88 | 89 | 90 | 1.0.0.0 91 | 92 | 93 | 94 | 95 | 96 | 1.0.0.0 97 | 98 | 99 | 100 | 101 | 12 102 | 103 |
104 | -------------------------------------------------------------------------------- /MsgHelperDemo/MsgHelperDemo.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/delphinotes/Useful/91a02737be632c6770b20b36eac693f2b035e59c/MsgHelperDemo/MsgHelperDemo.res -------------------------------------------------------------------------------- /MsgHelperDemo/frMain.dfm: -------------------------------------------------------------------------------- 1 | object frmMain: TfrmMain 2 | Left = 0 3 | Top = 0 4 | Caption = 'Main Form' 5 | ClientHeight = 301 6 | ClientWidth = 562 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnCreate = FormCreate 15 | OnDestroy = FormDestroy 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object Memo1: TMemo 19 | Left = 0 20 | Top = 49 21 | Width = 562 22 | Height = 252 23 | Align = alClient 24 | ScrollBars = ssBoth 25 | TabOrder = 0 26 | end 27 | object Panel1: TPanel 28 | Left = 0 29 | Top = 0 30 | Width = 562 31 | Height = 49 32 | Align = alTop 33 | BevelOuter = bvNone 34 | TabOrder = 1 35 | object chkPause: TCheckBox 36 | Left = 8 37 | Top = 5 38 | Width = 97 39 | Height = 17 40 | Caption = '&Pause' 41 | TabOrder = 0 42 | end 43 | object chkApplicationOnMessage: TCheckBox 44 | Left = 99 45 | Top = 5 46 | Width = 166 47 | Height = 17 48 | Caption = '&A: ApplicationOnMessage' 49 | Checked = True 50 | State = cbChecked 51 | TabOrder = 2 52 | end 53 | object chkMainFormHook: TCheckBox 54 | Left = 99 55 | Top = 28 56 | Width = 134 57 | Height = 17 58 | Caption = '&H: MainFormHook' 59 | Checked = True 60 | State = cbChecked 61 | TabOrder = 3 62 | end 63 | object btnClear: TButton 64 | Left = 8 65 | Top = 22 66 | Width = 75 67 | Height = 23 68 | Caption = '&Clear' 69 | TabOrder = 1 70 | OnClick = btnClearClick 71 | end 72 | object LabeledEdit1: TLabeledEdit 73 | Left = 276 74 | Top = 23 75 | Width = 121 76 | Height = 21 77 | EditLabel.Width = 46 78 | EditLabel.Height = 13 79 | EditLabel.Caption = 'Test edit:' 80 | TabOrder = 4 81 | end 82 | end 83 | object ApplicationEvents1: TApplicationEvents 84 | OnMessage = ApplicationEvents1Message 85 | Left = 48 86 | Top = 176 87 | end 88 | end 89 | -------------------------------------------------------------------------------- /MsgHelperDemo/frMain.pas: -------------------------------------------------------------------------------- 1 | unit frMain; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, 7 | Controls, Forms, Dialogs, AppEvnts, StdCtrls, ExtCtrls; 8 | 9 | type 10 | TfrmMain = class(TForm) 11 | ApplicationEvents1: TApplicationEvents; 12 | Memo1: TMemo; 13 | Panel1: TPanel; 14 | chkPause: TCheckBox; 15 | chkApplicationOnMessage: TCheckBox; 16 | chkMainFormHook: TCheckBox; 17 | btnClear: TButton; 18 | LabeledEdit1: TLabeledEdit; 19 | procedure FormCreate(Sender: TObject); 20 | procedure FormDestroy(Sender: TObject); 21 | procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); 22 | procedure btnClearClick(Sender: TObject); 23 | private 24 | procedure Log(const S: string); 25 | procedure LogMessage(const Prefix: string; Message: TMessage); overload; 26 | procedure LogMessage(const Prefix: string; Msg: TMsg); overload; 27 | function MainFormHook(var Message: TMessage): Boolean; 28 | public 29 | { Public declarations } 30 | end; 31 | 32 | var 33 | frmMain: TfrmMain; 34 | 35 | implementation 36 | 37 | {$R *.dfm} 38 | 39 | uses 40 | MsgHlpr; 41 | 42 | procedure TfrmMain.btnClearClick(Sender: TObject); 43 | begin 44 | Memo1.Clear; 45 | end; 46 | 47 | procedure TfrmMain.FormCreate(Sender: TObject); 48 | begin 49 | Application.HookMainWindow(MainFormHook); 50 | end; 51 | 52 | procedure TfrmMain.FormDestroy(Sender: TObject); 53 | begin 54 | Application.UnhookMainWindow(MainFormHook); 55 | end; 56 | 57 | function TfrmMain.MainFormHook(var Message: TMessage): Boolean; 58 | begin 59 | Result := False; 60 | if not chkMainFormHook.Checked then 61 | Exit; 62 | LogMessage('H', Message); 63 | end; 64 | 65 | procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); 66 | begin 67 | Handled := False; 68 | if not chkApplicationOnMessage.Checked then 69 | Exit; 70 | if Msg.message = $118 then // skip edit cursor update message 71 | Exit; 72 | LogMessage('A', Msg); 73 | end; 74 | 75 | procedure TfrmMain.Log(const S: string); 76 | begin 77 | if chkPause.Checked then 78 | Exit; 79 | Memo1.Lines.Add(S); 80 | end; 81 | 82 | procedure TfrmMain.LogMessage(const Prefix: string; Message: TMessage); 83 | begin 84 | Log(Prefix + ': ' + Message.ToString); 85 | end; 86 | 87 | procedure TfrmMain.LogMessage(const Prefix: string; Msg: TMsg); 88 | begin 89 | Log(Prefix + ': ' + Msg.ToString); 90 | end; 91 | 92 | 93 | 94 | end. 95 | -------------------------------------------------------------------------------- /MsgHlpr.pas: -------------------------------------------------------------------------------- 1 | unit MsgHlpr; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages; 7 | 8 | type 9 | TMessageHelper = record helper for TMessage 10 | function ToString: string; 11 | end; 12 | 13 | TMsgHelper = record helper for TMsg 14 | function ToString: string; 15 | end; 16 | 17 | function ToHex(AValue: Integer): string; 18 | function SCToString(SC: WParam): string; 19 | function HTToString(HT: Integer): string; 20 | function MsgToString(Msg: UINT): string; 21 | 22 | function IsControlNtf(Msg: UINT): Boolean; 23 | function IsControlMsg(Msg: UINT): Boolean; 24 | function IsKeyMsg(Msg: UINT): Boolean; 25 | function IsMouseMsg(Msg: UINT): Boolean; 26 | function IsInputMsg(Msg: UINT): Boolean; 27 | function IsPaintMsg(Msg: UINT): Boolean; 28 | function IsUserMsg(Msg: UINT): Boolean; 29 | 30 | function MsgType(Msg: UINT): string; 31 | 32 | function DescribeHandle(const Handle: HWND): string; 33 | function DescribeActivateApp(const Message: TWMActivateApp): string; 34 | function DescribeNCHitMessage(const Message: TWMNCHitMessage): string; 35 | function DescribeSyscommand(const Message: TWMSysCommand): string; 36 | function DescribeKeyMessage(const Message: TWMKey): string; 37 | function DescribeMouseMessage(const Message: TWMMouse): string; 38 | 39 | implementation 40 | 41 | uses 42 | SysUtils, Classes, Controls, Menus, Forms, TypInfo; 43 | 44 | const 45 | MK_XBUTTON1 = $20; 46 | MK_XBUTTON2 = $40; 47 | XBUTTON1 = $00010000; 48 | XBUTTON2 = $00020000; 49 | 50 | function Append(const Left, Delimiter, Right: string): string; 51 | begin 52 | if Left = '' then 53 | Result := Right 54 | else if Right = '' then 55 | Result := Left 56 | else 57 | Result := Left + Delimiter + Right; 58 | end; 59 | 60 | function ToHex(AValue: Integer): string; 61 | begin 62 | Result := '0x' + IntToHex(AValue, 8); 63 | end; 64 | 65 | function SCToString(SC: WParam): string; 66 | begin 67 | case SC of 68 | SC_SIZE: Result := 'SC_SIZE'; 69 | SC_MOVE: Result := 'SC_MOVE'; 70 | SC_MINIMIZE: Result := 'SC_MINIMIZE'; 71 | SC_MAXIMIZE: Result := 'SC_MAXIMIZE'; 72 | SC_NEXTWINDOW: Result := 'SC_NEXTWINDOW'; 73 | SC_PREVWINDOW: Result := 'SC_PREVWINDOW'; 74 | SC_CLOSE: Result := 'SC_CLOSE'; 75 | SC_VSCROLL: Result := 'SC_VSCROLL'; 76 | SC_HSCROLL: Result := 'SC_HSCROLL'; 77 | SC_MOUSEMENU: Result := 'SC_MOUSEMENU'; 78 | SC_KEYMENU: Result := 'SC_KEYMENU'; 79 | SC_ARRANGE: Result := 'SC_ARRANGE'; 80 | SC_RESTORE: Result := 'SC_RESTORE'; 81 | SC_TASKLIST: Result := 'SC_TASKLIST'; 82 | SC_SCREENSAVE: Result := 'SC_SCREENSAVE'; 83 | SC_HOTKEY: Result := 'SC_HOTKEY'; 84 | SC_DEFAULT: Result := 'SC_DEFAULT'; 85 | SC_MONITORPOWER: Result := 'SC_MONITORPOWER'; 86 | SC_CONTEXTHELP: Result := 'SC_CONTEXTHELP'; 87 | SC_SEPARATOR: Result := 'SC_SEPARATOR'; 88 | else 89 | Result := ToHex(SC); 90 | end; 91 | end; 92 | 93 | function HTToString(HT: Integer): string; 94 | begin 95 | case HT of 96 | HTERROR: Result := 'HTERROR'; 97 | HTTRANSPARENT: Result := 'HTTRANSPARENT'; 98 | HTNOWHERE: Result := 'HTNOWHERE'; 99 | HTCLIENT: Result := 'HTCLIENT'; 100 | HTCAPTION: Result := 'HTCAPTION'; 101 | HTSYSMENU: Result := 'HTSYSMENU'; 102 | //HTGROWBOX: Result := 'HTGROWBOX'; 103 | HTSIZE: Result := 'HTSIZE'; 104 | HTMENU: Result := 'HTMENU'; 105 | HTHSCROLL: Result := 'HTHSCROLL'; 106 | HTVSCROLL: Result := 'HTVSCROLL'; 107 | HTMINBUTTON: Result := 'HTMINBUTTON'; 108 | HTMAXBUTTON: Result := 'HTMAXBUTTON'; 109 | HTLEFT: Result := 'HTLEFT'; 110 | HTRIGHT: Result := 'HTRIGHT'; 111 | HTTOP: Result := 'HTTOP'; 112 | HTTOPLEFT: Result := 'HTTOPLEFT'; 113 | HTTOPRIGHT: Result := 'HTTOPRIGHT'; 114 | HTBOTTOM: Result := 'HTBOTTOM'; 115 | HTBOTTOMLEFT: Result := 'HTBOTTOMLEFT'; 116 | HTBOTTOMRIGHT: Result := 'HTBOTTOMRIGHT'; 117 | HTBORDER: Result := 'HTBORDER'; 118 | //HTREDUCE: Result := 'HTREDUCE'; 119 | //HTZOOM: Result := 'HTZOOM'; 120 | //HTSIZEFIRST: Result := 'HTSIZEFIRST'; 121 | //HTSIZELAST: Result := 'HTSIZELAST'; 122 | HTOBJECT: Result := 'HTOBJECT'; 123 | HTCLOSE: Result := 'HTCLOSE'; 124 | HTHELP: Result := 'HTHELP'; 125 | else 126 | Result := ToHex(HT); 127 | end; 128 | end; 129 | 130 | function MsgToString(Msg: UINT): string; 131 | begin 132 | case Msg of 133 | // Windows Message IDs (Messages.pas) 134 | WM_NULL: Result := 'WM_NULL'; 135 | WM_CREATE: Result := 'WM_CREATE'; 136 | WM_DESTROY: Result := 'WM_DESTROY'; 137 | WM_MOVE: Result := 'WM_MOVE'; 138 | WM_SIZE: Result := 'WM_SIZE'; 139 | WM_ACTIVATE: Result := 'WM_ACTIVATE'; 140 | WM_SETFOCUS: Result := 'WM_SETFOCUS'; 141 | WM_KILLFOCUS: Result := 'WM_KILLFOCUS'; 142 | WM_ENABLE: Result := 'WM_ENABLE'; 143 | WM_SETREDRAW: Result := 'WM_SETREDRAW'; 144 | WM_SETTEXT: Result := 'WM_SETTEXT'; 145 | WM_GETTEXT: Result := 'WM_GETTEXT'; 146 | WM_GETTEXTLENGTH: Result := 'WM_GETTEXTLENGTH'; 147 | WM_PAINT: Result := 'WM_PAINT'; 148 | WM_CLOSE: Result := 'WM_CLOSE'; 149 | WM_QUERYENDSESSION: Result := 'WM_QUERYENDSESSION'; 150 | WM_QUIT: Result := 'WM_QUIT'; 151 | WM_QUERYOPEN: Result := 'WM_QUERYOPEN'; 152 | WM_ERASEBKGND: Result := 'WM_ERASEBKGND'; 153 | WM_SYSCOLORCHANGE: Result := 'WM_SYSCOLORCHANGE'; 154 | WM_ENDSESSION: Result := 'WM_ENDSESSION'; 155 | WM_SYSTEMERROR: Result := 'WM_SYSTEMERROR'; 156 | WM_SHOWWINDOW: Result := 'WM_SHOWWINDOW'; 157 | WM_CTLCOLOR: Result := 'WM_CTLCOLOR'; 158 | WM_SETTINGCHANGE: Result := 'WM_SETTINGCHANGE'; 159 | WM_DEVMODECHANGE: Result := 'WM_DEVMODECHANGE'; 160 | WM_ACTIVATEAPP: Result := 'WM_ACTIVATEAPP'; 161 | WM_FONTCHANGE: Result := 'WM_FONTCHANGE'; 162 | WM_TIMECHANGE: Result := 'WM_TIMECHANGE'; 163 | WM_CANCELMODE: Result := 'WM_CANCELMODE'; 164 | WM_SETCURSOR: Result := 'WM_SETCURSOR'; 165 | WM_MOUSEACTIVATE: Result := 'WM_MOUSEACTIVATE'; 166 | WM_CHILDACTIVATE: Result := 'WM_CHILDACTIVATE'; 167 | WM_QUEUESYNC: Result := 'WM_QUEUESYNC'; 168 | WM_GETMINMAXINFO: Result := 'WM_GETMINMAXINFO'; 169 | WM_PAINTICON: Result := 'WM_PAINTICON'; 170 | WM_ICONERASEBKGND: Result := 'WM_ICONERASEBKGND'; 171 | WM_NEXTDLGCTL: Result := 'WM_NEXTDLGCTL'; 172 | WM_SPOOLERSTATUS: Result := 'WM_SPOOLERSTATUS'; 173 | WM_DRAWITEM: Result := 'WM_DRAWITEM'; 174 | WM_MEASUREITEM: Result := 'WM_MEASUREITEM'; 175 | WM_DELETEITEM: Result := 'WM_DELETEITEM'; 176 | WM_VKEYTOITEM: Result := 'WM_VKEYTOITEM'; 177 | WM_CHARTOITEM: Result := 'WM_CHARTOITEM'; 178 | WM_SETFONT: Result := 'WM_SETFONT'; 179 | WM_GETFONT: Result := 'WM_GETFONT'; 180 | WM_SETHOTKEY: Result := 'WM_SETHOTKEY'; 181 | WM_GETHOTKEY: Result := 'WM_GETHOTKEY'; 182 | WM_QUERYDRAGICON: Result := 'WM_QUERYDRAGICON'; 183 | WM_COMPAREITEM: Result := 'WM_COMPAREITEM'; 184 | WM_GETOBJECT: Result := 'WM_GETOBJECT'; 185 | WM_COMPACTING: Result := 'WM_COMPACTING'; 186 | WM_COMMNOTIFY: Result := 'WM_COMMNOTIFY'; 187 | WM_WINDOWPOSCHANGING: Result := 'WM_WINDOWPOSCHANGING'; 188 | WM_WINDOWPOSCHANGED: Result := 'WM_WINDOWPOSCHANGED'; 189 | WM_POWER: Result := 'WM_POWER'; 190 | //WM_COPYGLOBALDATA: Result := 'WM_COPYGLOBALDATA'; 191 | $0049: Result := 'WM_COPYGLOBALDATA'; 192 | WM_COPYDATA: Result := 'WM_COPYDATA'; 193 | WM_CANCELJOURNAL: Result := 'WM_CANCELJOURNAL'; 194 | WM_NOTIFY: Result := 'WM_NOTIFY'; 195 | WM_INPUTLANGCHANGEREQUEST: Result := 'WM_INPUTLANGCHANGEREQUEST'; 196 | WM_INPUTLANGCHANGE: Result := 'WM_INPUTLANGCHANGE'; 197 | WM_TCARD: Result := 'WM_TCARD'; 198 | WM_HELP: Result := 'WM_HELP'; 199 | WM_USERCHANGED: Result := 'WM_USERCHANGED'; 200 | WM_NOTIFYFORMAT: Result := 'WM_NOTIFYFORMAT'; 201 | WM_CONTEXTMENU: Result := 'WM_CONTEXTMENU'; 202 | WM_STYLECHANGING: Result := 'WM_STYLECHANGING'; 203 | WM_STYLECHANGED: Result := 'WM_STYLECHANGED'; 204 | WM_DISPLAYCHANGE: Result := 'WM_DISPLAYCHANGE'; 205 | WM_GETICON: Result := 'WM_GETICON'; 206 | WM_SETICON: Result := 'WM_SETICON'; 207 | WM_NCCREATE: Result := 'WM_NCCREATE'; 208 | WM_NCDESTROY: Result := 'WM_NCDESTROY'; 209 | WM_NCCALCSIZE: Result := 'WM_NCCALCSIZE'; 210 | WM_NCHITTEST: Result := 'WM_NCHITTEST'; 211 | WM_NCPAINT: Result := 'WM_NCPAINT'; 212 | WM_NCACTIVATE: Result := 'WM_NCACTIVATE'; 213 | WM_GETDLGCODE: Result := 'WM_GETDLGCODE'; 214 | WM_NCMOUSEMOVE: Result := 'WM_NCMOUSEMOVE'; 215 | WM_NCLBUTTONDOWN: Result := 'WM_NCLBUTTONDOWN'; 216 | WM_NCLBUTTONUP: Result := 'WM_NCLBUTTONUP'; 217 | WM_NCLBUTTONDBLCLK: Result := 'WM_NCLBUTTONDBLCLK'; 218 | WM_NCRBUTTONDOWN: Result := 'WM_NCRBUTTONDOWN'; 219 | WM_NCRBUTTONUP: Result := 'WM_NCRBUTTONUP'; 220 | WM_NCRBUTTONDBLCLK: Result := 'WM_NCRBUTTONDBLCLK'; 221 | WM_NCMBUTTONDOWN: Result := 'WM_NCMBUTTONDOWN'; 222 | WM_NCMBUTTONUP: Result := 'WM_NCMBUTTONUP'; 223 | WM_NCMBUTTONDBLCLK: Result := 'WM_NCMBUTTONDBLCLK'; 224 | WM_NCXBUTTONDOWN: Result := 'WM_NCXBUTTONDOWN'; 225 | WM_NCXBUTTONUP: Result := 'WM_NCXBUTTONUP'; 226 | WM_NCXBUTTONDBLCLK: Result := 'WM_NCXBUTTONDBLCLK'; 227 | WM_INPUT_DEVICE_CHANGE: Result := 'WM_INPUT_DEVICE_CHANGE'; 228 | WM_INPUT: Result := 'WM_INPUT'; 229 | //WM_KEYFIRST: Result := 'WM_KEYFIRST'; 230 | WM_KEYDOWN: Result := 'WM_KEYDOWN'; 231 | WM_KEYUP: Result := 'WM_KEYUP'; 232 | WM_CHAR: Result := 'WM_CHAR'; 233 | WM_DEADCHAR: Result := 'WM_DEADCHAR'; 234 | WM_SYSKEYDOWN: Result := 'WM_SYSKEYDOWN'; 235 | WM_SYSKEYUP: Result := 'WM_SYSKEYUP'; 236 | WM_SYSCHAR: Result := 'WM_SYSCHAR'; 237 | WM_SYSDEADCHAR: Result := 'WM_SYSDEADCHAR'; 238 | WM_UNICHAR: Result := 'WM_UNICHAR'; 239 | //WM_KEYLAST: Result := 'WM_KEYLAST'; 240 | WM_INITDIALOG: Result := 'WM_INITDIALOG'; 241 | WM_COMMAND: Result := 'WM_COMMAND'; 242 | WM_SYSCOMMAND: Result := 'WM_SYSCOMMAND'; 243 | WM_TIMER: Result := 'WM_TIMER'; 244 | WM_HSCROLL: Result := 'WM_HSCROLL'; 245 | WM_VSCROLL: Result := 'WM_VSCROLL'; 246 | WM_INITMENU: Result := 'WM_INITMENU'; 247 | WM_INITMENUPOPUP: Result := 'WM_INITMENUPOPUP'; 248 | WM_GESTURE: Result := 'WM_GESTURE'; 249 | WM_GESTURENOTIFY: Result := 'WM_GESTURENOTIFY'; 250 | WM_MENUSELECT: Result := 'WM_MENUSELECT'; 251 | WM_MENUCHAR: Result := 'WM_MENUCHAR'; 252 | WM_ENTERIDLE: Result := 'WM_ENTERIDLE'; 253 | WM_MENURBUTTONUP: Result := 'WM_MENURBUTTONUP'; 254 | WM_MENUDRAG: Result := 'WM_MENUDRAG'; 255 | WM_MENUGETOBJECT: Result := 'WM_MENUGETOBJECT'; 256 | WM_UNINITMENUPOPUP: Result := 'WM_UNINITMENUPOPUP'; 257 | WM_MENUCOMMAND: Result := 'WM_MENUCOMMAND'; 258 | WM_CHANGEUISTATE: Result := 'WM_CHANGEUISTATE'; 259 | WM_UPDATEUISTATE: Result := 'WM_UPDATEUISTATE'; 260 | WM_QUERYUISTATE: Result := 'WM_QUERYUISTATE'; 261 | WM_CTLCOLORMSGBOX: Result := 'WM_CTLCOLORMSGBOX'; 262 | WM_CTLCOLOREDIT: Result := 'WM_CTLCOLOREDIT'; 263 | WM_CTLCOLORLISTBOX: Result := 'WM_CTLCOLORLISTBOX'; 264 | WM_CTLCOLORBTN: Result := 'WM_CTLCOLORBTN'; 265 | WM_CTLCOLORDLG: Result := 'WM_CTLCOLORDLG'; 266 | WM_CTLCOLORSCROLLBAR: Result := 'WM_CTLCOLORSCROLLBAR'; 267 | WM_CTLCOLORSTATIC: Result := 'WM_CTLCOLORSTATIC'; 268 | //WM_MOUSEFIRST: Result := 'WM_MOUSEFIRST'; 269 | WM_MOUSEMOVE: Result := 'WM_MOUSEMOVE'; 270 | WM_LBUTTONDOWN: Result := 'WM_LBUTTONDOWN'; 271 | WM_LBUTTONUP: Result := 'WM_LBUTTONUP'; 272 | WM_LBUTTONDBLCLK: Result := 'WM_LBUTTONDBLCLK'; 273 | WM_RBUTTONDOWN: Result := 'WM_RBUTTONDOWN'; 274 | WM_RBUTTONUP: Result := 'WM_RBUTTONUP'; 275 | WM_RBUTTONDBLCLK: Result := 'WM_RBUTTONDBLCLK'; 276 | WM_MBUTTONDOWN: Result := 'WM_MBUTTONDOWN'; 277 | WM_MBUTTONUP: Result := 'WM_MBUTTONUP'; 278 | WM_MBUTTONDBLCLK: Result := 'WM_MBUTTONDBLCLK'; 279 | WM_MOUSEWHEEL: Result := 'WM_MOUSEWHEEL'; 280 | WM_XBUTTONDOWN: Result := 'WM_XBUTTONDOWN'; 281 | WM_XBUTTONUP: Result := 'WM_XBUTTONUP'; 282 | WM_XBUTTONDBLCLK: Result := 'WM_XBUTTONDBLCLK'; 283 | WM_MOUSEHWHEEL: Result := 'WM_MOUSEHWHEEL'; 284 | //WM_MOUSELAST: Result := 'WM_MOUSELAST'; 285 | WM_PARENTNOTIFY: Result := 'WM_PARENTNOTIFY'; 286 | WM_ENTERMENULOOP: Result := 'WM_ENTERMENULOOP'; 287 | WM_EXITMENULOOP: Result := 'WM_EXITMENULOOP'; 288 | WM_NEXTMENU: Result := 'WM_NEXTMENU'; 289 | WM_SIZING: Result := 'WM_SIZING'; 290 | WM_CAPTURECHANGED: Result := 'WM_CAPTURECHANGED'; 291 | WM_MOVING: Result := 'WM_MOVING'; 292 | WM_POWERBROADCAST: Result := 'WM_POWERBROADCAST'; 293 | WM_DEVICECHANGE: Result := 'WM_DEVICECHANGE'; 294 | WM_IME_STARTCOMPOSITION: Result := 'WM_IME_STARTCOMPOSITION'; 295 | WM_IME_ENDCOMPOSITION: Result := 'WM_IME_ENDCOMPOSITION'; 296 | WM_IME_COMPOSITION: Result := 'WM_IME_COMPOSITION'; 297 | //WM_IME_KEYLAST: Result := 'WM_IME_KEYLAST'; 298 | WM_IME_SETCONTEXT: Result := 'WM_IME_SETCONTEXT'; 299 | WM_IME_NOTIFY: Result := 'WM_IME_NOTIFY'; 300 | WM_IME_CONTROL: Result := 'WM_IME_CONTROL'; 301 | WM_IME_COMPOSITIONFULL: Result := 'WM_IME_COMPOSITIONFULL'; 302 | WM_IME_SELECT: Result := 'WM_IME_SELECT'; 303 | WM_IME_CHAR: Result := 'WM_IME_CHAR'; 304 | WM_IME_REQUEST: Result := 'WM_IME_REQUEST'; 305 | WM_IME_KEYDOWN: Result := 'WM_IME_KEYDOWN'; 306 | WM_IME_KEYUP: Result := 'WM_IME_KEYUP'; 307 | WM_MDICREATE: Result := 'WM_MDICREATE'; 308 | WM_MDIDESTROY: Result := 'WM_MDIDESTROY'; 309 | WM_MDIACTIVATE: Result := 'WM_MDIACTIVATE'; 310 | WM_MDIRESTORE: Result := 'WM_MDIRESTORE'; 311 | WM_MDINEXT: Result := 'WM_MDINEXT'; 312 | WM_MDIMAXIMIZE: Result := 'WM_MDIMAXIMIZE'; 313 | WM_MDITILE: Result := 'WM_MDITILE'; 314 | WM_MDICASCADE: Result := 'WM_MDICASCADE'; 315 | WM_MDIICONARRANGE: Result := 'WM_MDIICONARRANGE'; 316 | WM_MDIGETACTIVE: Result := 'WM_MDIGETACTIVE'; 317 | WM_MDISETMENU: Result := 'WM_MDISETMENU'; 318 | WM_ENTERSIZEMOVE: Result := 'WM_ENTERSIZEMOVE'; 319 | WM_EXITSIZEMOVE: Result := 'WM_EXITSIZEMOVE'; 320 | WM_DROPFILES: Result := 'WM_DROPFILES'; 321 | WM_MDIREFRESHMENU: Result := 'WM_MDIREFRESHMENU'; 322 | WM_TOUCH: Result := 'WM_TOUCH'; 323 | WM_MOUSEHOVER: Result := 'WM_MOUSEHOVER'; 324 | WM_MOUSELEAVE: Result := 'WM_MOUSELEAVE'; 325 | WM_NCMOUSEHOVER: Result := 'WM_NCMOUSEHOVER'; 326 | WM_NCMOUSELEAVE: Result := 'WM_NCMOUSELEAVE'; 327 | WM_WTSSESSION_CHANGE: Result := 'WM_WTSSESSION_CHANGE'; 328 | //WM_TABLET_FIRST: Result := 'WM_TABLET_FIRST'; 329 | //WM_TABLET_LAST: Result := 'WM_TABLET_LAST'; 330 | WM_CUT: Result := 'WM_CUT'; 331 | WM_COPY: Result := 'WM_COPY'; 332 | WM_PASTE: Result := 'WM_PASTE'; 333 | WM_CLEAR: Result := 'WM_CLEAR'; 334 | WM_UNDO: Result := 'WM_UNDO'; 335 | WM_RENDERFORMAT: Result := 'WM_RENDERFORMAT'; 336 | WM_RENDERALLFORMATS: Result := 'WM_RENDERALLFORMATS'; 337 | WM_DESTROYCLIPBOARD: Result := 'WM_DESTROYCLIPBOARD'; 338 | WM_DRAWCLIPBOARD: Result := 'WM_DRAWCLIPBOARD'; 339 | WM_PAINTCLIPBOARD: Result := 'WM_PAINTCLIPBOARD'; 340 | WM_VSCROLLCLIPBOARD: Result := 'WM_VSCROLLCLIPBOARD'; 341 | WM_SIZECLIPBOARD: Result := 'WM_SIZECLIPBOARD'; 342 | WM_ASKCBFORMATNAME: Result := 'WM_ASKCBFORMATNAME'; 343 | WM_CHANGECBCHAIN: Result := 'WM_CHANGECBCHAIN'; 344 | WM_HSCROLLCLIPBOARD: Result := 'WM_HSCROLLCLIPBOARD'; 345 | WM_QUERYNEWPALETTE: Result := 'WM_QUERYNEWPALETTE'; 346 | WM_PALETTEISCHANGING: Result := 'WM_PALETTEISCHANGING'; 347 | WM_PALETTECHANGED: Result := 'WM_PALETTECHANGED'; 348 | WM_HOTKEY: Result := 'WM_HOTKEY'; 349 | WM_PRINT: Result := 'WM_PRINT'; 350 | WM_PRINTCLIENT: Result := 'WM_PRINTCLIENT'; 351 | WM_APPCOMMAND: Result := 'WM_APPCOMMAND'; 352 | WM_THEMECHANGED: Result := 'WM_THEMECHANGED'; 353 | WM_CLIPBOARDUPDATE: Result := 'WM_CLIPBOARDUPDATE'; 354 | WM_HANDHELDFIRST: Result := 'WM_HANDHELDFIRST'; 355 | WM_HANDHELDLAST: Result := 'WM_HANDHELDLAST'; 356 | WM_PENWINFIRST: Result := 'WM_PENWINFIRST'; 357 | WM_PENWINLAST: Result := 'WM_PENWINLAST'; 358 | WM_COALESCE_FIRST: Result := 'WM_COALESCE_FIRST'; 359 | WM_COALESCE_LAST: Result := 'WM_COALESCE_LAST'; 360 | //WM_DDE_FIRST: Result := 'WM_DDE_FIRST'; 361 | WM_DDE_INITIATE: Result := 'WM_DDE_INITIATE'; 362 | WM_DDE_TERMINATE: Result := 'WM_DDE_TERMINATE'; 363 | WM_DDE_ADVISE: Result := 'WM_DDE_ADVISE'; 364 | WM_DDE_UNADVISE: Result := 'WM_DDE_UNADVISE'; 365 | WM_DDE_ACK: Result := 'WM_DDE_ACK'; 366 | WM_DDE_DATA: Result := 'WM_DDE_DATA'; 367 | WM_DDE_REQUEST: Result := 'WM_DDE_REQUEST'; 368 | WM_DDE_POKE: Result := 'WM_DDE_POKE'; 369 | WM_DDE_EXECUTE: Result := 'WM_DDE_EXECUTE'; 370 | //WM_DDE_LAST: Result := 'WM_DDE_LAST'; 371 | WM_DWMCOMPOSITIONCHANGED: Result := 'WM_DWMCOMPOSITIONCHANGED'; 372 | WM_DWMNCRENDERINGCHANGED: Result := 'WM_DWMNCRENDERINGCHANGED'; 373 | WM_DWMCOLORIZATIONCOLORCHANGED: Result := 'WM_DWMCOLORIZATIONCOLORCHANGED'; 374 | WM_DWMWINDOWMAXIMIZEDCHANGE: Result := 'WM_DWMWINDOWMAXIMIZEDCHANGE'; 375 | WM_DWMSENDICONICTHUMBNAIL: Result := 'WM_DWMSENDICONICTHUMBNAIL'; 376 | WM_DWMSENDICONICLIVEPREVIEWBITMAP: Result := 'WM_DWMSENDICONICLIVEPREVIEWBITMAP'; 377 | WM_GETTITLEBARINFOEX: Result := 'WM_GETTITLEBARINFOEX'; 378 | WM_TABLET_DEFBASE: Result := 'WM_TABLET_DEFBASE'; 379 | //WM_TABLET_MAXOFFSET: Result := 'WM_TABLET_MAXOFFSET'; 380 | WM_TABLET_ADDED: Result := 'WM_TABLET_ADDED'; 381 | WM_TABLET_DELETED: Result := 'WM_TABLET_DELETED'; 382 | WM_TABLET_FLICK: Result := 'WM_TABLET_FLICK'; 383 | WM_TABLET_QUERYSYSTEMGESTURESTATUS: Result := 'WM_TABLET_QUERYSYSTEMGESTURESTATUS'; 384 | WM_APP: Result := 'WM_APP'; 385 | 386 | // VCL control message IDs (Controls.pas) 387 | CM_ACTIVATE: Result := 'CM_ACTIVATE'; 388 | CM_DEACTIVATE: Result := 'CM_DEACTIVATE'; 389 | CM_GOTFOCUS: Result := 'CM_GOTFOCUS'; 390 | CM_LOSTFOCUS: Result := 'CM_LOSTFOCUS'; 391 | CM_CANCELMODE: Result := 'CM_CANCELMODE'; 392 | CM_DIALOGKEY: Result := 'CM_DIALOGKEY'; 393 | CM_DIALOGCHAR: Result := 'CM_DIALOGCHAR'; 394 | CM_FOCUSCHANGED: Result := 'CM_FOCUSCHANGED'; 395 | CM_PARENTFONTCHANGED: Result := 'CM_PARENTFONTCHANGED'; 396 | CM_PARENTCOLORCHANGED: Result := 'CM_PARENTCOLORCHANGED'; 397 | CM_HITTEST: Result := 'CM_HITTEST'; 398 | CM_VISIBLECHANGED: Result := 'CM_VISIBLECHANGED'; 399 | CM_ENABLEDCHANGED: Result := 'CM_ENABLEDCHANGED'; 400 | CM_COLORCHANGED: Result := 'CM_COLORCHANGED'; 401 | CM_FONTCHANGED: Result := 'CM_FONTCHANGED'; 402 | CM_CURSORCHANGED: Result := 'CM_CURSORCHANGED'; 403 | CM_CTL3DCHANGED: Result := 'CM_CTL3DCHANGED'; 404 | CM_PARENTCTL3DCHANGED: Result := 'CM_PARENTCTL3DCHANGED'; 405 | CM_TEXTCHANGED: Result := 'CM_TEXTCHANGED'; 406 | CM_MOUSEENTER: Result := 'CM_MOUSEENTER'; 407 | CM_MOUSELEAVE: Result := 'CM_MOUSELEAVE'; 408 | CM_MENUCHANGED: Result := 'CM_MENUCHANGED'; 409 | CM_APPKEYDOWN: Result := 'CM_APPKEYDOWN'; 410 | CM_APPSYSCOMMAND: Result := 'CM_APPSYSCOMMAND'; 411 | CM_BUTTONPRESSED: Result := 'CM_BUTTONPRESSED'; 412 | CM_SHOWINGCHANGED: Result := 'CM_SHOWINGCHANGED'; 413 | CM_ENTER: Result := 'CM_ENTER'; 414 | CM_EXIT: Result := 'CM_EXIT'; 415 | CM_DESIGNHITTEST: Result := 'CM_DESIGNHITTEST'; 416 | CM_ICONCHANGED: Result := 'CM_ICONCHANGED'; 417 | CM_WANTSPECIALKEY: Result := 'CM_WANTSPECIALKEY'; 418 | CM_INVOKEHELP: Result := 'CM_INVOKEHELP'; 419 | CM_WINDOWHOOK: Result := 'CM_WINDOWHOOK'; 420 | CM_RELEASE: Result := 'CM_RELEASE'; 421 | CM_SHOWHINTCHANGED: Result := 'CM_SHOWHINTCHANGED'; 422 | CM_PARENTSHOWHINTCHANGED: Result := 'CM_PARENTSHOWHINTCHANGED'; 423 | CM_SYSCOLORCHANGE: Result := 'CM_SYSCOLORCHANGE'; 424 | CM_WININICHANGE: Result := 'CM_WININICHANGE'; 425 | CM_FONTCHANGE: Result := 'CM_FONTCHANGE'; 426 | CM_TIMECHANGE: Result := 'CM_TIMECHANGE'; 427 | CM_TABSTOPCHANGED: Result := 'CM_TABSTOPCHANGED'; 428 | CM_UIACTIVATE: Result := 'CM_UIACTIVATE'; 429 | CM_UIDEACTIVATE: Result := 'CM_UIDEACTIVATE'; 430 | CM_DOCWINDOWACTIVATE: Result := 'CM_DOCWINDOWACTIVATE'; 431 | CM_CONTROLLISTCHANGE: Result := 'CM_CONTROLLISTCHANGE'; 432 | CM_GETDATALINK: Result := 'CM_GETDATALINK'; 433 | CM_CHILDKEY: Result := 'CM_CHILDKEY'; 434 | CM_DRAG: Result := 'CM_DRAG'; 435 | CM_HINTSHOW: Result := 'CM_HINTSHOW'; 436 | CM_DIALOGHANDLE: Result := 'CM_DIALOGHANDLE'; 437 | CM_ISTOOLCONTROL: Result := 'CM_ISTOOLCONTROL'; 438 | CM_RECREATEWND: Result := 'CM_RECREATEWND'; 439 | CM_INVALIDATE: Result := 'CM_INVALIDATE'; 440 | CM_SYSFONTCHANGED: Result := 'CM_SYSFONTCHANGED'; 441 | CM_CONTROLCHANGE: Result := 'CM_CONTROLCHANGE'; 442 | CM_CHANGED: Result := 'CM_CHANGED'; 443 | CM_DOCKCLIENT: Result := 'CM_DOCKCLIENT'; 444 | CM_UNDOCKCLIENT: Result := 'CM_UNDOCKCLIENT'; 445 | CM_FLOAT: Result := 'CM_FLOAT'; 446 | CM_BORDERCHANGED: Result := 'CM_BORDERCHANGED'; 447 | CM_BIDIMODECHANGED: Result := 'CM_BIDIMODECHANGED'; 448 | CM_PARENTBIDIMODECHANGED: Result := 'CM_PARENTBIDIMODECHANGED'; 449 | CM_ALLCHILDRENFLIPPED: Result := 'CM_ALLCHILDRENFLIPPED'; 450 | CM_ACTIONUPDATE: Result := 'CM_ACTIONUPDATE'; 451 | CM_ACTIONEXECUTE: Result := 'CM_ACTIONEXECUTE'; 452 | CM_HINTSHOWPAUSE: Result := 'CM_HINTSHOWPAUSE'; 453 | CM_DOCKNOTIFICATION: Result := 'CM_DOCKNOTIFICATION'; 454 | CM_MOUSEWHEEL: Result := 'CM_MOUSEWHEEL'; 455 | CM_ISSHORTCUT: Result := 'CM_ISSHORTCUT'; 456 | CM_UPDATEACTIONS: Result := 'CM_UPDATEACTIONS'; 457 | CM_INVALIDATEDOCKHOST: Result := 'CM_INVALIDATEDOCKHOST'; 458 | CM_SETACTIVECONTROL: Result := 'CM_SETACTIVECONTROL'; 459 | CM_POPUPHWNDDESTROY: Result := 'CM_POPUPHWNDDESTROY'; 460 | CM_CREATEPOPUP: Result := 'CM_CREATEPOPUP'; 461 | CM_DESTROYHANDLE: Result := 'CM_DESTROYHANDLE'; 462 | CM_MOUSEACTIVATE: Result := 'CM_MOUSEACTIVATE'; 463 | CM_CONTROLLISTCHANGING: Result := 'CM_CONTROLLISTCHANGING'; 464 | CM_BUFFEREDPRINTCLIENT: Result := 'CM_BUFFEREDPRINTCLIENT'; 465 | CM_UNTHEMECONTROL: Result := 'CM_UNTHEMECONTROL'; 466 | CM_DOUBLEBUFFEREDCHANGED: Result := 'CM_DOUBLEBUFFEREDCHANGED'; 467 | CM_PARENTDOUBLEBUFFEREDCHANGED: Result := 'CM_PARENTDOUBLEBUFFEREDCHANGED'; 468 | //CM_STYLECHANGED: Result := 'CM_STYLECHANGED'; 469 | CM_THEMECHANGED: Result := 'CM_STYLECHANGED'; 470 | CM_GESTURE: Result := 'CM_GESTURE'; 471 | CM_CUSTOMGESTURESCHANGED: Result := 'CM_CUSTOMGESTURESCHANGED'; 472 | CM_GESTUREMANAGERCHANGED: Result := 'CM_GESTUREMANAGERCHANGED'; 473 | CM_STANDARDGESTURESCHANGED: Result := 'CM_STANDARDGESTURESCHANGED'; 474 | CM_INPUTLANGCHANGE: Result := 'CM_INPUTLANGCHANGE'; 475 | CM_TABLETOPTIONSCHANGED: Result := 'CM_TABLETOPTIONSCHANGED'; 476 | CM_PARENTTABLETOPTIONSCHANGED: Result := 'CM_PARENTTABLETOPTIONSCHANGED'; 477 | //CM_CUSTOMSTYLECHANGED: Result := 'CM_CUSTOMSTYLECHANGED'; 478 | CM_BASE + 89: Result := 'CM_CUSTOMSTYLECHANGED'; 479 | 480 | // VCL control notification IDs (Controls.pas) 481 | CN_CHARTOITEM: Result := 'CN_CHARTOITEM'; 482 | CN_COMMAND: Result := 'CN_COMMAND'; 483 | CN_COMPAREITEM: Result := 'CN_COMPAREITEM'; 484 | CN_CTLCOLORBTN: Result := 'CN_CTLCOLORBTN'; 485 | CN_CTLCOLORDLG: Result := 'CN_CTLCOLORDLG'; 486 | CN_CTLCOLOREDIT: Result := 'CN_CTLCOLOREDIT'; 487 | CN_CTLCOLORLISTBOX: Result := 'CN_CTLCOLORLISTBOX'; 488 | CN_CTLCOLORMSGBOX: Result := 'CN_CTLCOLORMSGBOX'; 489 | CN_CTLCOLORSCROLLBAR: Result := 'CN_CTLCOLORSCROLLBAR'; 490 | CN_CTLCOLORSTATIC: Result := 'CN_CTLCOLORSTATIC'; 491 | CN_DELETEITEM: Result := 'CN_DELETEITEM'; 492 | CN_DRAWITEM: Result := 'CN_DRAWITEM'; 493 | CN_HSCROLL: Result := 'CN_HSCROLL'; 494 | CN_MEASUREITEM: Result := 'CN_MEASUREITEM'; 495 | CN_PARENTNOTIFY: Result := 'CN_PARENTNOTIFY'; 496 | CN_VKEYTOITEM: Result := 'CN_VKEYTOITEM'; 497 | CN_VSCROLL: Result := 'CN_VSCROLL'; 498 | CN_KEYDOWN: Result := 'CN_KEYDOWN'; 499 | CN_KEYUP: Result := 'CN_KEYUP'; 500 | CN_CHAR: Result := 'CN_CHAR'; 501 | CN_SYSKEYDOWN: Result := 'CN_SYSKEYDOWN'; 502 | CN_SYSCHAR: Result := 'CN_SYSCHAR'; 503 | CN_NOTIFY: Result := 'CN_NOTIFY'; 504 | else 505 | Result := ToHex(Msg); 506 | end; 507 | end; 508 | 509 | function IsControlNtf(Msg: UINT): Boolean; 510 | begin 511 | Result := Msg >= CN_BASE; 512 | end; 513 | 514 | function IsControlMsg(Msg: UINT): Boolean; 515 | begin 516 | Result := Msg >= CM_BASE; 517 | end; 518 | 519 | function IsKeyMsg(Msg: UINT): Boolean; 520 | begin 521 | Result := (Msg >= WM_KEYFIRST) 522 | and (Msg <= WM_KEYLAST); 523 | end; 524 | 525 | function IsMouseMsg(Msg: UINT): Boolean; 526 | begin 527 | Result := (Msg >= WM_MOUSEFIRST) 528 | and (Msg <= WM_MOUSELAST); 529 | end; 530 | 531 | function IsInputMsg(Msg: UINT): Boolean; 532 | begin 533 | Result := IsMouseMsg(Msg) or IsKeyMsg(Msg); 534 | end; 535 | 536 | function IsPaintMsg(Msg: UINT): Boolean; 537 | begin 538 | case Msg of 539 | WM_PAINT, WM_NCPAINT: 540 | Result := True; 541 | else 542 | Result := False; 543 | end; 544 | end; 545 | 546 | function IsUserMsg(Msg: UINT): Boolean; 547 | begin 548 | Result := Msg >= WM_USER; 549 | // and Msg < CM_BASE? 550 | end; 551 | 552 | function MsgType(Msg: UINT): string; 553 | begin 554 | if IsKeyMsg(Msg) then 555 | Result := 'Key message' 556 | else if IsMouseMsg(Msg) then 557 | Result := 'Mouse message' 558 | else if IsControlNtf(Msg) then 559 | Result := 'Control notification' 560 | else if IsControlMsg(Msg) then 561 | Result := 'Control message' 562 | else if IsUserMsg(Msg) then 563 | Result := 'User message' 564 | else 565 | Result := 'Window message'; 566 | end; 567 | 568 | function DescribeHandle(const Handle: HWND): string; 569 | var 570 | C: TComponent; 571 | begin 572 | C := FindControl(Handle); 573 | if Assigned(C) then 574 | begin 575 | Result := C.Name; 576 | while Assigned(C.Owner) do 577 | begin 578 | C := C.Owner; 579 | if C.Name <> '' then 580 | Result := C.Name + '.' + Result; 581 | end; 582 | end else 583 | Result := ToHex(Handle); 584 | end; 585 | 586 | function DescribeActivateApp(const Message: TWMActivateApp): string; 587 | begin 588 | if Message.Active then 589 | Result := 'Activate (switch from ThreadId: %s)' 590 | else 591 | Result := 'Deactivate (switch to ThreadId: %s)'; 592 | Result := Format(Result, [ToHex(Message.ThreadId)]); 593 | end; 594 | 595 | function DescribeNCHitMessage(const Message: TWMNCHitMessage): string; 596 | var 597 | HitTest: Integer; 598 | begin 599 | Result := ''; 600 | case Message.Msg of 601 | WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, WM_NCXBUTTONDBLCLK: 602 | begin 603 | if TMessage(Message).WParam and XBUTTON1 <> 0 then 604 | Result := 'X1'; 605 | if TMessage(Message).WParam and XBUTTON2 <> 0 then 606 | Result := Append(Result, ',', 'X2'); 607 | HitTest := TMessage(Message).WParamLo; 608 | end; 609 | else 610 | HitTest := Message.HitTest; 611 | case Message.Msg of 612 | WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, WM_NCLBUTTONDBLCLK: 613 | Result := 'L'; 614 | WM_NCRBUTTONDOWN, WM_NCRBUTTONUP, WM_NCRBUTTONDBLCLK: 615 | Result := 'R'; 616 | WM_NCMBUTTONDOWN, WM_NCMBUTTONUP, WM_NCMBUTTONDBLCLK: 617 | Result := 'M'; 618 | end; 619 | end; 620 | if Result <> '' then 621 | Result := '[' + Result + ']'; 622 | Result := Append(Result, ' ', HTToString(HitTest)); 623 | Result := Append(Result, ' ', Format('[%d,%d]', [Message.XCursor, Message.YCursor])); 624 | end; 625 | 626 | function DescribeSyscommand(const Message: TWMSysCommand): string; 627 | begin 628 | case Message.CmdType of 629 | SC_HOTKEY: 630 | Result := ' ActivateWnd: ' + DescribeHandle(Message.ActivateWnd); 631 | SC_KEYMENU: 632 | Result := ' Key: ' + ToHex(Message.Key); 633 | SC_CLOSE, SC_HSCROLL, SC_MAXIMIZE, SC_MINIMIZE, SC_MOUSEMENU, SC_MOVE, 634 | SC_NEXTWINDOW, SC_PREVWINDOW, SC_RESTORE, SC_SCREENSAVE, SC_SIZE, 635 | SC_TASKLIST, SC_VSCROLL: 636 | Result := Format(' X,Y: %d,%d', [Message.XPos, Message.YPos]); 637 | else 638 | Result := ''; 639 | end; 640 | 641 | Result := SCToString(Message.CmdType) + Result; 642 | end; 643 | 644 | function DescribeKeyMessage(const Message: TWMKey): string; 645 | begin 646 | case Message.Msg of 647 | WM_CHAR: 648 | Result := Char(Message.CharCode) 649 | else 650 | Result := ShortCutToText(ShortCutFromMessage(Message)); 651 | end; 652 | end; 653 | 654 | function DescribeMouseMessage(const Message: TWMMouse): string; 655 | var 656 | Keys: Integer; 657 | WheelDelta: Integer; 658 | Shift: TShiftState; 659 | I: Byte absolute Shift; 660 | sKeys: string; 661 | sAdd: string; 662 | begin 663 | sKeys := ''; 664 | sAdd := ''; 665 | case Message.Msg of 666 | WM_MOUSEWHEEL: 667 | begin 668 | Keys := TWMMouseWheel(Message).Keys; 669 | if Keys and MK_XBUTTON1 <> 0 then 670 | sKeys := Append(sKeys, ',', 'X1'); 671 | if Keys and MK_XBUTTON2 <> 0 then 672 | sKeys := Append(sKeys, ',', 'X2'); 673 | WheelDelta := TWMMouseWheel(Message).WheelDelta; 674 | end; 675 | WM_MOUSEHWHEEL: 676 | begin 677 | Keys := 0; 678 | WheelDelta := TMSHMouseWheel(Message).WheelDelta; 679 | end; 680 | else 681 | Keys := Message.Keys; 682 | if Keys and XBUTTON1 <> 0 then 683 | sKeys := Append(sKeys, ',', 'X1'); 684 | if Keys and XBUTTON2 <> 0 then 685 | sKeys := Append(sKeys, ',', 'X2'); 686 | WheelDelta := 0; 687 | end; 688 | 689 | Shift := KeysToShiftState(Keys) + MouseOriginToShiftState; 690 | if Shift <> [] then 691 | sKeys := Append(sKeys, ', ', SetToString(PTypeInfo(TypeInfo(TShiftState)), I)); 692 | if sKeys <> '' then 693 | sKeys := '[' + sKeys + '] '; 694 | if WheelDelta <> 0 then 695 | sAdd := Format('WD: %d ', [WheelDelta]); 696 | 697 | Result := Format('%s%s[%d,%d]', [sKeys, sAdd, Message.XPos, Message.YPos]); 698 | end; 699 | 700 | { TMessageHelper } 701 | 702 | function TMessageHelper.ToString: string; 703 | begin 704 | case Msg of 705 | WM_ENABLE: 706 | Result := BoolToStr(TWMEnable(Self).Enabled, True); 707 | WM_SYSCOMMAND: 708 | Result := DescribeSyscommand(TWMSysCommand(Self)); 709 | WM_ACTIVATEAPP: 710 | Result := DescribeActivateApp(TWMActivateApp(Self)); 711 | WM_NCMOUSEMOVE, 712 | WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, WM_NCLBUTTONDBLCLK, 713 | WM_NCRBUTTONDOWN, WM_NCRBUTTONUP, WM_NCRBUTTONDBLCLK, 714 | WM_NCMBUTTONDOWN, WM_NCMBUTTONUP, WM_NCMBUTTONDBLCLK, 715 | WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, WM_NCXBUTTONDBLCLK: 716 | Result := DescribeNCHitMessage(TWMNCHitMessage(Self)); 717 | CM_APPKEYDOWN, 718 | WM_KEYFIRST .. WM_KEYLAST: 719 | Result := DescribeKeyMessage(TWMKey(Self)); 720 | WM_MOUSEFIRST .. WM_MOUSELAST: 721 | Result := DescribeMouseMessage(TWMMouse(Self)); 722 | else 723 | if WParam = 0 then 724 | Result := '' 725 | else 726 | Result := Format('WParam: %d', [WParam]); 727 | if LParam <> 0 then 728 | Result := Append(Result, ', ', Format('LParam: %d', [LParam])); 729 | end; 730 | 731 | //Result := Format('%s %s %s, Result: %d', [MsgType(Msg), MsgToString(Msg), Result, Self.Result]); 732 | Result := Append(MsgToString(Msg), ': ', Result); 733 | end; 734 | 735 | { TMsgHelper } 736 | 737 | function TMsgHelper.ToString: string; 738 | var 739 | M: TMessage; 740 | begin 741 | M.Msg := Self.message; 742 | M.WParam := Self.wParam; 743 | M.LParam := Self.lParam; 744 | M.Result := 0; 745 | 746 | Result := M.ToString + ' Target: ' + DescribeHandle(hwnd); 747 | end; 748 | 749 | end. 750 | -------------------------------------------------------------------------------- /ObjInspFntChngr/dnObjInspFntChngr.dpk: -------------------------------------------------------------------------------- 1 | package dnObjInspFntChngr; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'delphinotes.ru - Object Inspector Font Changer'} 29 | {$DESIGNONLY} 30 | {$IMPLICITBUILD ON} 31 | 32 | requires 33 | rtl, 34 | vcl; 35 | 36 | contains 37 | uObjInspFntChngr in 'uObjInspFntChngr.pas'; 38 | 39 | end. 40 | -------------------------------------------------------------------------------- /ObjInspFntChngr/dnObjInspFntChngr.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {78E2E6B7-F1DE-4EAF-B03C-FE54A05F5149} 4 | dnObjInspFntChngr.dpk 5 | True 6 | Release 7 | 1 8 | Package 9 | VCL 10 | 16.0 11 | Win32 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 | Base 34 | true 35 | 36 | 37 | dcu 38 | false 39 | true 40 | dnObjInspFntChngr 41 | 1049 42 | false 43 | false 44 | false 45 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= 46 | true 47 | true 48 | delphinotes.ru - Object Inspector Font Changer 49 | 00400000 50 | Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 51 | false 52 | 53 | 54 | rtl;$(DCC_UsePackage) 55 | 56 | 57 | rtl;vcl;$(DCC_UsePackage) 58 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 59 | 1033 60 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 61 | true 62 | 63 | 64 | false 65 | 0 66 | RELEASE;$(DCC_Define) 67 | 0 68 | 69 | 70 | true 71 | false 72 | DEBUG;$(DCC_Define) 73 | 74 | 75 | 76 | MainSource 77 | 78 | 79 | 80 | 81 | 82 | Cfg_2 83 | Base 84 | 85 | 86 | Base 87 | 88 | 89 | Cfg_1 90 | Base 91 | 92 | 93 | 94 | Delphi.Personality.12 95 | Package 96 | 97 | 98 | 99 | dnObjInspFntChngr.dpk 100 | 101 | 102 | Microsoft Office 2000 Sample Automation Server Wrapper Components 103 | Microsoft Office XP Sample Automation Server Wrapper Components 104 | 105 | 106 | 107 | False 108 | True 109 | 110 | 111 | 12 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /ObjInspFntChngr/dnObjInspFntChngr.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/delphinotes/Useful/91a02737be632c6770b20b36eac693f2b035e59c/ObjInspFntChngr/dnObjInspFntChngr.res -------------------------------------------------------------------------------- /ObjInspFntChngr/uObjInspFntChngr.pas: -------------------------------------------------------------------------------- 1 | unit uObjInspFntChngr; 2 | 3 | interface 4 | 5 | procedure Register; 6 | 7 | implementation 8 | 9 | uses 10 | SysUtils, Graphics, Forms; 11 | 12 | var 13 | FSavedFont: TFont; 14 | 15 | const 16 | PreferParentFont = True; 17 | PreferFontName = 'Tahoma'; 18 | PreferFontSize = 8; 19 | 20 | function FindObjectInspecotr: TCustomForm; 21 | var 22 | I: Integer; 23 | begin 24 | for I := 0 to Screen.CustomFormCount - 1 do 25 | if Screen.CustomForms[I].Name = 'PropertyInspector' then 26 | begin 27 | Result := Screen.CustomForms[I]; 28 | Exit; 29 | end; 30 | Result := nil; 31 | end; 32 | 33 | procedure Register; 34 | var 35 | F: TCustomForm; 36 | begin 37 | F := FindObjectInspecotr; 38 | if Assigned(F) then 39 | begin 40 | FSavedFont := TFont.Create; 41 | FSavedFont.Assign(F.Font); 42 | 43 | if not PreferParentFont then 44 | begin 45 | F.Font.Name := PreferFontName; 46 | F.Font.Size := PreferFontSize; 47 | end else 48 | TForm(F).ParentFont := True; 49 | end; 50 | end; 51 | 52 | procedure Unregister; 53 | var 54 | F: TCustomForm; 55 | begin 56 | if Assigned(FSavedFont) then 57 | begin 58 | F := FindObjectInspecotr; 59 | if Assigned(F) then 60 | F.Font.Assign(FSavedFont); 61 | end; 62 | 63 | FreeAndNil(FSavedFont); 64 | end; 65 | 66 | initialization 67 | FSavedFont := nil; 68 | 69 | finalization 70 | Unregister; 71 | 72 | end. 73 | -------------------------------------------------------------------------------- /RADAntiFlick/RADAntiFlick.dpk: -------------------------------------------------------------------------------- 1 | package RADAntiFlick; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS ON} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION OFF} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO ON} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES ON} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE DEBUG} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$IMPLICITBUILD ON} 29 | 30 | requires 31 | vcl, 32 | designide; 33 | 34 | contains 35 | uA in 'uA.pas'; 36 | 37 | end. 38 | -------------------------------------------------------------------------------- /RADAntiFlick/RADAntiFlick.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {D8588BFE-8EF2-4D97-856A-6C555A997390} 4 | RADAntiFlick.dpk 5 | 16.1 6 | None 7 | True 8 | Release 9 | Win32 10 | 1 11 | Package 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 | All 44 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 45 | true 46 | true 47 | RADAntiFlick 48 | .\$(Platform)\$(Config) 49 | .\$(Platform)\$(Config) 50 | false 51 | false 52 | false 53 | false 54 | false 55 | 56 | 57 | vcl;$(DCC_UsePackage) 58 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 59 | 1033 60 | true 61 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 62 | 63 | 64 | vcl;$(DCC_UsePackage) 65 | 66 | 67 | DEBUG;$(DCC_Define) 68 | true 69 | false 70 | true 71 | true 72 | true 73 | 74 | 75 | false 76 | 77 | 78 | false 79 | RELEASE;$(DCC_Define) 80 | 0 81 | 0 82 | 83 | 84 | 85 | MainSource 86 | 87 | 88 | 89 | 90 | 91 | Cfg_2 92 | Base 93 | 94 | 95 | Base 96 | 97 | 98 | Cfg_1 99 | Base 100 | 101 | 102 | 103 | Delphi.Personality.12 104 | Package 105 | 106 | 107 | 108 | RADAntiFlick.dpk 109 | 110 | 111 | 112 | 113 | 114 | RADAntiFlick.bpl 115 | true 116 | 117 | 118 | 119 | 120 | true 121 | 122 | 123 | true 124 | 125 | 126 | 127 | 128 | 1 129 | .dylib 130 | 131 | 132 | 0 133 | .bpl 134 | 135 | 136 | 1 137 | .dylib 138 | 139 | 140 | 1 141 | .dylib 142 | 143 | 144 | 145 | 146 | 1 147 | .dylib 148 | 149 | 150 | 0 151 | .dll;.bpl 152 | 153 | 154 | 155 | 156 | 1 157 | 158 | 159 | 1 160 | 161 | 162 | 163 | 164 | 165 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 166 | 1 167 | 168 | 169 | 170 | 171 | res\drawable-normal 172 | 1 173 | 174 | 175 | 176 | 177 | library\lib\x86 178 | 1 179 | 180 | 181 | 182 | 183 | 1 184 | 185 | 186 | 1 187 | 188 | 189 | 190 | 191 | 192 | library\lib\armeabi-v7a 193 | 1 194 | 195 | 196 | 197 | 198 | 1 199 | 200 | 201 | 1 202 | 203 | 204 | 205 | 206 | res\drawable-xlarge 207 | 1 208 | 209 | 210 | 211 | 212 | res\drawable-xhdpi 213 | 1 214 | 215 | 216 | 217 | 218 | 1 219 | 220 | 221 | 1 222 | 223 | 224 | 225 | 226 | res\drawable-xxhdpi 227 | 1 228 | 229 | 230 | 231 | 232 | library\lib\mips 233 | 1 234 | 235 | 236 | 237 | 238 | res\drawable 239 | 1 240 | 241 | 242 | 243 | 244 | 1 245 | 246 | 247 | 1 248 | 249 | 250 | 0 251 | 252 | 253 | 254 | 255 | 1 256 | .framework 257 | 258 | 259 | 0 260 | 261 | 262 | 263 | 264 | res\drawable-small 265 | 1 266 | 267 | 268 | 269 | 270 | 271 | 1 272 | 273 | 274 | Contents\MacOS 275 | 0 276 | 277 | 278 | 279 | 280 | classes 281 | 1 282 | 283 | 284 | 285 | 286 | 287 | 1 288 | 289 | 290 | 1 291 | 292 | 293 | 294 | 295 | res\drawable 296 | 1 297 | 298 | 299 | 300 | 301 | Contents\Resources 302 | 1 303 | 304 | 305 | 306 | 307 | 308 | 1 309 | 310 | 311 | 1 312 | 313 | 314 | 315 | 316 | 1 317 | 318 | 319 | library\lib\armeabi-v7a 320 | 1 321 | 322 | 323 | 0 324 | 325 | 326 | 1 327 | 328 | 329 | 1 330 | 331 | 332 | 333 | 334 | library\lib\armeabi 335 | 1 336 | 337 | 338 | 339 | 340 | res\drawable-large 341 | 1 342 | 343 | 344 | 345 | 346 | 0 347 | 348 | 349 | 0 350 | 351 | 352 | 0 353 | 354 | 355 | 0 356 | 357 | 358 | 0 359 | 360 | 361 | 362 | 363 | 1 364 | 365 | 366 | 1 367 | 368 | 369 | 370 | 371 | res\drawable-ldpi 372 | 1 373 | 374 | 375 | 376 | 377 | res\values 378 | 1 379 | 380 | 381 | 382 | 383 | 1 384 | 385 | 386 | 1 387 | 388 | 389 | 390 | 391 | res\drawable-mdpi 392 | 1 393 | 394 | 395 | 396 | 397 | res\drawable-hdpi 398 | 1 399 | 400 | 401 | 402 | 403 | 1 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | True 415 | False 416 | 417 | 418 | 12 419 | 420 | 421 | 422 | 423 | 424 | -------------------------------------------------------------------------------- /RADAntiFlick/RADAntiFlick.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/delphinotes/Useful/91a02737be632c6770b20b36eac693f2b035e59c/RADAntiFlick/RADAntiFlick.res -------------------------------------------------------------------------------- /RADAntiFlick/uA.pas: -------------------------------------------------------------------------------- 1 | unit uA; 2 | 3 | interface 4 | 5 | procedure Register; 6 | 7 | implementation 8 | 9 | uses 10 | // dbg, 11 | Winapi.Windows, 12 | Winapi.Messages, 13 | Winapi.CommCtrl, 14 | Vcl.Forms, 15 | ToolsAPI; 16 | 17 | type 18 | TRADAntiFlick = class(TNotifierObject, IOTAWizard) 19 | const 20 | SAppBuilder = 'AppBuilder'; 21 | SIDString = 'DelphiNotes.RAD.AntiFlick'; 22 | SName = 'RAD AntiFlick'; 23 | private 24 | FMainWndHwnd: HWND; 25 | procedure HookMainWindow; 26 | procedure UnhookMainWindow; 27 | public 28 | constructor Create; 29 | destructor Destroy; override; 30 | 31 | {$region 'IOTAWizard'} 32 | function GetIDString: string; 33 | function GetName: string; 34 | function GetState: TWizardState; 35 | procedure Execute; 36 | {$endregion} 37 | end; 38 | 39 | procedure Register; 40 | begin 41 | RegisterPackageWizard(TRADAntiFlick.Create); 42 | end; 43 | 44 | function SubClassProc(AHandle: HWND; AMessage: UINT; AWParam: WPARAM; ALParam: LPARAM; AIdSubclass: UINT_PTR; ARefData: DWORD_PTR): LRESULT; stdcall; 45 | begin 46 | case AMessage of 47 | WM_WINDOWPOSCHANGED: 48 | if IsIconic(AHandle) then 49 | begin 50 | // dbgStr('Catched!'); 51 | Result := 1; 52 | Exit; 53 | end; 54 | WM_DESTROY: 55 | TRADAntiFlick(ARefData).UnhookMainWindow; 56 | end; 57 | Result := DefSubclassProc(AHandle, AMessage, AWParam, ALParam); 58 | end; 59 | 60 | { TRADAntiFlick } 61 | 62 | constructor TRADAntiFlick.Create; 63 | var 64 | i: Integer; 65 | ICC: TInitCommonControlsEx; 66 | begin 67 | inherited; 68 | 69 | i := SizeOf(TInitCommonControlsEx); 70 | ZeroMemory(@ICC, i); 71 | ICC.dwSize := i; 72 | ICC.dwICC := 0; 73 | InitCommonControlsEx(ICC); 74 | 75 | HookMainWindow; 76 | end; 77 | 78 | destructor TRADAntiFlick.Destroy; 79 | begin 80 | UnhookMainWindow; 81 | inherited; 82 | end; 83 | 84 | procedure TRADAntiFlick.HookMainWindow; 85 | var 86 | i: Integer; 87 | begin 88 | FMainWndHwnd := 0; 89 | 90 | for i := 0 to Screen.FormCount - 1 do 91 | if Screen.Forms[i].Name = SAppBuilder then 92 | begin 93 | FMainWndHwnd := Screen.Forms[i].Handle; 94 | Break; 95 | end; 96 | 97 | if FMainWndHwnd > 0 then 98 | SetWindowSubclass(FMainWndHwnd, SubClassProc, 1, NativeUInt(Self)); 99 | end; 100 | 101 | procedure TRADAntiFlick.UnhookMainWindow; 102 | begin 103 | if FMainWndHwnd > 0 then 104 | RemoveWindowSubclass(FMainWndHwnd, SubClassProc, 1); 105 | FMainWndHwnd := 0; 106 | end; 107 | 108 | {$region 'IOTAWizard'} 109 | function TRADAntiFlick.GetIDString: string; 110 | begin 111 | Result := SIDString; 112 | end; 113 | 114 | function TRADAntiFlick.GetName: string; 115 | begin 116 | Result := SName; 117 | end; 118 | 119 | function TRADAntiFlick.GetState: TWizardState; 120 | begin 121 | Result := [wsEnabled]; 122 | end; 123 | 124 | procedure TRADAntiFlick.Execute; 125 | begin 126 | end; 127 | {$endregion} 128 | 129 | end. 130 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Usefuls 2 | ======= 3 | 4 | Some useful things 5 | -------------------------------------------------------------------------------- /VTVDisableAutoScroll/dnVTVDisableAutoScroll.dpk: -------------------------------------------------------------------------------- 1 | package dnVTVDisableAutoScroll; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'Disable Auto Scroll on all VTV controlls in IDE Delphi'} 29 | {$LIBSUFFIX '210'} 30 | {$DESIGNONLY} 31 | {$IMPLICITBUILD ON} 32 | 33 | requires 34 | vcl; 35 | 36 | contains 37 | uVTVDisableAutoScroll in 'uVTVDisableAutoScroll.pas'; 38 | 39 | end. 40 | -------------------------------------------------------------------------------- /VTVDisableAutoScroll/dnVTVDisableAutoScroll.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {AE88A480-6296-465D-8F61-4968B0F3228F} 4 | dnVTVDisableAutoScroll.dpk 5 | 16.0 6 | None 7 | True 8 | Release 9 | Win32 10 | 1 11 | Package 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 | true 50 | true 51 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 52 | true 53 | dnVTVDisableAutoScroll 54 | All 55 | .\$(Platform)\$(Config) 56 | .\$(Platform)\$(Config) 57 | false 58 | false 59 | false 60 | false 61 | false 62 | 63 | 64 | None 65 | 66 | 67 | 1033 68 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 69 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 70 | vcl;$(DCC_UsePackage) 71 | true 72 | 73 | 74 | DEBUG;$(DCC_Define) 75 | true 76 | false 77 | true 78 | true 79 | true 80 | 81 | 82 | false 83 | 84 | 85 | false 86 | RELEASE;$(DCC_Define) 87 | 0 88 | 0 89 | 90 | 91 | 210 92 | 1033 93 | true 94 | Disable Auto Scroll on all VTV controlls in IDE Delphi 95 | 96 | 97 | 98 | MainSource 99 | 100 | 101 | 102 | 103 | Cfg_2 104 | Base 105 | 106 | 107 | Base 108 | 109 | 110 | Cfg_1 111 | Base 112 | 113 | 114 | 115 | Delphi.Personality.12 116 | Package 117 | 118 | 119 | 120 | dnVTVDisableAutoScroll.dpk 121 | 122 | 123 | Microsoft Office 2000 Sample Automation Server Wrapper Components 124 | Microsoft Office XP Sample Automation Server Wrapper Components 125 | 126 | 127 | 128 | 129 | 130 | dnVTVDisableAutoScroll.bpl 131 | true 132 | 133 | 134 | 135 | 136 | true 137 | 138 | 139 | true 140 | 141 | 142 | 143 | 144 | dnVTVDisableAutoScroll.bpl 145 | true 146 | 147 | 148 | 149 | 150 | 1 151 | .dylib 152 | 153 | 154 | 0 155 | .bpl 156 | 157 | 158 | 1 159 | .dylib 160 | 161 | 162 | 1 163 | .dylib 164 | 165 | 166 | 167 | 168 | 1 169 | .dylib 170 | 171 | 172 | 0 173 | .dll;.bpl 174 | 175 | 176 | 177 | 178 | 1 179 | 180 | 181 | 1 182 | 183 | 184 | 185 | 186 | 187 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 188 | 1 189 | 190 | 191 | 192 | 193 | res\drawable-normal 194 | 1 195 | 196 | 197 | 198 | 199 | library\lib\x86 200 | 1 201 | 202 | 203 | 204 | 205 | 1 206 | 207 | 208 | 1 209 | 210 | 211 | 212 | 213 | 214 | library\lib\armeabi-v7a 215 | 1 216 | 217 | 218 | 219 | 220 | 1 221 | 222 | 223 | 1 224 | 225 | 226 | 227 | 228 | res\drawable-xlarge 229 | 1 230 | 231 | 232 | 233 | 234 | res\drawable-xhdpi 235 | 1 236 | 237 | 238 | 239 | 240 | 1 241 | 242 | 243 | 1 244 | 245 | 246 | 247 | 248 | res\drawable-xxhdpi 249 | 1 250 | 251 | 252 | 253 | 254 | library\lib\mips 255 | 1 256 | 257 | 258 | 259 | 260 | res\drawable 261 | 1 262 | 263 | 264 | 265 | 266 | 1 267 | 268 | 269 | 1 270 | 271 | 272 | 0 273 | 274 | 275 | 276 | 277 | 1 278 | .framework 279 | 280 | 281 | 0 282 | 283 | 284 | 285 | 286 | res\drawable-small 287 | 1 288 | 289 | 290 | 291 | 292 | 293 | 1 294 | 295 | 296 | Contents\MacOS 297 | 0 298 | 299 | 300 | 301 | 302 | classes 303 | 1 304 | 305 | 306 | 307 | 308 | 309 | 1 310 | 311 | 312 | 1 313 | 314 | 315 | 316 | 317 | res\drawable 318 | 1 319 | 320 | 321 | 322 | 323 | Contents\Resources 324 | 1 325 | 326 | 327 | 328 | 329 | 330 | 1 331 | 332 | 333 | 1 334 | 335 | 336 | 337 | 338 | 1 339 | 340 | 341 | library\lib\armeabi-v7a 342 | 1 343 | 344 | 345 | 0 346 | 347 | 348 | 1 349 | 350 | 351 | 1 352 | 353 | 354 | 355 | 356 | library\lib\armeabi 357 | 1 358 | 359 | 360 | 361 | 362 | res\drawable-large 363 | 1 364 | 365 | 366 | 367 | 368 | 0 369 | 370 | 371 | 0 372 | 373 | 374 | 0 375 | 376 | 377 | 0 378 | 379 | 380 | 0 381 | 382 | 383 | 384 | 385 | 1 386 | 387 | 388 | 1 389 | 390 | 391 | 392 | 393 | res\drawable-ldpi 394 | 1 395 | 396 | 397 | 398 | 399 | res\values 400 | 1 401 | 402 | 403 | 404 | 405 | 1 406 | 407 | 408 | 1 409 | 410 | 411 | 412 | 413 | res\drawable-mdpi 414 | 1 415 | 416 | 417 | 418 | 419 | res\drawable-hdpi 420 | 1 421 | 422 | 423 | 424 | 425 | 1 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | False 437 | True 438 | 439 | 440 | 12 441 | 442 | 443 | 444 | 445 | 446 | -------------------------------------------------------------------------------- /VTVDisableAutoScroll/dnVTVDisableAutoScroll.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/delphinotes/Useful/91a02737be632c6770b20b36eac693f2b035e59c/VTVDisableAutoScroll/dnVTVDisableAutoScroll.res -------------------------------------------------------------------------------- /VTVDisableAutoScroll/uVTVDisableAutoScroll.pas: -------------------------------------------------------------------------------- 1 | unit uVTVDisableAutoScroll; 2 | 3 | interface 4 | 5 | procedure Register; 6 | 7 | implementation 8 | 9 | uses 10 | System.TypInfo, VCL.Controls, VCL.Forms; 11 | 12 | const 13 | AllowResetFonts = True; 14 | 15 | function Append(const Left, Delim, Right: string): string; 16 | begin 17 | if Left = '' then 18 | Result := Right 19 | else if Right = '' then 20 | Result := Left 21 | else 22 | Result := Left + Delim + Right; 23 | end; 24 | 25 | function IncludeS(var SetValue: string; const EnumValue: string): Boolean; 26 | begin 27 | Result := Pos(EnumValue, SetValue) = 0; 28 | if Result then 29 | SetValue := Append(SetValue, ',', EnumValue); 30 | end; 31 | 32 | procedure PatchVST(Control: TControl); 33 | const 34 | STreeOptions = 'TreeOptions'; 35 | SAutoOptions = 'AutoOptions'; 36 | SDisableAutoscrollOnFocus = 'toDisableAutoscrollOnFocus'; 37 | var 38 | o: TObject; 39 | s: string; 40 | begin 41 | // simulate Control.TreeOptions.AutoOptions := Control.TreeOptions.AutoOptions + [toDisableAutoscrollOnFocus]; 42 | o := GetObjectProp(Control, STreeOptions); 43 | s := GetSetProp(o, SAutoOptions); 44 | if IncludeS(s, SDisableAutoscrollOnFocus) then 45 | SetSetProp(o, SAutoOptions, s); 46 | end; 47 | 48 | procedure Register; 49 | var 50 | F: TForm; 51 | C: TControl; 52 | I: Integer; 53 | J: Integer; 54 | begin 55 | for I := 0 to Screen.CustomFormCount - 1 do 56 | begin 57 | F := TForm(Screen.CustomForms[I]); 58 | if AllowResetFonts then 59 | F.ParentFont := True; 60 | 61 | for J := 0 to F.ControlCount - 1 do 62 | begin 63 | C := F.Controls[J]; 64 | if AllowResetFonts then 65 | TForm(C).ParentFont := True; 66 | if C.ClassNameIs('TVirtualStringTree') or C.ClassNameIs('TRefactoringTree') then 67 | PatchVST(Screen.CustomForms[I].Controls[J]); 68 | end; 69 | end; 70 | end; 71 | 72 | end. 73 | --------------------------------------------------------------------------------