├── .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 |
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 |
--------------------------------------------------------------------------------