├── AndroidManifest.template.xml
├── DemoDesktop
├── DemoDesktop.deployproj
├── DemoDesktop.dpr
├── DemoDesktop.dproj
├── DemoDesktop.res
├── Entitlement.TemplateOSX32.xml
├── ObjectDebuggerFMXForm.fmx
├── ObjectDebuggerFMXForm.pas
├── Project1.res
├── Unit5.fmx
└── Unit5.pas
├── DemoMobile
├── AndroidManifest.template.xml
├── Demo.res
├── DemoMobile.deployproj
├── DemoMobile.dpr
├── DemoMobile.dproj
├── DemoMobile.res
├── Entitlement.TemplateOSX32.xml
├── Entitlement.TemplateiOS.xml
├── Unit3.fmx
└── Unit3.pas
├── Entitlement.TemplateOSX32.xml
├── Entitlement.TemplateiOS.xml
├── FormMessage.fmx
├── FormMessage.pas
├── LICENSE
├── ObjectDebuggerFMX.dpk
├── ObjectDebuggerFMX.dproj
├── ObjectDebuggerFMX.res
├── ObjectDebuggerFMXFrame.fmx
├── ObjectDebuggerFMXFrame.pas
├── ProjectGroupComponent.groupproj
├── README.md
├── README.txt
└── Test
├── ObjectDebuggerFMXTest.deployproj
├── ObjectDebuggerFMXTest.dpr
├── ObjectDebuggerFMXTest.dproj
├── ObjectDebuggerFMXTest.res
├── Unit1.fmx
├── Unit1.pas
├── Unit2.fmx
└── Unit2.pas
/AndroidManifest.template.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | <%uses-permission%>
12 |
13 |
21 |
22 | <%application-meta-data%>
23 | <%services%>
24 |
26 |
30 |
31 |
33 |
34 |
35 |
36 |
37 |
38 | <%activity%>
39 | <%receivers%>
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/DemoDesktop/DemoDesktop.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 |
9 |
10 |
11 | DemoDesktop\
12 | DemoDesktop.exe
13 | ProjectOutput
14 | 0
15 |
16 |
17 | True
18 | True
19 |
20 |
21 |
22 |
23 | DemoDesktop.app\../\
24 | DemoDesktop.entitlements
25 | ProjectOSXEntitlements
26 | 1
27 |
28 |
29 | True
30 |
31 |
32 | DemoDesktop.app\Contents\MacOS\
33 | libcgunwind.1.0.dylib
34 | DependencyModule
35 | 1
36 |
37 |
38 | True
39 |
40 |
41 | DemoDesktop.app\Contents\MacOS\
42 | DemoDesktop
43 | ProjectOutput
44 | 1
45 |
46 |
47 | True
48 | True
49 |
50 |
51 | DemoDesktop.app\Contents\MacOS\
52 | DemoDesktop.rsm
53 | DebugSymbols
54 | 1
55 |
56 |
57 | True
58 |
59 |
60 | DemoDesktop.app\Contents\Resources\
61 | DemoDesktop.icns
62 | ProjectOSXResource
63 | 1
64 |
65 |
66 | True
67 |
68 |
69 | DemoDesktop.app\Contents\
70 | Info.plist
71 | ProjectOSXInfoPList
72 | 1
73 |
74 |
75 | True
76 |
77 |
78 |
79 |
80 |
81 | DemoDesktop.app\
82 | libPCRE.dylib
83 | DependencyModule
84 | 1
85 |
86 |
87 | True
88 |
89 |
90 | DemoDesktop.app\
91 | libcgunwind.1.0.dylib
92 | DependencyModule
93 | 1
94 |
95 |
96 | True
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/DemoDesktop/DemoDesktop.dpr:
--------------------------------------------------------------------------------
1 | program DemoDesktop;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | ObjectDebuggerFMXFrame in '..\ObjectDebuggerFMXFrame.pas' {FMXObjectDebuggerFrame: TFrame} ,
7 | FormMessage in '..\FormMessage.pas' {MessageForm} ,
8 | Unit5 in 'Unit5.pas' {Form5} ,
9 | ObjectDebuggerFMXForm in 'ObjectDebuggerFMXForm.pas' {ObjectDebuggerFMXForm};
10 |
11 | {$R *.res}
12 |
13 |
14 | begin
15 | Application.Initialize;
16 | Application.CreateForm(TForm5, Form5);
17 | Application.CreateForm(TMessageForm, MessageForm);
18 | Application.CreateForm(TObjectDebuggerFMXForm, ObjectDebuggerFMXForm1);
19 | Application.Run;
20 |
21 | end.
22 |
--------------------------------------------------------------------------------
/DemoDesktop/DemoDesktop.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/DemoDesktop/DemoDesktop.res
--------------------------------------------------------------------------------
/DemoDesktop/Entitlement.TemplateOSX32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DemoDesktop/ObjectDebuggerFMXForm.fmx:
--------------------------------------------------------------------------------
1 | object ObjectDebuggerFMXForm: TObjectDebuggerFMXForm
2 | Left = 0
3 | Top = 0
4 | Caption = 'FireMonkey Object Debugger'
5 | ClientHeight = 480
6 | ClientWidth = 350
7 | Position = Designed
8 | FormFactor.Width = 320
9 | FormFactor.Height = 480
10 | FormFactor.Devices = [Desktop]
11 | DesignerMasterStyle = 0
12 | inline TFMXObjectDebuggerFrame1: TFMXObjectDebuggerFrame
13 | Align = MostRight
14 | Size.Width = 350.000000000000000000
15 | Size.Height = 480.000000000000000000
16 | Size.PlatformDefault = False
17 | inherited Panel1: TPanel
18 | Size.Height = 480.000000000000000000
19 | inherited TabControl1: TTabControl
20 | Size.Height = 377.000000000000000000
21 | inherited TabItemProperties: TTabItem
22 | Size.Width = 74.000000000000000000
23 | ExplicitSize.cx = 50.000000000000000000
24 | ExplicitSize.cy = 26.000000000000000000
25 | inherited sgProp: TStringGrid
26 | Size.Height = 351.000000000000000000
27 | Viewport.Width = 298.000000000000000000
28 | Viewport.Height = 326.000000000000000000
29 | inherited StringColumn1: TStringColumn
30 | Size.Height = 336.000000000000000000
31 | end
32 | inherited StringColumn2: TStringColumn
33 | Size.Height = 336.000000000000000000
34 | end
35 | end
36 | end
37 | inherited TabItemEvents: TTabItem
38 | Size.Width = 54.000000000000000000
39 | ExplicitSize.cx = 50.000000000000000000
40 | ExplicitSize.cy = 26.000000000000000000
41 | inherited sgEvt: TStringGrid
42 | Viewport.Width = 314.000000000000000000
43 | Viewport.Height = 486.000000000000000000
44 | end
45 | end
46 | inherited TabItemData: TTabItem
47 | Size.Width = 44.000000000000000000
48 | ExplicitSize.cx = 50.000000000000000000
49 | ExplicitSize.cy = 26.000000000000000000
50 | inherited sgData: TStringGrid
51 | Viewport.Width = 314.000000000000000000
52 | Viewport.Height = 486.000000000000000000
53 | end
54 | end
55 | end
56 | end
57 | end
58 | end
59 |
--------------------------------------------------------------------------------
/DemoDesktop/ObjectDebuggerFMXForm.pas:
--------------------------------------------------------------------------------
1 | unit ObjectDebuggerFMXForm;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
8 | ObjectDebuggerFMXFrame;
9 |
10 | type
11 | TObjectDebuggerFMXForm = class(TForm)
12 | TFMXObjectDebuggerFrame1: TFMXObjectDebuggerFrame;
13 | private
14 | { Private declarations }
15 | public
16 | { Public declarations }
17 | end;
18 |
19 | var
20 | ObjectDebuggerFMXForm1: TObjectDebuggerFMXForm;
21 |
22 | implementation
23 |
24 | {$R *.fmx}
25 |
26 | end.
27 |
--------------------------------------------------------------------------------
/DemoDesktop/Project1.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/DemoDesktop/Project1.res
--------------------------------------------------------------------------------
/DemoDesktop/Unit5.fmx:
--------------------------------------------------------------------------------
1 | object Form5: TForm5
2 | Left = 0
3 | Top = 0
4 | Caption = 'FireMonkey Object Debugger Demo'
5 | ClientHeight = 646
6 | ClientWidth = 556
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | OnShow = FormShow
11 | DesignerMasterStyle = 0
12 | object Edit1: TEdit
13 | Hint = 'Use the inspector to alter the '#39'Text'#39' property.'
14 | Touch.InteractiveGestures = [LongTap, DoubleTap]
15 | Anchors = [akLeft, akTop, akRight]
16 | TabOrder = 1
17 | Position.X = 16.000000000000000000
18 | Position.Y = 205.000000000000000000
19 | Size.Width = 524.000000000000000000
20 | Size.Height = 22.000000000000000000
21 | Size.PlatformDefault = False
22 | ParentShowHint = False
23 | ShowHint = True
24 | end
25 | object ComboBox1: TComboBox
26 | Hint = 'A TComboBox object'
27 | Anchors = [akLeft, akTop, akRight]
28 | Items.Strings = (
29 | 'Item 0'
30 | 'Item 1'
31 | 'Item 2'
32 | 'Item 3'
33 | 'Item 4'
34 | 'Item 5')
35 | ItemIndex = 4
36 | Position.X = 16.000000000000000000
37 | Position.Y = 384.000000000000000000
38 | Size.Width = 524.000000000000000000
39 | Size.Height = 22.000000000000000000
40 | Size.PlatformDefault = False
41 | TabOrder = 2
42 | ParentShowHint = False
43 | ShowHint = True
44 | end
45 | object ListBox1: TListBox
46 | Hint = 'A TListBox object'
47 | Anchors = [akLeft, akTop, akRight]
48 | Position.X = 16.000000000000000000
49 | Position.Y = 240.000000000000000000
50 | Size.Width = 524.000000000000000000
51 | Size.Height = 129.000000000000000000
52 | Size.PlatformDefault = False
53 | TabOrder = 3
54 | DisableFocusEffect = True
55 | Items.Strings = (
56 | 'Item 0'
57 | 'Item 1'
58 | 'Item 2'
59 | 'Item 3')
60 | DefaultItemStyles.ItemStyle = ''
61 | DefaultItemStyles.GroupHeaderStyle = ''
62 | DefaultItemStyles.GroupFooterStyle = ''
63 | ParentShowHint = False
64 | ShowHint = True
65 | Viewport.Width = 520.000000000000000000
66 | Viewport.Height = 125.000000000000000000
67 | end
68 | object Memo1: TMemo
69 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
70 | DataDetectorTypes = []
71 | Lines.Strings = (
72 |
73 | 'You can use object debugger panel (to the right) to do the follo' +
74 | 'wing:'
75 | ''
76 | ' choose the edit field and change its Text property;'
77 | ''
78 | ' change the cursor;'
79 | ''
80 | ' change the position of a control;'
81 | ''
82 |
83 | ' choose the listbox or combobox and add modify its conten' +
84 | 't (the Items property) or change its selected item (ItemIndex);'
85 | ''
86 | ' change the form'#39's caption.'
87 | '')
88 | ReadOnly = True
89 | TextSettings.WordWrap = True
90 | Anchors = [akLeft, akTop, akRight]
91 | Position.X = 16.000000000000000000
92 | Position.Y = 8.000000000000000000
93 | Size.Width = 524.000000000000000000
94 | Size.Height = 185.000000000000000000
95 | Size.PlatformDefault = False
96 | TabOrder = 4
97 | Viewport.Width = 504.000000000000000000
98 | Viewport.Height = 181.000000000000000000
99 | end
100 | object ColorPanel1: TColorPanel
101 | Hint = 'A TColorPanel object'
102 | Anchors = [akLeft, akTop, akRight, akBottom]
103 | Color = claWhite
104 | Position.X = 16.000000000000000000
105 | Position.Y = 456.000000000000000000
106 | Size.Width = 524.000000000000000000
107 | Size.Height = 182.000000000000000000
108 | Size.PlatformDefault = False
109 | TabOrder = 5
110 | end
111 | object ComboColorBox1: TComboColorBox
112 | Hint = 'A TComboColorBox object'
113 | Anchors = [akLeft, akTop, akRight]
114 | Color = claSteelblue
115 | Position.X = 16.000000000000000000
116 | Position.Y = 424.000000000000000000
117 | Size.Width = 524.000000000000000000
118 | Size.Height = 22.000000000000000000
119 | Size.PlatformDefault = False
120 | TabOrder = 6
121 | end
122 | end
123 |
--------------------------------------------------------------------------------
/DemoDesktop/Unit5.pas:
--------------------------------------------------------------------------------
1 | unit Unit5;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
8 | FMX.ListView.Types,
9 | FMX.ListView.Appearances, FMX.ListView.Adapters.Base, System.Rtti, FMX.Menus,
10 | FMX.Ani, FMX.Grid, FMX.Layouts, FMX.ComboEdit, FMX.Controls.Presentation,
11 | FMX.Edit, FMX.ListView, FMX.TabControl, FMX.ListBox, ObjectDebuggerFMXFrame,
12 | FMX.Colors, FMX.ScrollBox, FMX.Memo;
13 |
14 | type
15 | TForm5 = class(TForm)
16 | Edit1: TEdit;
17 | ComboBox1: TComboBox;
18 | ListBox1: TListBox;
19 | Memo1: TMemo;
20 | ColorPanel1: TColorPanel;
21 | ComboColorBox1: TComboColorBox;
22 | procedure FormShow(Sender: TObject);
23 | private
24 | {Private declarations}
25 | public
26 | {Public declarations}
27 | end;
28 |
29 | var
30 | Form5: TForm5;
31 |
32 | implementation
33 |
34 | {$R *.fmx}
35 |
36 |
37 | uses
38 | ObjectDebuggerFMXForm;
39 |
40 | procedure TForm5.FormShow(Sender: TObject);
41 | begin
42 | ObjectDebuggerFMXForm1.Show;
43 | end;
44 |
45 | end.
46 |
--------------------------------------------------------------------------------
/DemoMobile/AndroidManifest.template.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | <%uses-permission%>
12 |
13 |
21 |
22 | <%application-meta-data%>
23 | <%services%>
24 |
26 |
30 |
31 |
33 |
34 |
35 |
36 |
37 |
38 | <%activity%>
39 | <%receivers%>
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/DemoMobile/Demo.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/DemoMobile/Demo.res
--------------------------------------------------------------------------------
/DemoMobile/DemoMobile.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 |
9 |
10 |
11 | DemoMobile\
12 | DemoMobile.exe
13 | ProjectOutput
14 | 0
15 |
16 |
17 | True
18 | True
19 |
20 |
21 |
22 |
23 | DemoMobile.app\Contents\MacOS\
24 | DemoMobile
25 | ProjectOutput
26 | 1
27 |
28 |
29 | True
30 | True
31 |
32 |
33 | DemoMobile.app\Contents\
34 | Info.plist
35 | ProjectOSXInfoPList
36 | 1
37 |
38 |
39 | True
40 |
41 |
42 | DemoMobile.app\Contents\Resources\
43 | DemoMobile.icns
44 | ProjectOSXResource
45 | 1
46 |
47 |
48 | True
49 |
50 |
51 | DemoMobile.app\Contents\MacOS\
52 | libcgunwind.1.0.dylib
53 | DependencyModule
54 | 1
55 |
56 |
57 | True
58 |
59 |
60 | DemoMobile.app\../\
61 | DemoMobile.entitlements
62 | ProjectOSXEntitlements
63 | 1
64 |
65 |
66 | True
67 |
68 |
69 |
70 |
71 | DemoMobile\res\drawable-ldpi\
72 | ic_launcher.png
73 | Android_LauncherIcon36
74 | 1
75 |
76 |
77 | True
78 |
79 |
80 | DemoMobile\res\drawable-hdpi\
81 | ic_launcher.png
82 | Android_LauncherIcon72
83 | 1
84 |
85 |
86 | True
87 |
88 |
89 | DemoMobile\res\drawable-small\
90 | splash_image.png
91 | Android_SplashImage426
92 | 1
93 |
94 |
95 | True
96 |
97 |
98 | DemoMobile\library\lib\mips\
99 | libDemoMobile.so
100 | AndroidLibnativeMipsFile
101 | 1
102 |
103 |
104 | True
105 |
106 |
107 | DemoMobile\res\drawable\
108 | splash_image_def.xml
109 | AndroidSplashImageDef
110 | 1
111 |
112 |
113 | True
114 |
115 |
116 | DemoMobile\
117 | AndroidManifest.xml
118 | ProjectAndroidManifest
119 | 1
120 |
121 |
122 | True
123 |
124 |
125 | DemoMobile\library\lib\armeabi\
126 | libDemoMobile.so
127 | AndroidLibnativeArmeabiFile
128 | 1
129 |
130 |
131 | True
132 |
133 |
134 | DemoMobile\res\drawable-xxhdpi\
135 | ic_launcher.png
136 | Android_LauncherIcon144
137 | 1
138 |
139 |
140 | True
141 |
142 |
143 | DemoMobile\res\drawable-xhdpi\
144 | ic_launcher.png
145 | Android_LauncherIcon96
146 | 1
147 |
148 |
149 | True
150 |
151 |
152 | DemoMobile\res\drawable-large\
153 | splash_image.png
154 | Android_SplashImage640
155 | 1
156 |
157 |
158 | True
159 |
160 |
161 | DemoMobile\res\drawable-xlarge\
162 | splash_image.png
163 | Android_SplashImage960
164 | 1
165 |
166 |
167 | True
168 |
169 |
170 | DemoMobile\library\lib\armeabi-v7a\
171 | libDemoMobile.so
172 | ProjectOutput
173 | 1
174 |
175 |
176 | True
177 | True
178 |
179 |
180 | DemoMobile\res\drawable-mdpi\
181 | ic_launcher.png
182 | Android_LauncherIcon48
183 | 1
184 |
185 |
186 | True
187 |
188 |
189 | DemoMobile\library\lib\armeabi-v7a\
190 | gdbserver
191 | AndroidGDBServer
192 | 1
193 |
194 |
195 | True
196 |
197 |
198 | DemoMobile\res\values\
199 | styles.xml
200 | AndroidSplashStyles
201 | 1
202 |
203 |
204 | True
205 |
206 |
207 | DemoMobile\classes\
208 | classes.dex
209 | AndroidClassesDexFile
210 | 1
211 |
212 |
213 | True
214 |
215 |
216 | DemoMobile\res\drawable-normal\
217 | splash_image.png
218 | Android_SplashImage470
219 | 1
220 |
221 |
222 | True
223 |
224 |
225 | DemoMobile\library\lib\x86\
226 | libDemoMobile.so
227 | AndroidLibnativeX86File
228 | 1
229 |
230 |
231 | True
232 |
233 |
234 |
235 |
236 | DemoMobile.app\
237 | FM_ApplicationIcon_144x144.png
238 | iPad_AppIcon144
239 | 0
240 |
241 |
242 | True
243 |
244 |
245 | DemoMobile.app\
246 | DemoMobile
247 | ProjectOutput
248 | 1
249 |
250 |
251 | True
252 | True
253 |
254 |
255 | DemoMobile.app\
256 | FM_SpotlightSearchIcon_100x100.png
257 | iPad_SpotLight100
258 | 0
259 |
260 |
261 | True
262 |
263 |
264 | DemoMobile.app\
265 | FM_SpotlightSearchIcon_40x40.png
266 | iPad_SpotLight40
267 | 0
268 |
269 |
270 | True
271 |
272 |
273 | DemoMobile.app\
274 | FM_ApplicationIcon_60x60.png
275 | iPhone_AppIcon60
276 | 0
277 |
278 |
279 | True
280 |
281 |
282 | DemoMobile.app\
283 | FM_ApplicationIcon_114x114.png
284 | iPhone_AppIcon114
285 | 0
286 |
287 |
288 | True
289 |
290 |
291 | DemoMobile.app\
292 | Default-Portrait@2x.png
293 | iPad_Launch1536
294 | 1
295 |
296 |
297 | True
298 |
299 |
300 | DemoMobile.app\
301 | DemoMobile.entitlements
302 | ProjectiOSEntitlements
303 | 0
304 |
305 |
306 | True
307 |
308 |
309 | DemoMobile.app\
310 | FM_ApplicationIcon_152x152.png
311 | iPad_AppIcon152
312 | 0
313 |
314 |
315 | True
316 |
317 |
318 | DemoMobile.app\
319 | Default-736h@3x.png
320 | iPhone_Launch1242
321 | 0
322 |
323 |
324 | True
325 |
326 |
327 | DemoMobile.app\
328 | Default-667h@2x.png
329 | iPhone_Launch750
330 | 0
331 |
332 |
333 | True
334 |
335 |
336 | DemoMobile.app\
337 | Default~ipad.png
338 | iPad_Launch768
339 | 1
340 |
341 |
342 | True
343 |
344 |
345 | DemoMobile.app\
346 | FM_ApplicationIcon_72x72.png
347 | iPad_AppIcon72
348 | 0
349 |
350 |
351 | True
352 |
353 |
354 | DemoMobile.app\
355 | libcgunwind.1.0.dylib
356 | DependencyModule
357 | 1
358 |
359 |
360 | True
361 |
362 |
363 | DemoMobile.app\
364 | Default-Portrait~ipad.png
365 | iPad_Launch768x1024
366 | 0
367 |
368 |
369 | True
370 |
371 |
372 | DemoMobile.app\
373 | Default@2x.png
374 | iPhone_Launch640
375 | 1
376 |
377 |
378 | True
379 |
380 |
381 | DemoMobile.app\
382 | FM_SpotlightSearchIcon_40x40.png
383 | iPhone_Spotlight40
384 | 0
385 |
386 |
387 | True
388 |
389 |
390 | DemoMobile.app\
391 | Default-Landscape@2x~ipad.png
392 | iPad_Launch2048x1536
393 | 0
394 |
395 |
396 | True
397 |
398 |
399 | DemoMobile.app\
400 | FM_ApplicationIcon_87x87.png
401 | iPhone_AppIcon87
402 | 0
403 |
404 |
405 | True
406 |
407 |
408 | DemoMobile.app\
409 | Default-Landscape~ipad.png
410 | iPad_Launch1024x768
411 | 0
412 |
413 |
414 | True
415 |
416 |
417 | DemoMobile.app\
418 | Default.png
419 | iPhone_Launch320
420 | 1
421 |
422 |
423 | True
424 |
425 |
426 | DemoMobile.app\
427 | FM_ApplicationIcon_180x180.png
428 | iPhone_AppIcon180
429 | 0
430 |
431 |
432 | True
433 |
434 |
435 | DemoMobile.app\
436 | Info.plist
437 | ProjectiOSInfoPList
438 | 1
439 |
440 |
441 | True
442 |
443 |
444 | DemoMobile.app\
445 | FM_ApplicationIcon_76x76.png
446 | iPad_AppIcon76
447 | 0
448 |
449 |
450 | True
451 |
452 |
453 | DemoMobile.app\
454 | libPCRE.dylib
455 | DependencyModule
456 | 1
457 |
458 |
459 | True
460 |
461 |
462 | DemoMobile.app\
463 | FM_SettingIcon_58x58.png
464 | iPad_Setting58
465 | 0
466 |
467 |
468 | True
469 |
470 |
471 | DemoMobile.app\
472 | Default-Portrait@2x~ipad.png
473 | iPad_Launch1536x2048
474 | 0
475 |
476 |
477 | True
478 |
479 |
480 | DemoMobile.app\
481 | Default-Landscape-736h@3x.png
482 | iPhone_Launch2208
483 | 0
484 |
485 |
486 | True
487 |
488 |
489 | DemoMobile.app\
490 | FM_SpotlightSearchIcon_80x80.png
491 | iPad_SpotLight80
492 | 0
493 |
494 |
495 | True
496 |
497 |
498 | DemoMobile.app\
499 | FM_ApplicationIcon_120x120.png
500 | iPhone_AppIcon120
501 | 0
502 |
503 |
504 | True
505 |
506 |
507 | DemoMobile.app\
508 | FM_ApplicationIcon_57x57.png
509 | iPhone_AppIcon57
510 | 0
511 |
512 |
513 | True
514 |
515 |
516 | DemoMobile.app\
517 | Default-Landscape@2x.png
518 | iPad_Launch2048
519 | 1
520 |
521 |
522 | True
523 |
524 |
525 | DemoMobile.app\
526 | FM_SpotlightSearchIcon_50x50.png
527 | iPad_SpotLight50
528 | 0
529 |
530 |
531 | True
532 |
533 |
534 | DemoMobile.app\
535 | Default-568h@2x.png
536 | iPhone_Launch640x1136
537 | 1
538 |
539 |
540 | True
541 |
542 |
543 | DemoMobile.app\
544 | FM_SpotlightSearchIcon_29x29.png
545 | iPhone_Spotlight29
546 | 0
547 |
548 |
549 | True
550 |
551 |
552 | DemoMobile.app\
553 | FM_SettingIcon_29x29.png
554 | iPad_Setting29
555 | 0
556 |
557 |
558 | True
559 |
560 |
561 | DemoMobile.app\
562 | Default-Landscape.png
563 | iPad_Launch1024
564 | 1
565 |
566 |
567 | True
568 |
569 |
570 |
571 |
--------------------------------------------------------------------------------
/DemoMobile/DemoMobile.dpr:
--------------------------------------------------------------------------------
1 | program DemoMobile;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | Unit3 in 'Unit3.pas' {Form3},
7 | FormMessage in '..\FormMessage.pas' {MessageForm},
8 | ObjectDebuggerFMXFrame in '..\ObjectDebuggerFMXFrame.pas' {FMXObjectDebuggerFrame: TFrame};
9 |
10 | {$R *.res}
11 |
12 | begin
13 | Application.Initialize;
14 | Application.CreateForm(TForm3, Form3);
15 | Application.CreateForm(TMessageForm, MessageForm);
16 | Application.CreateForm(TFMXObjectDebuggerFrame, FMXObjectDebuggerFrame);
17 | Application.Run;
18 | end.
19 |
--------------------------------------------------------------------------------
/DemoMobile/DemoMobile.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/DemoMobile/DemoMobile.res
--------------------------------------------------------------------------------
/DemoMobile/Entitlement.TemplateOSX32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DemoMobile/Entitlement.TemplateiOS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%getTaskAllowKey%>
6 | <%applicationIdentifier%>
7 | <%pushNotificationKey%>
8 | <%keychainAccessGroups%>
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DemoMobile/Unit3.fmx:
--------------------------------------------------------------------------------
1 | object Form3: TForm3
2 | Left = 0
3 | Top = 0
4 | Caption = 'FireMonkey Object Debugger Demo'
5 | ClientHeight = 646
6 | ClientWidth = 640
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | DesignerMasterStyle = 0
11 | object Edit1: TEdit
12 | Hint = 'Use the inspector to alter the '#39'Text'#39' property.'
13 | Touch.InteractiveGestures = [LongTap, DoubleTap]
14 | Anchors = [akLeft, akTop, akRight]
15 | TabOrder = 1
16 | Position.X = 8.000000000000000000
17 | Position.Y = 205.000000000000000000
18 | Size.Width = 273.000000000000000000
19 | Size.Height = 22.000000000000000000
20 | Size.PlatformDefault = False
21 | ParentShowHint = False
22 | ShowHint = True
23 | end
24 | object ComboBox1: TComboBox
25 | Hint = 'A TComboBox object'
26 | Anchors = [akLeft, akTop, akRight]
27 | Items.Strings = (
28 | 'Item 0'
29 | 'Item 1'
30 | 'Item 2'
31 | 'Item 3'
32 | 'Item 4'
33 | 'Item 5')
34 | ItemIndex = 4
35 | Position.X = 8.000000000000000000
36 | Position.Y = 384.000000000000000000
37 | Size.Width = 273.000000000000000000
38 | Size.Height = 22.000000000000000000
39 | Size.PlatformDefault = False
40 | TabOrder = 2
41 | ParentShowHint = False
42 | ShowHint = True
43 | end
44 | object ListBox1: TListBox
45 | Hint = 'A TListBox object'
46 | Anchors = [akLeft, akTop, akRight]
47 | Position.X = 8.000000000000000000
48 | Position.Y = 240.000000000000000000
49 | Size.Width = 273.000000000000000000
50 | Size.Height = 129.000000000000000000
51 | Size.PlatformDefault = False
52 | TabOrder = 3
53 | DisableFocusEffect = True
54 | ItemIndex = 2
55 | Items.Strings = (
56 | 'Item 0'
57 | 'Item 1'
58 | 'Item 2'
59 | 'Item 3')
60 | DefaultItemStyles.ItemStyle = ''
61 | DefaultItemStyles.GroupHeaderStyle = ''
62 | DefaultItemStyles.GroupFooterStyle = ''
63 | ParentShowHint = False
64 | ShowHint = True
65 | Viewport.Width = 269.000000000000000000
66 | Viewport.Height = 125.000000000000000000
67 | end
68 | object Memo1: TMemo
69 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
70 | DataDetectorTypes = []
71 | Lines.Strings = (
72 |
73 | 'You can use object debugger panel (to the right) to do the follo' +
74 | 'wing:'
75 | ''
76 | ' choose the edit field and change its Text property;'
77 | ''
78 | ' change the cursor;'
79 | ''
80 | ' change the position of a control;'
81 | ''
82 |
83 | ' choose the listbox or combobox and add modify its conten' +
84 | 't (the Items property) or change its selected item (ItemIndex);'
85 | ''
86 | ' change the form'#39's caption.'
87 | '')
88 | ReadOnly = True
89 | TextSettings.WordWrap = True
90 | Anchors = [akLeft, akTop, akRight]
91 | Position.X = 8.000000000000000000
92 | Position.Y = 8.000000000000000000
93 | Size.Width = 273.000000000000000000
94 | Size.Height = 185.000000000000000000
95 | Size.PlatformDefault = False
96 | TabOrder = 4
97 | Viewport.Width = 253.000000000000000000
98 | Viewport.Height = 181.000000000000000000
99 | end
100 | object ColorPanel1: TColorPanel
101 | Hint = 'A TColorPanel object'
102 | Anchors = [akLeft, akTop, akRight, akBottom]
103 | Color = claWhite
104 | Position.X = 8.000000000000000000
105 | Position.Y = 456.000000000000000000
106 | Size.Width = 273.000000000000000000
107 | Size.Height = 182.000000000000000000
108 | Size.PlatformDefault = False
109 | TabOrder = 5
110 | end
111 | object ComboColorBox1: TComboColorBox
112 | Hint = 'A TComboColorBox object'
113 | Anchors = [akLeft, akTop, akRight]
114 | Color = claSteelblue
115 | Position.X = 8.000000000000000000
116 | Position.Y = 424.000000000000000000
117 | Size.Width = 273.000000000000000000
118 | Size.Height = 22.000000000000000000
119 | Size.PlatformDefault = False
120 | TabOrder = 6
121 | end
122 | inline TFMXObjectDebuggerFrame1: TFMXObjectDebuggerFrame
123 | Align = MostRight
124 | Position.X = 290.000000000000000000
125 | Size.Width = 350.000000000000000000
126 | Size.Height = 646.000000000000000000
127 | Size.PlatformDefault = False
128 | inherited Panel1: TPanel
129 | Anchors = [akLeft, akTop, akRight, akBottom]
130 | Size.Height = 646.000000000000000000
131 | inherited TabControl1: TTabControl
132 | Size.Height = 543.000000000000000000
133 | inherited TabItemProperties: TTabItem
134 | ExplicitSize.cx = 50.000000000000000000
135 | ExplicitSize.cy = 26.000000000000000000
136 | inherited sgProp: TStringGrid
137 | Size.Height = 517.000000000000000000
138 | Viewport.Width = 298.000000000000000000
139 | Viewport.Height = 492.000000000000000000
140 | end
141 | end
142 | inherited TabItemEvents: TTabItem
143 | ExplicitSize.cx = 50.000000000000000000
144 | ExplicitSize.cy = 26.000000000000000000
145 | inherited sgEvt: TStringGrid
146 | Viewport.Width = 314.000000000000000000
147 | Viewport.Height = 486.000000000000000000
148 | end
149 | end
150 | inherited TabItemData: TTabItem
151 | ExplicitSize.cx = 50.000000000000000000
152 | ExplicitSize.cy = 26.000000000000000000
153 | inherited sgData: TStringGrid
154 | Viewport.Width = 314.000000000000000000
155 | Viewport.Height = 486.000000000000000000
156 | end
157 | end
158 | end
159 | end
160 | end
161 | end
162 |
--------------------------------------------------------------------------------
/DemoMobile/Unit3.pas:
--------------------------------------------------------------------------------
1 | unit Unit3;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
8 | FMX.ListView.Types,
9 | FMX.ListView.Appearances, FMX.ListView.Adapters.Base, System.Rtti, FMX.Menus,
10 | FMX.Ani, FMX.Grid, FMX.Layouts, FMX.ComboEdit, FMX.Controls.Presentation,
11 | FMX.Edit, FMX.ListView, FMX.TabControl, FMX.ListBox, ObjectDebuggerFMXFrame,
12 | FMX.Colors, FMX.ScrollBox, FMX.Memo;
13 |
14 | type
15 | TForm3 = class(TForm)
16 | Edit1: TEdit;
17 | ComboBox1: TComboBox;
18 | ListBox1: TListBox;
19 | Memo1: TMemo;
20 | ColorPanel1: TColorPanel;
21 | ComboColorBox1: TComboColorBox;
22 | TFMXObjectDebuggerFrame1: TFMXObjectDebuggerFrame;
23 | private
24 | {Private declarations}
25 | public
26 | {Public declarations}
27 | end;
28 |
29 | var
30 | Form3: TForm3;
31 |
32 | implementation
33 |
34 | {$R *.fmx}
35 |
36 | end.
37 |
--------------------------------------------------------------------------------
/Entitlement.TemplateOSX32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Entitlement.TemplateiOS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%getTaskAllowKey%>
6 | <%applicationIdentifier%>
7 | <%pushNotificationKey%>
8 | <%keychainAccessGroups%>
9 |
10 |
11 |
--------------------------------------------------------------------------------
/FormMessage.fmx:
--------------------------------------------------------------------------------
1 | object MessageForm: TMessageForm
2 | Left = 0
3 | Top = 0
4 | BorderStyle = Single
5 | Caption = 'Form3'
6 | ClientHeight = 400
7 | ClientWidth = 350
8 | FormFactor.Width = 320
9 | FormFactor.Height = 480
10 | FormFactor.Devices = [Desktop]
11 | DesignerMasterStyle = 0
12 | object ButtonOK: TButton
13 | Anchors = [akLeft, akBottom]
14 | ModalResult = 1
15 | Position.X = 16.000000000000000000
16 | Position.Y = 364.000000000000000000
17 | TabOrder = 0
18 | Text = '&OK'
19 | end
20 | object Button2: TButton
21 | Anchors = [akRight, akBottom]
22 | ModalResult = 2
23 | Position.X = 254.000000000000000000
24 | Position.Y = 364.000000000000000000
25 | TabOrder = 1
26 | Text = '&Cancel'
27 | end
28 | end
29 |
--------------------------------------------------------------------------------
/FormMessage.pas:
--------------------------------------------------------------------------------
1 | unit FormMessage;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
8 | FMX.Controls.Presentation, FMX.StdCtrls;
9 |
10 | type
11 | TMessageForm = class(TForm)
12 | ButtonOK: TButton;
13 | Button2: TButton;
14 | private
15 | {Private declarations}
16 | TopPanel: TPanel;
17 | public
18 | {Public declarations}
19 | procedure AddPanel(panel: TPanel);
20 | procedure ShowMessage(str, caption: string);
21 | end;
22 |
23 | var
24 | MessageForm: TMessageForm;
25 |
26 | implementation
27 |
28 | {$R *.fmx}
29 |
30 |
31 | uses
32 | FMX.Memo // TMemo
33 | ;
34 |
35 | procedure TMessageForm.AddPanel(panel: TPanel);
36 | var
37 | margin: Single;
38 | begin
39 | if (nil <> TopPanel) and (TopPanel.Parent = Self) then
40 | begin
41 | Self.RemoveObject(TopPanel);
42 | FreeAndNil(TopPanel);
43 | end;
44 |
45 | Self.AddObject(panel);
46 | panel.Position.X := 0;
47 | panel.Position.Y := 0;
48 | panel.Width := Self.Width;
49 | margin := Self.ClientHeight - (ButtonOK.Position.Y + ButtonOK.Height);
50 | panel.Height := Self.ClientHeight - 2 * margin - ButtonOK.Height;
51 |
52 | panel.Align := TAlignLayout.None;
53 | panel.Anchors := [TAnchorKind.akTop, TAnchorKind.akBottom, TAnchorKind.akLeft, TAnchorKind.akRight];
54 |
55 | TopPanel := panel;
56 | end;
57 |
58 | procedure TMessageForm.ShowMessage(str, caption: string);
59 | var
60 | P: TPanel;
61 | Memo1: TMemo;
62 | begin
63 | P := TPanel.Create(Self);
64 | try
65 | //middle of the screen
66 | Self.Left := Screen.Width div 2 - 125;
67 | Self.Top := Screen.Height div 2 - 150;
68 | Self.caption := caption;
69 |
70 | AddPanel(P);
71 | Memo1 := TMemo.Create(P);
72 | with Memo1 do
73 | begin
74 | Parent := P;
75 | Width := P.Width - 30;
76 | Height := P.Height - 30;
77 | ReadOnly := True;
78 | Position.X := 15;
79 | Position.Y := 15;
80 | WordWrap := True;
81 | Align := TAlignLayout.None;
82 | Anchors := [TAnchorKind.akTop, TAnchorKind.akBottom, TAnchorKind.akLeft, TAnchorKind.akRight];
83 | Lines.Text := str;
84 | end;
85 | // Plain old ShowModal not supported on Android so use newer version with support for callback.
86 | Self.ShowModal(
87 | procedure(ModalResult: TModalResult)
88 | begin
89 | Self.Visible := False;
90 | end);
91 | finally
92 |
93 | end;
94 | end;
95 |
96 | end.
97 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Mozilla Public License Version 2.0
2 | ==================================
3 |
4 | 1. Definitions
5 | --------------
6 |
7 | 1.1. "Contributor"
8 | means each individual or legal entity that creates, contributes to
9 | the creation of, or owns Covered Software.
10 |
11 | 1.2. "Contributor Version"
12 | means the combination of the Contributions of others (if any) used
13 | by a Contributor and that particular Contributor's Contribution.
14 |
15 | 1.3. "Contribution"
16 | means Covered Software of a particular Contributor.
17 |
18 | 1.4. "Covered Software"
19 | means Source Code Form to which the initial Contributor has attached
20 | the notice in Exhibit A, the Executable Form of such Source Code
21 | Form, and Modifications of such Source Code Form, in each case
22 | including portions thereof.
23 |
24 | 1.5. "Incompatible With Secondary Licenses"
25 | means
26 |
27 | (a) that the initial Contributor has attached the notice described
28 | in Exhibit B to the Covered Software; or
29 |
30 | (b) that the Covered Software was made available under the terms of
31 | version 1.1 or earlier of the License, but not also under the
32 | terms of a Secondary License.
33 |
34 | 1.6. "Executable Form"
35 | means any form of the work other than Source Code Form.
36 |
37 | 1.7. "Larger Work"
38 | means a work that combines Covered Software with other material, in
39 | a separate file or files, that is not Covered Software.
40 |
41 | 1.8. "License"
42 | means this document.
43 |
44 | 1.9. "Licensable"
45 | means having the right to grant, to the maximum extent possible,
46 | whether at the time of the initial grant or subsequently, any and
47 | all of the rights conveyed by this License.
48 |
49 | 1.10. "Modifications"
50 | means any of the following:
51 |
52 | (a) any file in Source Code Form that results from an addition to,
53 | deletion from, or modification of the contents of Covered
54 | Software; or
55 |
56 | (b) any new file in Source Code Form that contains any Covered
57 | Software.
58 |
59 | 1.11. "Patent Claims" of a Contributor
60 | means any patent claim(s), including without limitation, method,
61 | process, and apparatus claims, in any patent Licensable by such
62 | Contributor that would be infringed, but for the grant of the
63 | License, by the making, using, selling, offering for sale, having
64 | made, import, or transfer of either its Contributions or its
65 | Contributor Version.
66 |
67 | 1.12. "Secondary License"
68 | means either the GNU General Public License, Version 2.0, the GNU
69 | Lesser General Public License, Version 2.1, the GNU Affero General
70 | Public License, Version 3.0, or any later versions of those
71 | licenses.
72 |
73 | 1.13. "Source Code Form"
74 | means the form of the work preferred for making modifications.
75 |
76 | 1.14. "You" (or "Your")
77 | means an individual or a legal entity exercising rights under this
78 | License. For legal entities, "You" includes any entity that
79 | controls, is controlled by, or is under common control with You. For
80 | purposes of this definition, "control" means (a) the power, direct
81 | or indirect, to cause the direction or management of such entity,
82 | whether by contract or otherwise, or (b) ownership of more than
83 | fifty percent (50%) of the outstanding shares or beneficial
84 | ownership of such entity.
85 |
86 | 2. License Grants and Conditions
87 | --------------------------------
88 |
89 | 2.1. Grants
90 |
91 | Each Contributor hereby grants You a world-wide, royalty-free,
92 | non-exclusive license:
93 |
94 | (a) under intellectual property rights (other than patent or trademark)
95 | Licensable by such Contributor to use, reproduce, make available,
96 | modify, display, perform, distribute, and otherwise exploit its
97 | Contributions, either on an unmodified basis, with Modifications, or
98 | as part of a Larger Work; and
99 |
100 | (b) under Patent Claims of such Contributor to make, use, sell, offer
101 | for sale, have made, import, and otherwise transfer either its
102 | Contributions or its Contributor Version.
103 |
104 | 2.2. Effective Date
105 |
106 | The licenses granted in Section 2.1 with respect to any Contribution
107 | become effective for each Contribution on the date the Contributor first
108 | distributes such Contribution.
109 |
110 | 2.3. Limitations on Grant Scope
111 |
112 | The licenses granted in this Section 2 are the only rights granted under
113 | this License. No additional rights or licenses will be implied from the
114 | distribution or licensing of Covered Software under this License.
115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a
116 | Contributor:
117 |
118 | (a) for any code that a Contributor has removed from Covered Software;
119 | or
120 |
121 | (b) for infringements caused by: (i) Your and any other third party's
122 | modifications of Covered Software, or (ii) the combination of its
123 | Contributions with other software (except as part of its Contributor
124 | Version); or
125 |
126 | (c) under Patent Claims infringed by Covered Software in the absence of
127 | its Contributions.
128 |
129 | This License does not grant any rights in the trademarks, service marks,
130 | or logos of any Contributor (except as may be necessary to comply with
131 | the notice requirements in Section 3.4).
132 |
133 | 2.4. Subsequent Licenses
134 |
135 | No Contributor makes additional grants as a result of Your choice to
136 | distribute the Covered Software under a subsequent version of this
137 | License (see Section 10.2) or under the terms of a Secondary License (if
138 | permitted under the terms of Section 3.3).
139 |
140 | 2.5. Representation
141 |
142 | Each Contributor represents that the Contributor believes its
143 | Contributions are its original creation(s) or it has sufficient rights
144 | to grant the rights to its Contributions conveyed by this License.
145 |
146 | 2.6. Fair Use
147 |
148 | This License is not intended to limit any rights You have under
149 | applicable copyright doctrines of fair use, fair dealing, or other
150 | equivalents.
151 |
152 | 2.7. Conditions
153 |
154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155 | in Section 2.1.
156 |
157 | 3. Responsibilities
158 | -------------------
159 |
160 | 3.1. Distribution of Source Form
161 |
162 | All distribution of Covered Software in Source Code Form, including any
163 | Modifications that You create or to which You contribute, must be under
164 | the terms of this License. You must inform recipients that the Source
165 | Code Form of the Covered Software is governed by the terms of this
166 | License, and how they can obtain a copy of this License. You may not
167 | attempt to alter or restrict the recipients' rights in the Source Code
168 | Form.
169 |
170 | 3.2. Distribution of Executable Form
171 |
172 | If You distribute Covered Software in Executable Form then:
173 |
174 | (a) such Covered Software must also be made available in Source Code
175 | Form, as described in Section 3.1, and You must inform recipients of
176 | the Executable Form how they can obtain a copy of such Source Code
177 | Form by reasonable means in a timely manner, at a charge no more
178 | than the cost of distribution to the recipient; and
179 |
180 | (b) You may distribute such Executable Form under the terms of this
181 | License, or sublicense it under different terms, provided that the
182 | license for the Executable Form does not attempt to limit or alter
183 | the recipients' rights in the Source Code Form under this License.
184 |
185 | 3.3. Distribution of a Larger Work
186 |
187 | You may create and distribute a Larger Work under terms of Your choice,
188 | provided that You also comply with the requirements of this License for
189 | the Covered Software. If the Larger Work is a combination of Covered
190 | Software with a work governed by one or more Secondary Licenses, and the
191 | Covered Software is not Incompatible With Secondary Licenses, this
192 | License permits You to additionally distribute such Covered Software
193 | under the terms of such Secondary License(s), so that the recipient of
194 | the Larger Work may, at their option, further distribute the Covered
195 | Software under the terms of either this License or such Secondary
196 | License(s).
197 |
198 | 3.4. Notices
199 |
200 | You may not remove or alter the substance of any license notices
201 | (including copyright notices, patent notices, disclaimers of warranty,
202 | or limitations of liability) contained within the Source Code Form of
203 | the Covered Software, except that You may alter any license notices to
204 | the extent required to remedy known factual inaccuracies.
205 |
206 | 3.5. Application of Additional Terms
207 |
208 | You may choose to offer, and to charge a fee for, warranty, support,
209 | indemnity or liability obligations to one or more recipients of Covered
210 | Software. However, You may do so only on Your own behalf, and not on
211 | behalf of any Contributor. You must make it absolutely clear that any
212 | such warranty, support, indemnity, or liability obligation is offered by
213 | You alone, and You hereby agree to indemnify every Contributor for any
214 | liability incurred by such Contributor as a result of warranty, support,
215 | indemnity or liability terms You offer. You may include additional
216 | disclaimers of warranty and limitations of liability specific to any
217 | jurisdiction.
218 |
219 | 4. Inability to Comply Due to Statute or Regulation
220 | ---------------------------------------------------
221 |
222 | If it is impossible for You to comply with any of the terms of this
223 | License with respect to some or all of the Covered Software due to
224 | statute, judicial order, or regulation then You must: (a) comply with
225 | the terms of this License to the maximum extent possible; and (b)
226 | describe the limitations and the code they affect. Such description must
227 | be placed in a text file included with all distributions of the Covered
228 | Software under this License. Except to the extent prohibited by statute
229 | or regulation, such description must be sufficiently detailed for a
230 | recipient of ordinary skill to be able to understand it.
231 |
232 | 5. Termination
233 | --------------
234 |
235 | 5.1. The rights granted under this License will terminate automatically
236 | if You fail to comply with any of its terms. However, if You become
237 | compliant, then the rights granted under this License from a particular
238 | Contributor are reinstated (a) provisionally, unless and until such
239 | Contributor explicitly and finally terminates Your grants, and (b) on an
240 | ongoing basis, if such Contributor fails to notify You of the
241 | non-compliance by some reasonable means prior to 60 days after You have
242 | come back into compliance. Moreover, Your grants from a particular
243 | Contributor are reinstated on an ongoing basis if such Contributor
244 | notifies You of the non-compliance by some reasonable means, this is the
245 | first time You have received notice of non-compliance with this License
246 | from such Contributor, and You become compliant prior to 30 days after
247 | Your receipt of the notice.
248 |
249 | 5.2. If You initiate litigation against any entity by asserting a patent
250 | infringement claim (excluding declaratory judgment actions,
251 | counter-claims, and cross-claims) alleging that a Contributor Version
252 | directly or indirectly infringes any patent, then the rights granted to
253 | You by any and all Contributors for the Covered Software under Section
254 | 2.1 of this License shall terminate.
255 |
256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257 | end user license agreements (excluding distributors and resellers) which
258 | have been validly granted by You or Your distributors under this License
259 | prior to termination shall survive termination.
260 |
261 | ************************************************************************
262 | * *
263 | * 6. Disclaimer of Warranty *
264 | * ------------------------- *
265 | * *
266 | * Covered Software is provided under this License on an "as is" *
267 | * basis, without warranty of any kind, either expressed, implied, or *
268 | * statutory, including, without limitation, warranties that the *
269 | * Covered Software is free of defects, merchantable, fit for a *
270 | * particular purpose or non-infringing. The entire risk as to the *
271 | * quality and performance of the Covered Software is with You. *
272 | * Should any Covered Software prove defective in any respect, You *
273 | * (not any Contributor) assume the cost of any necessary servicing, *
274 | * repair, or correction. This disclaimer of warranty constitutes an *
275 | * essential part of this License. No use of any Covered Software is *
276 | * authorized under this License except under this disclaimer. *
277 | * *
278 | ************************************************************************
279 |
280 | ************************************************************************
281 | * *
282 | * 7. Limitation of Liability *
283 | * -------------------------- *
284 | * *
285 | * Under no circumstances and under no legal theory, whether tort *
286 | * (including negligence), contract, or otherwise, shall any *
287 | * Contributor, or anyone who distributes Covered Software as *
288 | * permitted above, be liable to You for any direct, indirect, *
289 | * special, incidental, or consequential damages of any character *
290 | * including, without limitation, damages for lost profits, loss of *
291 | * goodwill, work stoppage, computer failure or malfunction, or any *
292 | * and all other commercial damages or losses, even if such party *
293 | * shall have been informed of the possibility of such damages. This *
294 | * limitation of liability shall not apply to liability for death or *
295 | * personal injury resulting from such party's negligence to the *
296 | * extent applicable law prohibits such limitation. Some *
297 | * jurisdictions do not allow the exclusion or limitation of *
298 | * incidental or consequential damages, so this exclusion and *
299 | * limitation may not apply to You. *
300 | * *
301 | ************************************************************************
302 |
303 | 8. Litigation
304 | -------------
305 |
306 | Any litigation relating to this License may be brought only in the
307 | courts of a jurisdiction where the defendant maintains its principal
308 | place of business and such litigation shall be governed by laws of that
309 | jurisdiction, without reference to its conflict-of-law provisions.
310 | Nothing in this Section shall prevent a party's ability to bring
311 | cross-claims or counter-claims.
312 |
313 | 9. Miscellaneous
314 | ----------------
315 |
316 | This License represents the complete agreement concerning the subject
317 | matter hereof. If any provision of this License is held to be
318 | unenforceable, such provision shall be reformed only to the extent
319 | necessary to make it enforceable. Any law or regulation which provides
320 | that the language of a contract shall be construed against the drafter
321 | shall not be used to construe this License against a Contributor.
322 |
323 | 10. Versions of the License
324 | ---------------------------
325 |
326 | 10.1. New Versions
327 |
328 | Mozilla Foundation is the license steward. Except as provided in Section
329 | 10.3, no one other than the license steward has the right to modify or
330 | publish new versions of this License. Each version will be given a
331 | distinguishing version number.
332 |
333 | 10.2. Effect of New Versions
334 |
335 | You may distribute the Covered Software under the terms of the version
336 | of the License under which You originally received the Covered Software,
337 | or under the terms of any subsequent version published by the license
338 | steward.
339 |
340 | 10.3. Modified Versions
341 |
342 | If you create software not governed by this License, and you want to
343 | create a new license for such software, you may create and use a
344 | modified version of this License if you rename the license and remove
345 | any references to the name of the license steward (except to note that
346 | such modified license differs from this License).
347 |
348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary
349 | Licenses
350 |
351 | If You choose to distribute Source Code Form that is Incompatible With
352 | Secondary Licenses under the terms of this version of the License, the
353 | notice described in Exhibit B of this License must be attached.
354 |
355 | Exhibit A - Source Code Form License Notice
356 | -------------------------------------------
357 |
358 | This Source Code Form is subject to the terms of the Mozilla Public
359 | License, v. 2.0. If a copy of the MPL was not distributed with this
360 | file, You can obtain one at http://mozilla.org/MPL/2.0/.
361 |
362 | If it is not possible or desirable to put the notice in a particular
363 | file, then You may include the notice in a location (such as a LICENSE
364 | file in a relevant directory) where a recipient would be likely to look
365 | for such a notice.
366 |
367 | You may add additional accurate notices of copyright ownership.
368 |
369 | Exhibit B - "Incompatible With Secondary Licenses" Notice
370 | ---------------------------------------------------------
371 |
372 | This Source Code Form is "Incompatible With Secondary Licenses", as
373 | defined by the Mozilla Public License, v. 2.0.
374 |
--------------------------------------------------------------------------------
/ObjectDebuggerFMX.dpk:
--------------------------------------------------------------------------------
1 | package ObjectDebuggerFMX;
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 | {$DESCRIPTION 'Object Debugger for FireMonkey'}
29 | {$IMPLICITBUILD ON}
30 |
31 |
32 | requires
33 | rtl,
34 | fmx;
35 |
36 | contains
37 | ObjectDebuggerFMXFrame in 'ObjectDebuggerFMXFrame.pas' {FMXObjectDebuggerFrame} ,
38 | FormMessage in 'FormMessage.pas';
39 |
40 | end.
41 |
--------------------------------------------------------------------------------
/ObjectDebuggerFMX.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {CF593233-C314-4EAD-8CF5-4BAC87F3C353}
4 | ObjectDebuggerFMX.dpk
5 | 18.1
6 | FMX
7 | True
8 | Debug
9 | Win32
10 | 1119
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 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Base
54 | true
55 |
56 |
57 | true
58 | Cfg_1
59 | true
60 | true
61 |
62 |
63 | true
64 | Base
65 | true
66 |
67 |
68 | Object Debugger for FireMonkey
69 | All
70 | true
71 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
72 | ObjectDebuggerFMX
73 | true
74 | .\$(Platform)\$(Config)
75 | .\$(Platform)\$(Config)
76 | false
77 | false
78 | false
79 | false
80 | false
81 |
82 |
83 | Debug
84 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
85 | android-support-v4.dex.jar;apk-expansion.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
86 | None
87 | rtl;fmx;$(DCC_UsePackage)
88 |
89 |
90 | $(MSBuildProjectName)
91 | true
92 | iPhoneAndiPad
93 | Debug
94 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=
95 | None
96 | rtl;fmx;$(DCC_UsePackage)
97 |
98 |
99 | $(MSBuildProjectName)
100 | true
101 | iPhoneAndiPad
102 | Debug
103 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=
104 | None
105 | rtl;fmx;$(DCC_UsePackage)
106 |
107 |
108 | iPhoneAndiPad
109 | true
110 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=
111 | None
112 | rtl;fmx;$(DCC_UsePackage)
113 |
114 |
115 | Debug
116 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user
117 | rtl;fmx;$(DCC_UsePackage)
118 |
119 |
120 | 1033
121 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
122 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
123 | true
124 | rtl;fmx;$(DCC_UsePackage)
125 |
126 |
127 | 1033
128 | true
129 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
130 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
131 | rtl;fmx;$(DCC_UsePackage)
132 |
133 |
134 | DEBUG;$(DCC_Define)
135 | true
136 | false
137 | true
138 | true
139 | true
140 |
141 |
142 | false
143 |
144 |
145 | false
146 | RELEASE;$(DCC_Define)
147 | 0
148 | 0
149 |
150 |
151 |
152 | MainSource
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 | Cfg_2
162 | Base
163 |
164 |
165 | Base
166 |
167 |
168 | Cfg_1
169 | Base
170 |
171 |
172 |
173 | Delphi.Personality.12
174 | Package
175 |
176 |
177 |
178 | ObjectDebuggerFMX.dpk
179 |
180 |
181 |
182 |
183 |
184 | true
185 |
186 |
187 |
188 |
189 | true
190 |
191 |
192 |
193 |
194 | ObjectDebuggerFMX.bpl
195 | true
196 |
197 |
198 |
199 |
200 | true
201 |
202 |
203 |
204 |
205 |
206 | Contents\Resources
207 | 1
208 |
209 |
210 |
211 |
212 | classes
213 | 1
214 |
215 |
216 |
217 |
218 | Contents\MacOS
219 | 0
220 |
221 |
222 | 1
223 |
224 |
225 |
226 |
227 | 1
228 |
229 |
230 | 1
231 |
232 |
233 | 1
234 |
235 |
236 |
237 |
238 | res\drawable-xxhdpi
239 | 1
240 |
241 |
242 |
243 |
244 | library\lib\mips
245 | 1
246 |
247 |
248 |
249 |
250 | 0
251 |
252 |
253 | 1
254 |
255 |
256 | 1
257 |
258 |
259 | 1
260 |
261 |
262 | library\lib\armeabi-v7a
263 | 1
264 |
265 |
266 | 1
267 |
268 |
269 |
270 |
271 | 0
272 |
273 |
274 | 1
275 | .framework
276 |
277 |
278 |
279 |
280 | 1
281 |
282 |
283 | 1
284 |
285 |
286 | 1
287 |
288 |
289 |
290 |
291 | 1
292 |
293 |
294 | 1
295 |
296 |
297 | 1
298 |
299 |
300 |
301 |
302 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
303 | 1
304 |
305 |
306 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
307 | 1
308 |
309 |
310 |
311 |
312 | library\lib\x86
313 | 1
314 |
315 |
316 |
317 |
318 | 1
319 |
320 |
321 | 1
322 |
323 |
324 | 1
325 |
326 |
327 |
328 |
329 |
330 | library\lib\armeabi
331 | 1
332 |
333 |
334 |
335 |
336 | 0
337 |
338 |
339 | 1
340 |
341 |
342 | 1
343 |
344 |
345 |
346 |
347 | 1
348 |
349 |
350 | 1
351 |
352 |
353 | 1
354 |
355 |
356 |
357 |
358 | res\drawable-normal
359 | 1
360 |
361 |
362 |
363 |
364 | res\drawable-xhdpi
365 | 1
366 |
367 |
368 |
369 |
370 | res\drawable-large
371 | 1
372 |
373 |
374 |
375 |
376 | 1
377 |
378 |
379 | 1
380 |
381 |
382 | 1
383 |
384 |
385 |
386 |
387 |
388 | res\drawable-hdpi
389 | 1
390 |
391 |
392 |
393 |
394 | library\lib\armeabi-v7a
395 | 1
396 |
397 |
398 |
399 |
400 |
401 |
402 | 1
403 |
404 |
405 | 1
406 |
407 |
408 | 1
409 |
410 |
411 |
412 |
413 | res\values
414 | 1
415 |
416 |
417 |
418 |
419 | res\drawable-small
420 | 1
421 |
422 |
423 |
424 |
425 | res\drawable
426 | 1
427 |
428 |
429 |
430 |
431 | 1
432 |
433 |
434 | 1
435 |
436 |
437 | 1
438 |
439 |
440 |
441 |
442 | 1
443 |
444 |
445 |
446 |
447 | res\drawable
448 | 1
449 |
450 |
451 |
452 |
453 | 0
454 |
455 |
456 | 0
457 |
458 |
459 | 0
460 |
461 |
462 | 0
463 |
464 |
465 | 0
466 |
467 |
468 | 0
469 |
470 |
471 |
472 |
473 | library\lib\armeabi-v7a
474 | 1
475 |
476 |
477 |
478 |
479 | 0
480 | .bpl
481 |
482 |
483 | 1
484 | .dylib
485 |
486 |
487 | 1
488 | .dylib
489 |
490 |
491 | 1
492 | .dylib
493 |
494 |
495 | 1
496 | .dylib
497 |
498 |
499 |
500 |
501 | res\drawable-mdpi
502 | 1
503 |
504 |
505 |
506 |
507 | res\drawable-xlarge
508 | 1
509 |
510 |
511 |
512 |
513 | res\drawable-ldpi
514 | 1
515 |
516 |
517 |
518 |
519 | 0
520 | .dll;.bpl
521 |
522 |
523 | 1
524 | .dylib
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 | True
537 | True
538 | True
539 | True
540 | True
541 | True
542 | True
543 |
544 |
545 | 12
546 |
547 |
548 |
549 |
550 |
551 |
--------------------------------------------------------------------------------
/ObjectDebuggerFMX.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/ObjectDebuggerFMX.res
--------------------------------------------------------------------------------
/ObjectDebuggerFMXFrame.fmx:
--------------------------------------------------------------------------------
1 | object FMXObjectDebuggerFrame: TFMXObjectDebuggerFrame
2 | Size.Width = 350.000000000000000000
3 | Size.Height = 640.000000000000000000
4 | Size.PlatformDefault = False
5 | OnMouseDown = FrameMouseDown
6 | object Panel1: TPanel
7 | Anchors = [akLeft, akTop, akRight, akBottom]
8 | Size.Width = 350.000000000000000000
9 | Size.Height = 640.000000000000000000
10 | Size.PlatformDefault = False
11 | TabOrder = 8
12 | OnMouseDown = FrameMouseDown
13 | object cbForms: TComboBox
14 | Anchors = [akLeft, akTop, akRight]
15 | Position.X = 16.000000000000000000
16 | Position.Y = 16.000000000000000000
17 | Size.Width = 318.000000000000000000
18 | Size.Height = 22.000000000000000000
19 | Size.PlatformDefault = False
20 | TabOrder = 0
21 | OnChange = cbFormsChange
22 | end
23 | object cbComps: TComboBox
24 | Anchors = [akLeft, akTop, akRight]
25 | Position.X = 16.000000000000000000
26 | Position.Y = 48.000000000000000000
27 | Size.Width = 318.000000000000000000
28 | Size.Height = 22.000000000000000000
29 | Size.PlatformDefault = False
30 | TabOrder = 1
31 | OnChange = cbCompsChange
32 | end
33 | object TabControl1: TTabControl
34 | Anchors = [akLeft, akTop, akRight, akBottom]
35 | Position.X = 16.000000000000000000
36 | Position.Y = 88.000000000000000000
37 | Size.Width = 318.000000000000000000
38 | Size.Height = 537.000000000000000000
39 | Size.PlatformDefault = False
40 | TabHeight = 26.000000000000000000
41 | TabIndex = 0
42 | TabOrder = 5
43 | TabPosition = PlatformDefault
44 | object TabItemProperties: TTabItem
45 | CustomIcon = <
46 | item
47 | end>
48 | IsSelected = True
49 | Size.Width = 74.000000000000000000
50 | Size.Height = 26.000000000000000000
51 | Size.PlatformDefault = False
52 | StyleLookup = ''
53 | TabOrder = 0
54 | Text = 'Properties'
55 | ExplicitSize.cx = 50.000000000000000000
56 | ExplicitSize.cy = 26.000000000000000000
57 | object ListSet: TListView
58 | ItemAppearanceClassName = 'TListItemAppearance'
59 | ItemEditAppearanceClassName = 'TListItemShowCheckAppearance'
60 | HeaderAppearanceClassName = 'TListHeaderObjects'
61 | FooterAppearanceClassName = 'TListHeaderObjects'
62 | EditMode = True
63 | Position.X = 128.000000000000000000
64 | Position.Y = 88.000000000000000000
65 | TabOrder = 7
66 | OnExit = RefreshOnExit
67 | ItemAppearance.ItemHeight = 22
68 | ItemAppearance.ItemEditHeight = 22
69 | ItemAppearance.HeaderHeight = 1
70 | ItemAppearance.FooterHeight = 1
71 | OnClick = ListSetClick
72 | NativeOptions = [Styled]
73 | end
74 | object EditNum: TEdit
75 | Touch.InteractiveGestures = [LongTap, DoubleTap]
76 | TabOrder = 4
77 | Position.X = 40.000000000000000000
78 | OnChange = EditChange
79 | OnKeyDown = EditNumKeyDown
80 | OnExit = EditNumExit
81 | end
82 | object EditCh: TEdit
83 | Touch.InteractiveGestures = [LongTap, DoubleTap]
84 | TabOrder = 5
85 | Position.X = 16.000000000000000000
86 | OnChange = EditChange
87 | OnExit = EditChExit
88 | end
89 | object EditStr: TEdit
90 | Touch.InteractiveGestures = [LongTap, DoubleTap]
91 | TabOrder = 6
92 | Position.X = 24.000000000000000000
93 | OnChange = EditChange
94 | OnExit = EditStrExit
95 | end
96 | object ComboEnum: TComboEdit
97 | Touch.InteractiveGestures = [LongTap, DoubleTap]
98 | TabOrder = 3
99 | ItemHeight = 19.000000000000000000
100 | ItemIndex = -1
101 | Position.X = 40.000000000000000000
102 | OnChange = ComboEnumChange
103 | OnDblClick = ComboEnumDblClick
104 | OnExit = RefreshOnExit
105 | end
106 | object ComboCursor: TComboEdit
107 | Touch.InteractiveGestures = [LongTap, DoubleTap]
108 | TabOrder = 1
109 | ItemHeight = 19.000000000000000000
110 | ItemIndex = -1
111 | OnChange = ComboCursorChange
112 | OnExit = RefreshOnExit
113 | end
114 | object ComboColor: TComboEdit
115 | Touch.InteractiveGestures = [LongTap, DoubleTap]
116 | TabOrder = 2
117 | ItemHeight = 19.000000000000000000
118 | ItemIndex = -1
119 | Position.X = 56.000000000000000000
120 | OnChange = ComboColorChange
121 | OnDblClick = ComboColorDblClick
122 | OnExit = RefreshOnExit
123 | end
124 | object sgProp: TStringGrid
125 | OnTap = sgPropTap
126 | Align = Client
127 | Size.Width = 318.000000000000000000
128 | Size.Height = 511.000000000000000000
129 | Size.PlatformDefault = False
130 | TabOrder = 0
131 | OnResize = sgPropResize
132 | OnDblClick = sgPropDblClick
133 | OnViewportPositionChange = sgPropViewportPositionChange
134 | Options = [ColumnResize, ColLines, RowLines, Tabs, Header, HeaderClick]
135 | RowCount = 100
136 | RowHeight = 21.000000000000000000
137 | OnHeaderClick = sgPropHeaderClick
138 | OnSelectCell = sgPropSelectCell
139 | Viewport.Width = 298.000000000000000000
140 | Viewport.Height = 486.000000000000000000
141 | object StringColumn1: TStringColumn
142 | Size.Width = 145.000000000000000000
143 | Size.Height = 504.000000000000000000
144 | Size.PlatformDefault = False
145 | TabOrder = 0
146 | end
147 | object StringColumn2: TStringColumn
148 | Position.X = 145.000000000000000000
149 | Size.Width = 145.000000000000000000
150 | Size.Height = 504.000000000000000000
151 | Size.PlatformDefault = False
152 | TabOrder = 1
153 | end
154 | end
155 | end
156 | object TabItemEvents: TTabItem
157 | CustomIcon = <
158 | item
159 | end>
160 | IsSelected = False
161 | Size.Width = 54.000000000000000000
162 | Size.Height = 26.000000000000000000
163 | Size.PlatformDefault = False
164 | StyleLookup = ''
165 | TabOrder = 0
166 | Text = 'Events'
167 | ExplicitSize.cx = 50.000000000000000000
168 | ExplicitSize.cy = 26.000000000000000000
169 | object sgEvt: TStringGrid
170 | Align = Client
171 | Size.Width = 50.000000000000000000
172 | Size.Height = 50.000000000000000000
173 | Size.PlatformDefault = False
174 | TabOrder = 0
175 | OnResize = sgResize
176 | Options = [ColumnResize, ColLines, RowLines, Tabs, Header, HeaderClick]
177 | RowCount = 20
178 | RowHeight = 21.000000000000000000
179 | OnHeaderClick = sgEvtHeaderClick
180 | OnSelectCell = sgPropSelectCell
181 | Viewport.Width = 314.000000000000000000
182 | Viewport.Height = 486.000000000000000000
183 | object StringColumn3: TStringColumn
184 | Size.Width = 145.000000000000000000
185 | Size.Height = 63.000000000000000000
186 | Size.PlatformDefault = False
187 | TabOrder = 0
188 | end
189 | object StringColumn5: TStringColumn
190 | Position.X = 145.000000000000000000
191 | Size.Width = 145.000000000000000000
192 | Size.Height = 420.000000000000000000
193 | Size.PlatformDefault = False
194 | TabOrder = 1
195 | end
196 | end
197 | end
198 | object TabItemData: TTabItem
199 | CustomIcon = <
200 | item
201 | end>
202 | IsSelected = False
203 | Size.Width = 44.000000000000000000
204 | Size.Height = 26.000000000000000000
205 | Size.PlatformDefault = False
206 | StyleLookup = ''
207 | TabOrder = 0
208 | Text = 'Data'
209 | ExplicitSize.cx = 50.000000000000000000
210 | ExplicitSize.cy = 26.000000000000000000
211 | object sgData: TStringGrid
212 | Align = Client
213 | Size.Width = 50.000000000000000000
214 | Size.Height = 50.000000000000000000
215 | Size.PlatformDefault = False
216 | TabOrder = 0
217 | OnResize = sgResize
218 | Options = [ColumnResize, ColLines, RowLines, Tabs, Header, HeaderClick]
219 | RowCount = 20
220 | RowHeight = 21.000000000000000000
221 | OnHeaderClick = sgDataHeaderClick
222 | OnSelectCell = sgDataSelectCell
223 | Viewport.Width = 314.000000000000000000
224 | Viewport.Height = 486.000000000000000000
225 | object StringColumn4: TStringColumn
226 | Size.Width = 145.000000000000000000
227 | Size.Height = 63.000000000000000000
228 | Size.PlatformDefault = False
229 | TabOrder = 0
230 | end
231 | object StringColumn6: TStringColumn
232 | Position.X = 145.000000000000000000
233 | Size.Width = 145.000000000000000000
234 | Size.Height = 420.000000000000000000
235 | Size.PlatformDefault = False
236 | TabOrder = 1
237 | end
238 | end
239 | end
240 | end
241 | object Timer1: TTimer
242 | Interval = 2000
243 | OnTimer = Timer1Timer
244 | Left = 272
245 | Top = 16
246 | end
247 | object PopupMenu1: TPopupMenu
248 | Left = 304
249 | Top = 16
250 | object MenuItem1: TMenuItem
251 | Text = 'Options'
252 | object MenuItem9: TMenuItem
253 | Locked = True
254 | Text = 'Refresh Forms'
255 | OnClick = MenuItemRefreshFormsClick
256 | end
257 | object MenuItem12: TMenuItem
258 | Locked = True
259 | Text = 'Refresh Components'
260 | OnClick = MenuItemRefreshComponentsClick
261 | end
262 | object MenuItem13: TMenuItem
263 | Locked = True
264 | Text = 'Refresh Values'
265 | OnClick = MenuItemRefreshValuesClick
266 | end
267 | object MenuItem14: TMenuItem
268 | Locked = True
269 | Text = '-'
270 | end
271 | object MenuItemVisible: TMenuItem
272 | Locked = True
273 | IsChecked = True
274 | Text = 'Visible'
275 | OnClick = MenuItemVisibleClick
276 | end
277 | end
278 | object MenuItem2: TMenuItem
279 | Text = 'Help'
280 | object MenuItem16: TMenuItem
281 | Locked = True
282 | Text = 'Info...'
283 | OnClick = MenuItemInfoClick
284 | end
285 | object MenuItem17: TMenuItem
286 | Locked = True
287 | Text = 'About...'
288 | OnClick = MenuItemAboutClick
289 | end
290 | end
291 | end
292 | end
293 | end
294 |
--------------------------------------------------------------------------------
/ObjectDebuggerFMXFrame.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/ObjectDebuggerFMXFrame.pas
--------------------------------------------------------------------------------
/ProjectGroupComponent.groupproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {BFB0EB71-E91E-4436-B776-0D4058DF4BD8}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Default.Personality.12
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Object-Debugger-for-FireMonkey
2 | A run-time object inspector for Delphi FireMonkey applications
3 |
4 | README
5 |
6 | The FMX ObjectDebugger is a run-time Object Inspector for Delphi FireMonkey applications (Windows 32 bit, Windows 64 bit, Mac OS X, iOS, Android).
7 |
8 | Licensed under MPL 2.0, https://www.mozilla.org/en-US/MPL/2.0/ .
9 |
10 | Copyright (c) 2016 Daniel Horn
11 |
12 |
13 | Developed with Delphi/RAD Studio 10 Seattle.
14 | Based on version 5.0 of the (VCL) Object Debugger for Delphi by Marco Cantù:
15 | http://blog.marcocantu.com/blog/2016-february-objectdebugger-delphi10seattle.html
16 |
17 |
18 | WHAT'S HERE
19 |
20 | The projects included in this project group are:
21 |
22 |
23 | DemoMobile - A simple demo program that uses the component. This shows how you might use the component in an Android or iOS app though it will also run on Windows and Mac OS X.
24 | (Run this first on Win32 to make sure there are no problems.)
25 |
26 | DemoDesktop - Similar to DemoMobile but intended for Windows and Mac because the Object Inspector runs in its own form.
27 |
28 | ObjectDebuggerFMXTest - If you intend to modify the component, this project is a simple way of building and running the ObjectDebuggerFMXFrame class directly
29 | in an app (this is a way of avoiding any install/uninstall issues that may come up while changing the code).
30 |
31 |
32 | INSTRUCTIONS
33 |
34 | 1) To build open the project group in Delphi.
35 |
36 | 2) Open ObjectDebuggerFMXFrame in Design Mode. In the Structure pane, right-click on FMXObjectDebuggerFrame and select Add to Palette.
37 | The Component Template Information dialog appears.
38 | Accept the defaults (TFMXObjectDebuggerFrameTemplate for Component Name and Templates for Palette Page.
39 |
40 | 3) Select the Demo project and Target Platform on which you intend to run (e.g., Win32 or OX X).
41 |
42 | 4) Some simple examples of what you can do when running the Demo application:
43 | choose the edit field and change its Text property using the inspector;
44 | change the cursor;
45 | choose the listbox or combobox and add modify its content (the Items property) or change its selected item (ItemIndex).
46 |
47 | 5) When adding it to your own project, remember to also add the FormMessage.pas file to the project.
48 |
49 |
50 | NOTES
51 |
52 | This is essentially a FireMonkey version of the Object Debugger (for VCL) by Marco Cantu.
53 | (For those who are interested in comparing the two implementations, an attempt was made to use names
54 | similar to those in the VCL version.)
55 |
56 | Some differences and items to note include:
57 |
58 | 1) The RTTI code works on several platforms: not only Windows but also Mac OS X, iOS, and Android.
59 | The changes needed to accomplish this included using TypInfo calls such as GetTypeName and GetPropName and
60 | adding a routine for reading bytes as a "ShortString" and converting it to a string (the ShortString type does not exist on iOS and Android).
61 |
62 |
63 | 2) Besides using FireMonkey, the chief UI difference is that the main component is a TFrame instead of a TForm.
64 | This gives more flexibility, especially if one intends to use this in a mobile app (in which more than one form may not be visible).
65 | More specifically, if the form you want to inspect belongs to:
66 |
67 | a) an iOS or Android app:
68 | you will want to add this frame directly to that form; otherwise, you have no clear way to see both the form and the ObjectDebugger at the same time;
69 |
70 | b) a Windows or Mac desktop app:
71 | you will probably prefer to put the ObjectDebugger frame in its own window so as not to change the layout of the form.
72 |
73 | Because it is a frame and not a form, it makes more sense to provide a menu via a TPopupMenu (invoked by a right mouse click) rather
74 | than a TMainMenu.
75 |
76 |
77 | 3) This has been tested on Windows 10 (32 bit app on 64 bit Windows), Mac OS X (SDK 10.11.2 on 10.11.3),
78 | iOS Simulator 9.2 (iPad Air 2), and Android (SDK 24.3.3 32bit on Samsung SM-T217S running Android 4.4.2).
79 | While the RTTI code works on all platforms, the emphasis on UI has been for Windows and Mac.
80 | Developers using this component on iOS or Android will probably want to make adjustments to the UI.
81 | (For example, the default component size is too big for an iPhone).
82 |
83 |
84 | 4) Evidently, the FireMonkey TStringGrid component does not generate OnVScrollChange and OnHScrollChange events on the Mac.
85 | The simple solution to this is just use the OnViewportPositionChange event handler instead in FireMonkey apps.
86 |
87 |
88 | 5) Since the FMX ShowMessage messagebox does not let you assign a caption, we provide a simple replacement, FormMessage;
89 | in addition to acting like ShowMessage replacement, it can also be used to display a TPanel.
90 |
91 |
92 | See the comments in the ObjectDebuggerFMXFrame.pas source file for more information.
93 |
--------------------------------------------------------------------------------
/README.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/README.txt
--------------------------------------------------------------------------------
/Test/ObjectDebuggerFMXTest.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 | ObjectDebuggerFMXTest.app\
9 | Default-568h@2x.png
10 | iPhone_Launch640x1136
11 | 1
12 |
13 |
14 | True
15 |
16 |
17 | ObjectDebuggerFMXTest.app\
18 | FM_ApplicationIcon_57x57.png
19 | iPhone_AppIcon57
20 | 0
21 |
22 |
23 | True
24 |
25 |
26 | ObjectDebuggerFMXTest.app\
27 | FM_ApplicationIcon_144x144.png
28 | iPad_AppIcon144
29 | 0
30 |
31 |
32 | True
33 |
34 |
35 | ObjectDebuggerFMXTest.app\
36 | Default-667h@2x.png
37 | iPhone_Launch750
38 | 0
39 |
40 |
41 | True
42 |
43 |
44 | ObjectDebuggerFMXTest.app\
45 | Default@2x.png
46 | iPhone_Launch640
47 | 1
48 |
49 |
50 | True
51 |
52 |
53 | ObjectDebuggerFMXTest.app\
54 | Default-Portrait@2x.png
55 | iPad_Launch1536
56 | 1
57 |
58 |
59 | True
60 |
61 |
62 | ObjectDebuggerFMXTest.app\
63 | Default.png
64 | iPhone_Launch320
65 | 1
66 |
67 |
68 | True
69 |
70 |
71 | ObjectDebuggerFMXTest.app\
72 | FM_ApplicationIcon_120x120.png
73 | iPhone_AppIcon120
74 | 0
75 |
76 |
77 | True
78 |
79 |
80 | ObjectDebuggerFMXTest.app\
81 | Default~ipad.png
82 | iPad_Launch768
83 | 1
84 |
85 |
86 | True
87 |
88 |
89 | ObjectDebuggerFMXTest.app\
90 | FM_SpotlightSearchIcon_50x50.png
91 | iPad_SpotLight50
92 | 0
93 |
94 |
95 | True
96 |
97 |
98 | ObjectDebuggerFMXTest.app\
99 | FM_ApplicationIcon_76x76.png
100 | iPad_AppIcon76
101 | 0
102 |
103 |
104 | True
105 |
106 |
107 | ObjectDebuggerFMXTest.app\../\
108 | ObjectDebuggerFMXTest.entitlements
109 | ProjectiOSEntitlements
110 | 1
111 |
112 |
113 | True
114 |
115 |
116 | ObjectDebuggerFMXTest.app\
117 | FM_SpotlightSearchIcon_80x80.png
118 | iPad_SpotLight80
119 | 0
120 |
121 |
122 | True
123 |
124 |
125 | ObjectDebuggerFMXTest.app\
126 | FM_SpotlightSearchIcon_40x40.png
127 | iPhone_Spotlight40
128 | 0
129 |
130 |
131 | True
132 |
133 |
134 | ObjectDebuggerFMXTest.app\
135 | Default-736h@3x.png
136 | iPhone_Launch1242
137 | 0
138 |
139 |
140 | True
141 |
142 |
143 | ObjectDebuggerFMXTest.app\
144 | FM_SpotlightSearchIcon_40x40.png
145 | iPad_SpotLight40
146 | 0
147 |
148 |
149 | True
150 |
151 |
152 | ObjectDebuggerFMXTest.app\
153 | FM_ApplicationIcon_180x180.png
154 | iPhone_AppIcon180
155 | 0
156 |
157 |
158 | True
159 |
160 |
161 | ObjectDebuggerFMXTest.app\
162 | FM_ApplicationIcon_60x60.png
163 | iPhone_AppIcon60
164 | 0
165 |
166 |
167 | True
168 |
169 |
170 | ObjectDebuggerFMXTest.app\
171 | FM_SettingIcon_29x29.png
172 | iPad_Setting29
173 | 0
174 |
175 |
176 | True
177 |
178 |
179 | ObjectDebuggerFMXTest.app\
180 | FM_SettingIcon_58x58.png
181 | iPad_Setting58
182 | 0
183 |
184 |
185 | True
186 |
187 |
188 | ObjectDebuggerFMXTest.app\
189 | ObjectDebuggerFMXTest
190 | ProjectOutput
191 | 1
192 |
193 |
194 | True
195 | True
196 |
197 |
198 | $(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\
199 | ObjectDebuggerFMXTest
200 | ProjectiOSDeviceDebug
201 | 1
202 |
203 |
204 | True
205 |
206 |
207 | ObjectDebuggerFMXTest.app\
208 | FM_ApplicationIcon_72x72.png
209 | iPad_AppIcon72
210 | 0
211 |
212 |
213 | True
214 |
215 |
216 | ObjectDebuggerFMXTest.app\
217 | Default-Portrait@2x~ipad.png
218 | iPad_Launch1536x2048
219 | 0
220 |
221 |
222 | True
223 |
224 |
225 | ObjectDebuggerFMXTest.app\
226 | Default-Landscape@2x.png
227 | iPad_Launch2048
228 | 1
229 |
230 |
231 | True
232 |
233 |
234 | ObjectDebuggerFMXTest.app\
235 | FM_SpotlightSearchIcon_100x100.png
236 | iPad_SpotLight100
237 | 0
238 |
239 |
240 | True
241 |
242 |
243 | ObjectDebuggerFMXTest.app\
244 | Info.plist
245 | ProjectiOSInfoPList
246 | 1
247 |
248 |
249 | True
250 |
251 |
252 | ObjectDebuggerFMXTest.app\
253 | Default-Portrait~ipad.png
254 | iPad_Launch768x1024
255 | 0
256 |
257 |
258 | True
259 |
260 |
261 | ObjectDebuggerFMXTest.app\
262 | FM_ApplicationIcon_114x114.png
263 | iPhone_AppIcon114
264 | 0
265 |
266 |
267 | True
268 |
269 |
270 | ObjectDebuggerFMXTest.app\
271 | Default-Landscape-736h@3x.png
272 | iPhone_Launch2208
273 | 0
274 |
275 |
276 | True
277 |
278 |
279 | ObjectDebuggerFMXTest.app\
280 | Default-Landscape.png
281 | iPad_Launch1024
282 | 1
283 |
284 |
285 | True
286 |
287 |
288 | ObjectDebuggerFMXTest.app\
289 | FM_ApplicationIcon_152x152.png
290 | iPad_AppIcon152
291 | 0
292 |
293 |
294 | True
295 |
296 |
297 | ObjectDebuggerFMXTest.app\
298 | FM_ApplicationIcon_87x87.png
299 | iPhone_AppIcon87
300 | 0
301 |
302 |
303 | True
304 |
305 |
306 | ObjectDebuggerFMXTest.app\
307 | FM_SpotlightSearchIcon_29x29.png
308 | iPhone_Spotlight29
309 | 0
310 |
311 |
312 | True
313 |
314 |
315 | ObjectDebuggerFMXTest.app\
316 | ResourceRules.plist
317 | ProjectiOSDeviceResourceRules
318 | 1
319 |
320 |
321 | True
322 |
323 |
324 | ObjectDebuggerFMXTest.app\
325 | Default-Landscape@2x~ipad.png
326 | iPad_Launch2048x1536
327 | 0
328 |
329 |
330 | True
331 |
332 |
333 | ObjectDebuggerFMXTest.app\
334 | Default-Landscape~ipad.png
335 | iPad_Launch1024x768
336 | 0
337 |
338 |
339 | True
340 |
341 |
342 |
343 |
344 |
345 |
346 | ObjectDebuggerFMXTest\
347 | ObjectDebuggerFMXTest.exe
348 | ProjectOutput
349 | 0
350 |
351 |
352 | True
353 | True
354 |
355 |
356 |
357 |
358 | ObjectDebuggerFMXTest.app\Contents\Resources\
359 | ObjectDebuggerFMXTest.icns
360 | ProjectOSXResource
361 | 1
362 |
363 |
364 | True
365 |
366 |
367 | ObjectDebuggerFMXTest.app\Contents\MacOS\
368 | libcgunwind.1.0.dylib
369 | DependencyModule
370 | 1
371 |
372 |
373 | True
374 |
375 |
376 | ObjectDebuggerFMXTest.app\Contents\MacOS\
377 | ObjectDebuggerFMXTest
378 | ProjectOutput
379 | 1
380 |
381 |
382 | True
383 | True
384 |
385 |
386 | ObjectDebuggerFMXTest.app\Contents\MacOS\
387 | ObjectDebuggerFMXTest.rsm
388 | DebugSymbols
389 | 1
390 |
391 |
392 | True
393 |
394 |
395 | ObjectDebuggerFMXTest.app\../\
396 | ObjectDebuggerFMXTest.entitlements
397 | ProjectOSXEntitlements
398 | 1
399 |
400 |
401 | True
402 |
403 |
404 | ObjectDebuggerFMXTest.app\Contents\
405 | Info.plist
406 | ProjectOSXInfoPList
407 | 1
408 |
409 |
410 | True
411 |
412 |
413 |
414 |
415 | ObjectDebuggerFMXTest\res\drawable-small\
416 | splash_image.png
417 | Android_SplashImage426
418 | 1
419 |
420 |
421 | True
422 |
423 |
424 | ObjectDebuggerFMXTest\res\drawable\
425 | splash_image_def.xml
426 | AndroidSplashImageDef
427 | 1
428 |
429 |
430 | True
431 |
432 |
433 | ObjectDebuggerFMXTest\res\drawable-large\
434 | splash_image.png
435 | Android_SplashImage640
436 | 1
437 |
438 |
439 | True
440 |
441 |
442 | ObjectDebuggerFMXTest\res\drawable-mdpi\
443 | ic_launcher.png
444 | Android_LauncherIcon48
445 | 1
446 |
447 |
448 | True
449 |
450 |
451 | ObjectDebuggerFMXTest\classes\
452 | classes.dex
453 | AndroidClassesDexFile
454 | 1
455 |
456 |
457 | True
458 |
459 |
460 | ObjectDebuggerFMXTest\res\values\
461 | styles.xml
462 | AndroidSplashStyles
463 | 1
464 |
465 |
466 | True
467 |
468 |
469 | ObjectDebuggerFMXTest\res\drawable-ldpi\
470 | ic_launcher.png
471 | Android_LauncherIcon36
472 | 1
473 |
474 |
475 | True
476 |
477 |
478 | ObjectDebuggerFMXTest\res\drawable-hdpi\
479 | ic_launcher.png
480 | Android_LauncherIcon72
481 | 1
482 |
483 |
484 | True
485 |
486 |
487 | ObjectDebuggerFMXTest\library\lib\mips\
488 | libObjectDebuggerFMXTest.so
489 | AndroidLibnativeMipsFile
490 | 1
491 |
492 |
493 | True
494 |
495 |
496 | ObjectDebuggerFMXTest\
497 | AndroidManifest.xml
498 | ProjectAndroidManifest
499 | 1
500 |
501 |
502 | True
503 |
504 |
505 | ObjectDebuggerFMXTest\library\lib\armeabi\
506 | libObjectDebuggerFMXTest.so
507 | AndroidLibnativeArmeabiFile
508 | 1
509 |
510 |
511 | True
512 |
513 |
514 | ObjectDebuggerFMXTest\res\drawable-xxhdpi\
515 | ic_launcher.png
516 | Android_LauncherIcon144
517 | 1
518 |
519 |
520 | True
521 |
522 |
523 | ObjectDebuggerFMXTest\res\drawable-xhdpi\
524 | ic_launcher.png
525 | Android_LauncherIcon96
526 | 1
527 |
528 |
529 | True
530 |
531 |
532 | ObjectDebuggerFMXTest\res\drawable-xlarge\
533 | splash_image.png
534 | Android_SplashImage960
535 | 1
536 |
537 |
538 | True
539 |
540 |
541 | ObjectDebuggerFMXTest\library\lib\armeabi-v7a\
542 | libObjectDebuggerFMXTest.so
543 | ProjectOutput
544 | 1
545 |
546 |
547 | True
548 | True
549 |
550 |
551 | ObjectDebuggerFMXTest\library\lib\armeabi-v7a\
552 | gdbserver
553 | AndroidGDBServer
554 | 1
555 |
556 |
557 | True
558 |
559 |
560 | ObjectDebuggerFMXTest\res\drawable-normal\
561 | splash_image.png
562 | Android_SplashImage470
563 | 1
564 |
565 |
566 | True
567 |
568 |
569 | ObjectDebuggerFMXTest\library\lib\x86\
570 | libObjectDebuggerFMXTest.so
571 | AndroidLibnativeX86File
572 | 1
573 |
574 |
575 | True
576 |
577 |
578 |
579 |
580 | ObjectDebuggerFMXTest.app\
581 | FM_ApplicationIcon_144x144.png
582 | iPad_AppIcon144
583 | 0
584 |
585 |
586 | True
587 |
588 |
589 | ObjectDebuggerFMXTest.app\
590 | FM_SpotlightSearchIcon_100x100.png
591 | iPad_SpotLight100
592 | 0
593 |
594 |
595 | True
596 |
597 |
598 | ObjectDebuggerFMXTest.app\
599 | FM_ApplicationIcon_114x114.png
600 | iPhone_AppIcon114
601 | 0
602 |
603 |
604 | True
605 |
606 |
607 | ObjectDebuggerFMXTest.app\
608 | FM_ApplicationIcon_152x152.png
609 | iPad_AppIcon152
610 | 0
611 |
612 |
613 | True
614 |
615 |
616 | ObjectDebuggerFMXTest.app\
617 | ObjectDebuggerFMXTest
618 | ProjectOutput
619 | 1
620 |
621 |
622 | True
623 | True
624 |
625 |
626 | ObjectDebuggerFMXTest.app\
627 | Default-667h@2x.png
628 | iPhone_Launch750
629 | 0
630 |
631 |
632 | True
633 |
634 |
635 | ObjectDebuggerFMXTest.app\
636 | FM_ApplicationIcon_72x72.png
637 | iPad_AppIcon72
638 | 0
639 |
640 |
641 | True
642 |
643 |
644 | ObjectDebuggerFMXTest.app\
645 | libcgunwind.1.0.dylib
646 | DependencyModule
647 | 1
648 |
649 |
650 | True
651 |
652 |
653 | ObjectDebuggerFMXTest.app\
654 | Default-Portrait~ipad.png
655 | iPad_Launch768x1024
656 | 0
657 |
658 |
659 | True
660 |
661 |
662 | ObjectDebuggerFMXTest.app\
663 | Default@2x.png
664 | iPhone_Launch640
665 | 1
666 |
667 |
668 | True
669 |
670 |
671 | ObjectDebuggerFMXTest.app\
672 | FM_SpotlightSearchIcon_40x40.png
673 | iPhone_Spotlight40
674 | 0
675 |
676 |
677 | True
678 |
679 |
680 | ObjectDebuggerFMXTest.app\
681 | FM_ApplicationIcon_87x87.png
682 | iPhone_AppIcon87
683 | 0
684 |
685 |
686 | True
687 |
688 |
689 | ObjectDebuggerFMXTest.app\
690 | Default.png
691 | iPhone_Launch320
692 | 1
693 |
694 |
695 | True
696 |
697 |
698 | ObjectDebuggerFMXTest.app\
699 | FM_ApplicationIcon_180x180.png
700 | iPhone_AppIcon180
701 | 0
702 |
703 |
704 | True
705 |
706 |
707 | ObjectDebuggerFMXTest.app\
708 | FM_SettingIcon_58x58.png
709 | iPad_Setting58
710 | 0
711 |
712 |
713 | True
714 |
715 |
716 | ObjectDebuggerFMXTest.app\
717 | Default-Portrait@2x~ipad.png
718 | iPad_Launch1536x2048
719 | 0
720 |
721 |
722 | True
723 |
724 |
725 | ObjectDebuggerFMXTest.app\
726 | FM_SpotlightSearchIcon_80x80.png
727 | iPad_SpotLight80
728 | 0
729 |
730 |
731 | True
732 |
733 |
734 | ObjectDebuggerFMXTest.app\
735 | FM_ApplicationIcon_120x120.png
736 | iPhone_AppIcon120
737 | 0
738 |
739 |
740 | True
741 |
742 |
743 | ObjectDebuggerFMXTest.app\
744 | FM_SpotlightSearchIcon_50x50.png
745 | iPad_SpotLight50
746 | 0
747 |
748 |
749 | True
750 |
751 |
752 | ObjectDebuggerFMXTest.app\
753 | Default-568h@2x.png
754 | iPhone_Launch640x1136
755 | 1
756 |
757 |
758 | True
759 |
760 |
761 | ObjectDebuggerFMXTest.app\
762 | Default-Landscape.png
763 | iPad_Launch1024
764 | 1
765 |
766 |
767 | True
768 |
769 |
770 | ObjectDebuggerFMXTest.app\
771 | FM_SpotlightSearchIcon_40x40.png
772 | iPad_SpotLight40
773 | 0
774 |
775 |
776 | True
777 |
778 |
779 | ObjectDebuggerFMXTest.app\
780 | FM_ApplicationIcon_60x60.png
781 | iPhone_AppIcon60
782 | 0
783 |
784 |
785 | True
786 |
787 |
788 | ObjectDebuggerFMXTest.app\
789 | Default-Portrait@2x.png
790 | iPad_Launch1536
791 | 1
792 |
793 |
794 | True
795 |
796 |
797 | ObjectDebuggerFMXTest.app\
798 | Default-736h@3x.png
799 | iPhone_Launch1242
800 | 0
801 |
802 |
803 | True
804 |
805 |
806 | ObjectDebuggerFMXTest.app\
807 | Default~ipad.png
808 | iPad_Launch768
809 | 1
810 |
811 |
812 | True
813 |
814 |
815 | ObjectDebuggerFMXTest.app\
816 | ObjectDebuggerFMXTest.entitlements
817 | ProjectiOSEntitlements
818 | 0
819 |
820 |
821 | True
822 |
823 |
824 | ObjectDebuggerFMXTest.app\
825 | Default-Landscape@2x~ipad.png
826 | iPad_Launch2048x1536
827 | 0
828 |
829 |
830 | True
831 |
832 |
833 | ObjectDebuggerFMXTest.app\
834 | Default-Landscape~ipad.png
835 | iPad_Launch1024x768
836 | 0
837 |
838 |
839 | True
840 |
841 |
842 | ObjectDebuggerFMXTest.app\
843 | FM_ApplicationIcon_76x76.png
844 | iPad_AppIcon76
845 | 0
846 |
847 |
848 | True
849 |
850 |
851 | ObjectDebuggerFMXTest.app\
852 | libPCRE.dylib
853 | DependencyModule
854 | 1
855 |
856 |
857 | True
858 |
859 |
860 | ObjectDebuggerFMXTest.app\
861 | Info.plist
862 | ProjectiOSInfoPList
863 | 1
864 |
865 |
866 | True
867 |
868 |
869 | ObjectDebuggerFMXTest.app\
870 | Default-Landscape-736h@3x.png
871 | iPhone_Launch2208
872 | 0
873 |
874 |
875 | True
876 |
877 |
878 | ObjectDebuggerFMXTest.app\
879 | FM_ApplicationIcon_57x57.png
880 | iPhone_AppIcon57
881 | 0
882 |
883 |
884 | True
885 |
886 |
887 | ObjectDebuggerFMXTest.app\
888 | Default-Landscape@2x.png
889 | iPad_Launch2048
890 | 1
891 |
892 |
893 | True
894 |
895 |
896 | ObjectDebuggerFMXTest.app\
897 | FM_SpotlightSearchIcon_29x29.png
898 | iPhone_Spotlight29
899 | 0
900 |
901 |
902 | True
903 |
904 |
905 | ObjectDebuggerFMXTest.app\
906 | FM_SettingIcon_29x29.png
907 | iPad_Setting29
908 | 0
909 |
910 |
911 | True
912 |
913 |
914 |
915 |
--------------------------------------------------------------------------------
/Test/ObjectDebuggerFMXTest.dpr:
--------------------------------------------------------------------------------
1 | program ObjectDebuggerFMXTest;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | Unit1 in 'Unit1.pas' {Form1},
7 | Unit2 in 'Unit2.pas' {Form2},
8 | FormMessage in '..\FormMessage.pas' {MessageForm},
9 | ObjectDebuggerFMXFrame in '..\ObjectDebuggerFMXFrame.pas' {FMXObjectDebuggerFrame: TFrame};
10 |
11 | {$R *.res}
12 |
13 | begin
14 | Application.Initialize;
15 | Application.CreateForm(TForm1, Form1);
16 | Application.CreateForm(TForm2, Form2);
17 | Application.CreateForm(TMessageForm, MessageForm);
18 | Application.CreateForm(TFMXObjectDebuggerFrame, FMXObjectDebuggerFrame);
19 | Application.Run;
20 | end.
21 |
--------------------------------------------------------------------------------
/Test/ObjectDebuggerFMXTest.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dph2011/Object-Debugger-for-FireMonkey/3f966bac9f19e4bf8cba2c8d87ffc1b092589cf0/Test/ObjectDebuggerFMXTest.res
--------------------------------------------------------------------------------
/Test/Unit1.fmx:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 0
3 | Top = 0
4 | Caption = 'Form1'
5 | ClientHeight = 480
6 | ClientWidth = 640
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | OnShow = FormShow
11 | DesignerMasterStyle = 0
12 | object Button1: TButton
13 | Anchors = [akTop, akRight]
14 | Position.X = 432.000000000000000000
15 | Position.Y = 64.000000000000000000
16 | TabOrder = 1
17 | Text = 'Button1'
18 | OnClick = Button1Click
19 | end
20 | object Edit1: TEdit
21 | Touch.InteractiveGestures = [LongTap, DoubleTap]
22 | TabOrder = 2
23 | Position.X = 464.000000000000000000
24 | Position.Y = 392.000000000000000000
25 | end
26 | object ComboBox1: TComboBox
27 | Position.X = 440.000000000000000000
28 | Position.Y = 336.000000000000000000
29 | TabOrder = 4
30 | end
31 | object ListBox1: TListBox
32 | Position.X = 408.000000000000000000
33 | Position.Y = 120.000000000000000000
34 | TabOrder = 5
35 | DisableFocusEffect = True
36 | Items.Strings = (
37 | 'Item 0'
38 | 'Item 1'
39 | 'Item 2'
40 | 'Item 3')
41 | DefaultItemStyles.ItemStyle = ''
42 | DefaultItemStyles.GroupHeaderStyle = ''
43 | DefaultItemStyles.GroupFooterStyle = ''
44 | Viewport.Width = 196.000000000000000000
45 | Viewport.Height = 196.000000000000000000
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/Test/Unit1.pas:
--------------------------------------------------------------------------------
1 | unit Unit1;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
8 | FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.ListBox, FMX.Colors;
9 |
10 | type
11 | TForm1 = class(TForm)
12 | Button1: TButton;
13 | Edit1: TEdit;
14 | ComboBox1: TComboBox;
15 | ListBox1: TListBox;
16 | procedure FormShow(Sender: TObject);
17 | procedure Button1Click(Sender: TObject);
18 | private
19 | {Private declarations}
20 | public
21 | {Public declarations}
22 | end;
23 |
24 | var
25 | Form1: TForm1;
26 |
27 | implementation
28 |
29 | {$R *.fmx}
30 |
31 |
32 | uses
33 | ObjectDebuggerFMXFrame
34 | , Unit2 // Form2
35 | ;
36 |
37 | procedure TForm1.Button1Click(Sender: TObject);
38 | begin
39 | // TODO In iOS, need to find someone of keeping debug form on top or of bringing it back to the top.
40 | FMXObjectDebuggerFrame.Visible := True;
41 | FMXObjectDebuggerFrame.BringToFront;
42 | end;
43 |
44 | procedure TForm1.FormShow(Sender: TObject);
45 | begin
46 | Log.d('TForm1.FormShow');
47 |
48 | if nil = FMXObjectDebuggerFrame then
49 | FMXObjectDebuggerFrame := TFMXObjectDebuggerFrame.Create(Self);
50 |
51 | AddObject(FMXObjectDebuggerFrame);
52 | with FMXObjectDebuggerFrame do
53 | begin
54 | Visible := True;
55 | BringToFront;
56 | Position.X := 0;
57 | Position.Y := 0;
58 | Height := Self.ClientHeight;
59 | Anchors := [TAnchorKind.akLeft, TAnchorKind.akRight, TAnchorKind.akTop, TAnchorKind.akBottom];
60 | end;
61 |
62 | {$IFNDEF IOS}
63 | Form2.Show;
64 | {$ENDIF}
65 | end;
66 |
67 | initialization
68 |
69 | end.
70 |
--------------------------------------------------------------------------------
/Test/Unit2.fmx:
--------------------------------------------------------------------------------
1 | object Form2: TForm2
2 | Left = 0
3 | Top = 0
4 | Caption = 'Form2'
5 | ClientHeight = 480
6 | ClientWidth = 640
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | OnShow = FormShow
11 | DesignerMasterStyle = 0
12 | object RadioButton1: TRadioButton
13 | Position.X = 488.000000000000000000
14 | Position.Y = 168.000000000000000000
15 | TabOrder = 0
16 | Text = 'RadioButton1'
17 | end
18 | object Button1: TButton
19 | Position.X = 496.000000000000000000
20 | Position.Y = 112.000000000000000000
21 | TabOrder = 1
22 | Text = 'Button1'
23 | OnClick = Button1Click
24 | end
25 | object ComboBox1: TComboBox
26 | Items.Strings = (
27 | 'Item 0'
28 | 'Item 1'
29 | 'Item 2')
30 | Position.X = 488.000000000000000000
31 | Position.Y = 48.000000000000000000
32 | TabOrder = 2
33 | end
34 | end
35 |
--------------------------------------------------------------------------------
/Test/Unit2.pas:
--------------------------------------------------------------------------------
1 | unit Unit2;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListBox,
8 | FMX.StdCtrls, FMX.Controls.Presentation;
9 |
10 | type
11 | TForm2 = class(TForm)
12 | RadioButton1: TRadioButton;
13 | Button1: TButton;
14 | ComboBox1: TComboBox;
15 | procedure Button1Click(Sender: TObject);
16 | procedure FormShow(Sender: TObject);
17 | private
18 | { Private declarations }
19 | public
20 | { Public declarations }
21 | end;
22 |
23 | var
24 | Form2: TForm2;
25 |
26 | implementation
27 |
28 | {$R *.fmx}
29 |
30 | procedure TForm2.Button1Click(Sender: TObject);
31 | begin
32 | Self.Visible := False; // So we can hide the form in iOS
33 | end;
34 |
35 | procedure TForm2.FormShow(Sender: TObject);
36 | begin
37 | Log.d('TForm2.FormShow');
38 | end;
39 |
40 | end.
41 |
--------------------------------------------------------------------------------