Project

General

Profile

Statistics
| Revision:

vdfsplat / AppSrc / cProgramObjects.pkg @ 62

History | View | Annotate | Download (22.8 KB)

1
Use cOCXReader.pkg
2

    
3

    
4
Enum_List
5
   Define tvPDSRoot
6
   Define tvPDSClient
7
   Define tvPDSNormal
8
   Define tvPDSBitmap
9
   Define tvPDSCheckbox
10
   Define tvPDSCombo
11
   Define tvPDSContainer
12
   Define tvPDSEdit
13
   Define tvPDSSellist
14
   Define tvPDSForm
15
   Define tvPDSGrid
16
   Define tvPDSGroup
17
   Define tvPDSList
18
   Define tvPDSModalPanel
19
   Define tvPDSRadio
20
   Define tvPDSSpin
21
   Define tvPDSTabpage
22
   Define tvPDSTabDialog
23
   Define tvPDSTextbox
24
   Define tvPDSTrack
25
   Define tvPDSTreeview
26
   Define tvPDSView
27
   Define tvPDSRadioGroup
28
   Define tvPDSMenu
29
   Define tvPDSButton
30
   Define tvPDSActiveX
31
   Define tvPDSPanel
32
End_Enum_List
33

    
34
Enum_List
35
   Define bmpPDSRoot
36
   Define bmpPDSClient
37
   Define bmpPDSNormal
38
   Define bmpPDSBitmap
39
   Define bmpPDSCheckbox
40
   Define bmpPDSCombo
41
   Define bmpPDSContainer
42
   Define bmpPDSEdit
43
   Define bmpPDSSellist
44
   Define bmpPDSForm
45
   Define bmpPDSGrid
46
   Define bmpPDSGroup
47
   Define bmpPDSList
48
   Define bmpPDSModalPanel
49
   Define bmpPDSRadio
50
   Define bmpPDSSpin
51
   Define bmpPDSTabpage
52
   Define bmpPDSTabDialog
53
   Define bmpPDSTextbox
54
   Define bmpPDSTrack
55
   Define bmpPDSTreeview
56
   Define bmpPDSView
57
   Define bmpPDSRadioGroup
58
   Define bmpPDSMenu
59
   Define bmpPDSButton
60
   Define bmpPDSActiveX
61
   Define bmpPDSPanel
62
End_Enum_List
63

    
64

    
65
Enum_List
66
   Define eDfUnknown
67
   Define eDfArray
68
   Define eDfBitmap
69
   Define eDfCheckbox
70
   Define eDfCombo
71
   Define eDfContainer
72
   Define eDfDataDictionary
73
   Define eDfEdit
74
   Define eDfForm
75
   Define eDfGrid
76
   Define eDfGroup
77
   Define eDfList
78
   Define eDfModalPanel
79
   Define eDfRadio
80
   Define eDfSpin
81
   Define eDfTabpage
82
   Define eDfTabDialog
83
   Define eDfTextbox
84
   Define eDfTrack
85
   Define eDfTreeview
86
   Define eDfView
87
   Define eDfRadioGroup
88
   Define eDfMenu
89
   Define eDfButton
90
//   Define eDfActiveX
91
   Define eDfPanel
92
End_Enum_List
93

    
94

    
95

    
96
Struct tObj
97
  Boolean  bExists
98
  Handle   hID
99
  String   sName
100
  String   sShortName
101
  Integer  iChildCount
102
  Integer  eWindowsClass
103
  String   sWindowsClass
104
  Integer  eDfClass
105
  String   sProgID
106
  String   sOCXName
107
  Boolean  bDD             // is dd enabled
108
  Integer  iFile
109
  Integer  iField
110
  Integer  iInternalCount  // unused
111
  Handle   hParent
112
  Handle   hFirstChild
113
  Handle   hLastChild
114
  Handle   hPrevious
115
  Handle   hNext
116
End_Struct
117

    
118

    
119
Class cProgramObjects is a cObject
120
  Procedure Construct_Object
121
    Forward Send Construct_Object
122
    Property tObj[] pObjects
123
    Property tOCX[] pOCXs
124
    
125
  End_Procedure //
126
  
127
  Function ReadControlByProgID String sProgID Returns tOCX
128
    Handle  hoReader
129
    tOCX   OCX
130
    
131
    Move sProgID  To OCX.sProgID
132
    Get Create (RefClass(cOCXReader)) To hoReader
133
    If (hoReader) Begin
134
      Get ReadControlByProgID of hoReader sProgID To OCX
135
      Send Destroy       of hoReader
136
    End
137
    Function_Return OCX
138
  End_Function
139
  
140
  
141
  Function IsOCXinArray String sProgID Returns Integer
142
    Integer iItem
143
    Integer iOCX
144
    Integer iCount
145
    tOCX[]  OCXs
146
    
147
    Move -1 To iItem
148
    Get pOCXs To OCXs
149
    Move (SizeOfArray(OCXs)) To iCount
150
    For iOCX from 0 To (iCount-1)
151
      If (OCXs[iOCX].sProgID=sProgID) Begin
152
        Move iOCX   To iItem
153
        Move iCount To iOCX
154
      End
155
    Loop
156
    
157
    Function_Return iItem
158
  End_Function
159
  
160
  Function AddToOCXArray String sProgID Returns String
161
    Integer iOCX
162
    String  sControlName
163
    Integer iCount
164
    tOCX[]  OCXs
165
    
166
    Get pOCXs To OCXs
167
    Move (SizeOfArray(OCXs)) To iCount
168
    Get IsOCXinArray sProgID To iOCX
169
    If (iOCX=-1) Begin
170
      Get ReadControlByProgID sProgID To OCXs[iCount]
171
      Set pOCXs To OCXs
172
      Move OCXs[iCount].sName To sControlName
173
    End
174
    Else Begin
175
      Move OCXs[iOCX].sName To sControlName
176
    End
177
    Function_Return sControlName
178
  End_Function //
179
  
180
  //
181
  // String eval return output comes with quotes (eww)
182
  //
183
  Function RemoveQuotes String sValue Returns String
184
    Move (Mid(sValue,length(sValue)-2,2)) To sValue
185
    Function_Return sValue
186
  End_Function
187
  
188
  Function PropertyStringEval String sProperty Handle hObject Returns String
189
    Handle  hoDebugger
190
    String  sResult
191
    String  sValue
192
    Boolean bOK
193
    
194
    Move "" To sValue
195
    Get phoDebugger To hoDebugger
196
    If (hoDebugger and sProperty<>"") Begin
197
      Move "" To sResult
198
      Get ComEval of hoDebugger (sProperty+"("+trim(hObject)+")") (&sResult) to bOK
199
      If (bOk) begin
200
        Get RemoveQuotes sResult To sValue
201
      End
202
    End
203
    Function_Return sValue
204
  End_Function
205
  
206
  Function StringEval String sEval Returns String
207
    Handle  hoDebugger
208
    String  sResult
209
    String  sValue
210
    Boolean bOK
211
    
212
    Move "" To sValue
213
    Get phoDebugger To hoDebugger
214
    If (hoDebugger) Begin
215
      Move "" To sResult
216
      Get ComEval of hoDebugger (sEval) (&sResult) to bOK
217
      If (bOk) begin
218
        Get RemoveQuotes sResult To sValue
219
      End
220
    End
221
    Function_Return sValue
222
  End_Function
223
  
224
  Function PropertyIntegerEval String sProperty Handle hObject Returns Integer
225
    Handle  hoDebugger
226
    String  sResult
227
    Integer iValue
228
    Boolean bOK
229
    
230
    Move 0 To iValue
231
    Get phoDebugger To hoDebugger
232
    If (hoDebugger and sProperty<>"") Begin
233
      Move "" To sResult
234
      Get ComEval of hoDebugger (sProperty+"("+trim(hObject)+")") (&sResult) to bOK
235
      If (bOk) begin
236
        Move sResult To iValue
237
      End
238
    End
239
    Function_Return iValue
240
  End_Function
241
  
242
  Function PropertyVariantEval String sProperty Handle hObject Returns Variant
243
    Handle  hoDebugger
244
    String  sResult
245
    Variant vValue
246
    Boolean bOK
247
    
248
    Move (NullComObject()) To vValue
249
    Get phoDebugger To hoDebugger
250
    If (hoDebugger and sProperty<>"") Begin
251
      Move "" To sResult
252
      Get ComEval of hoDebugger (sProperty+"("+trim(hObject)+")") (&sResult) to bOK
253
      If (bOk) begin
254
        Move sResult To vValue
255
      End
256
    End
257
    Function_Return vValue
258
  End_Function
259
  
260
  Function PropertyHandleEval String sProperty Handle hObject Returns Handle
261
    Handle  hoDebugger
262
    String  sResult
263
    Integer hoValue
264
    Boolean bOK
265
    
266
    Move 0 To hoValue
267
    Get phoDebugger To hoDebugger
268
    If (hoDebugger and sProperty<>"") Begin
269
      Move "" To sResult
270
      Get ComEval of hoDebugger (sProperty+"("+trim(hObject)+")") (&sResult) to bOK
271
      If (bOk) begin
272
        Move sResult To hoValue
273
      End
274
    End
275
    Function_Return hoValue
276
  End_Function
277
  
278
  Function PropertyBooleanEval String sProperty Handle hObject Returns Boolean
279
    Handle  hoDebugger
280
    String  sResult
281
    Boolean bValue
282
    Boolean bOK
283
    
284
    Move False To bValue
285
    Get phoDebugger To hoDebugger
286
    If (hoDebugger and sProperty<>"") Begin
287
      Move "" To sResult
288
      Get ComEval of hoDebugger (sProperty+"("+trim(hObject)+")") (&sResult) to bOK
289
      If (bOk) begin
290
        Move sResult To bValue
291
      End
292
    End
293
    Function_Return bValue
294
  End_Function
295
  
296
  Function Program_Total_Objects Returns Integer
297
    String  sResult
298
    Handle  hoDebugger
299
    Integer iTotalObjects
300
    Boolean bOK
301
    
302
    Move 0 To iTotalObjects
303
    Get phoDebugger To hoDebugger
304
    If (hoDebugger) Begin
305
      Move "" To sResult
306
      Get ComEval of hoDebugger "total_objects" (&sResult) to bOK
307
      If (bOk) begin
308
        Move (sResult) To iTotalObjects
309
      End
310
    End
311
    Function_Return iTotalObjects
312
  End_Function
313

    
314
  
315
  Function Debuggee_Window_Handle Handle hObject Returns Handle
316
    String  sResult
317
    Handle  hoDebugger
318
    Handle  hWnd
319
    Boolean bOK
320
    
321
    Move 0 To hWnd
322
    Get phoDebugger To hoDebugger
323
    If (hoDebugger) Begin
324
      Move "" To sResult
325
      Get ComEval of hoDebugger ("Window_Handle("+trim(hObject)+")") (&sResult) to bOK
326
      If (bOk) begin
327
        Move (sResult) To hWnd
328
      End
329
    End
330
    Function_Return hWnd
331
  End_Function
332
  
333
  
334
  Function WindowsClassname Integer hObject Returns String
335
    String  sClassName
336
    Handle  hWnd
337
    Integer nChar
338
    
339
    Move "" To sClassName
340
    If (hObject>1) Begin
341
      Get Debuggee_Window_Handle hObject To hWnd
342
      If (hWnd<>0) Begin
343
        ZeroString 120 to sClassName
344
        Move (GetClassName(hWnd,AddressOf(sClassName),119)) To nChar
345
        If (nChar<>0) Begin
346
          Move (Left(CString(sClassName),nChar)) To sClassName
347
        End
348
        Else Move "" To sClassname
349
      End
350
      Else Move "" To sClassname
351
    End
352
    Function_Return sClassName
353
  End_Function // WindowsClassname
354
  
355
  Function Debuggee_Object_id Handle hObject Returns Handle
356
    String  sResult
357
    Handle  hoDebugger
358
    Handle  hObjectID
359
    Boolean bOK
360
    
361
    Move 0 To hObjectID
362
    Get phoDebugger To hoDebugger
363
    If (hoDebugger) Begin
364
      Move "" To sResult
365
      Get ComEval of hoDebugger ("Object_id("+trim(hObject)+")") (&sResult) to bOK
366
      If (bOk) begin
367
        Move (sResult) To hObjectID
368
      End
369
    End
370
    Function_Return hObjectID
371
  End_Function
372
  
373
  Function Debuggee_Object_Label Integer hObject Returns String
374
    Handle  hoDebugger
375
    String  sResult
376
    String  sLabel
377
    Boolean bOK
378
    
379
    Move "" To sLabel
380
    Get phoDebugger To hoDebugger
381
    If (hoDebugger) Begin
382
      Move "" To sResult
383
      Get ComEval of hoDebugger ("Object_Label("+trim(hObject)+")") (&sResult) to bOK
384
      If (bOk) begin
385
        Get RemoveQuotes sResult To sLabel
386
      End
387
    End
388
    Function_Return sLabel
389
  End_Function
390
  
391
  Function Debuggee_Object_Name Integer hObject Returns String
392
    Handle  hoDebugger
393
    String  sResult
394
    String  sName
395
    Boolean bOK
396
    
397
    Move "" To sName
398
    Get phoDebugger To hoDebugger
399
    If (hoDebugger) Begin
400
      Move "" To sResult
401
      Get ComEval of hoDebugger ("Name("+trim(hObject)+")") (&sResult) to bOK
402
      If (bOk) begin
403
        Get RemoveQuotes sResult To sName
404
      End
405
    End
406
    Function_Return sName
407
  End_Function
408
  
409
  Function Debuggee_Object_Child_Count Integer hObject Returns Integer
410
    Handle  hoDebugger
411
    String  sResult
412
    Integer iChildCount
413
    Boolean bOK
414
    
415
    Move 0 To iChildCount
416
    Get phoDebugger To hoDebugger
417
    If (hoDebugger) Begin
418
      Move "" To sResult
419
      Get ComEval of hoDebugger ("Child_Count("+trim(hObject)+")") (&sResult) to bOK
420
      If (bOk) begin
421
        Move (sResult) To iChildCount
422
      End
423
    End
424
    Function_Return iChildCount
425
  End_Function
426
  
427
  Function Debuggee_Object_Parent Integer hObject Returns handle
428
    String  sResult
429
    Handle  hoDebugger
430
    Handle  hParent
431
    Boolean bOK
432
    
433
    Move 0 To hParent
434
    Get phoDebugger To hoDebugger
435
    If (hoDebugger) Begin
436
      Move "" To sResult
437
      Get ComEval of hoDebugger ("Parent("+trim(hObject)+")") (&sResult) to bOK
438
      If (bOk) begin
439
        Move (sResult) To hParent
440
      End
441
    End
442
    Function_Return hParent
443
  End_Function
444
  
445
  Function Debuggee_Client_Area_State Integer hObject Returns Boolean
446
    String  sResult
447
    Handle  hoDebugger
448
    Boolean bState
449
    Boolean bOK
450
    
451
    Move False To bState
452
    Get phoDebugger To hoDebugger
453
    If (hoDebugger) Begin
454
      Move "" To sResult
455
      Get ComEval of hoDebugger ("Client_Area_State("+trim(hObject)+")") (&sResult) to bOK
456
      If (bOk) begin
457
        Move (sResult) To bState
458
      End
459
    End
460
    Function_Return bState
461
  End_Function
462
   
463
  Procedure CreateObjectArray
464
    Integer  iItem
465
    Integer  iChildCount
466
    Integer  iTotalObjects
467
    Integer  eClassName
468
    Handle   hObject
469
    Handle   hParent
470
    Handle   hPrevious
471
    String   sShortName
472
    String   sClassName
473
    String   sName
474
    String   sProgID
475
    String   sOCXName
476
    tObj[]   Obj
477
    tOCX[]   OCXs
478
    
479
    Move (ResizeArray(OCXs,0)) To OCXs
480
    Set pOCXs To OCXs
481
    
482
    Move (ResizeArray(Obj,0)) To Obj
483
    Get Program_Total_Objects To iTotalObjects
484
    For iItem from 1 To iTotalObjects         // iItem is actually the DataFlex object id
485
      Get Debuggee_Object_Id iItem To hObject // is the object id valid?
486
      If (hObject<>0) begin
487
        Move "" To sOCXName
488
        Move "" To sProgID
489
        Get Debuggee_Object_Label       iItem To sShortName
490
        Get Debuggee_Object_Name        iItem To sName
491
        Get Debuggee_Object_Child_Count iItem To iChildCount
492
        Get Debuggee_Object_Parent      iItem To hParent
493
        Get WindowsClassName iItem To sClassname
494
        Get WindowsClassFromString sClassName To eClassName
495
        If (eClassName=bmpPDSActiveX) Begin
496
          Get PropertyStringEval "psProgId" iItem to sProgID
497
          If (sProgID<>"") Begin
498
            Get AddToOCXArray sProgID To sOCXName
499
          End
500
        End
501

    
502
        Move True        To Obj[iItem].bExists
503
        Move iItem       To Obj[iItem].hID
504
        Move sShortName  To Obj[iItem].sShortName
505
        Move sName       To Obj[iItem].sName
506
        Move iChildCount To Obj[iItem].iChildCount
507
        Move hParent     To Obj[iItem].hParent
508
        Move eClassName  To Obj[iItem].eWindowsClass
509
        Move sClassName  To Obj[iItem].sWindowsClass
510
        Move sProgID     To Obj[iItem].sProgID
511
        Move sOCXName    To Obj[iItem].sOCXName
512
        If (hParent<iItem) Begin // should always be the case
513
          If (Obj[hParent].hFirstChild=0) Begin
514
            Move iItem To Obj[hParent].hFirstChild
515
          End
516
          If (Obj[hParent].hLastChild<>0) Begin
517
            // Previous Child
518
            Move Obj[hParent].hLastChild To hPrevious
519
            If (hPrevious<iItem) Begin
520
              Move iItem     To Obj[hPrevious].hNext
521
              Move hPrevious To Obj[iItem].hPrevious
522
            End
523
          End
524
          Move iItem To Obj[hParent].hLastChild
525
        End
526
      End
527
    Loop
528
    Set pObjects To Obj
529
  End_Procedure
530

    
531
   Function WindowsClassFromString String sClassName Returns Handle
532
    Integer iiImage
533
    Integer hWnd     hWnd2
534
    String  sObjName
535
    
536
    Move (Lowercase(sClassName)) To sClassName
537
    Case Begin
538
      Case (sClassname="dfform")
539
        Move bmpPDSForm to iiImage
540
        Case break
541
      Case (sClassname="dfeditbox")
542
        Move bmpPDSEdit to iiImage
543
        Case break
544
      Case (sClassname="dftextbox")
545
        Move bmpPDSTextbox to iiImage
546
        Case break
547
      Case (sClassname="dfmenu")
548
        Move bmpPDSButton to iiImage
549
        //Move bmpPDSMenu To iImage
550
        //Get name Of hObj To sObjName
551
        //Get Window_Handle Of hObj To hWnd  // --> returns incorrect value
552
        //Get Container_Handle Of hObj To hWnd2
553
        //Showln "<" sClassname "> --[" sObjName "] HANDLE = $" (IntToHex(hWnd)) "== CONTHWND $" (IntToHex(hWnd2))
554
        Case break
555
      Case (sClassname="dfgroup") // group
556
        Move bmpPDSGroup to iiImage
557
        Case break
558
      Case (sClassname="dfdialogclass") // container
559
        Move bmpPDSContainer to iiImage
560
        Case break
561
      Case (sClassname="dfcombobox") // comboform
562
        Move bmpPDSCombo to iiImage
563
        Case break
564
      Case (sClassname="dfmdichildclass") // view
565
        Move bmpPDSView To iiImage
566
        Case break
567
      Case (sClassname="dfwinclass") // toolpanel
568
        Move bmpPDSModalPanel to iiImage
569
        Case break
570
      Case (sClassname="dfmdiclient") // ClientArea
571
        Move bmpPDSModalPanel to iiImage
572
        Case break
573
      Case (sClassname="dfsystabcontrol32") // Tabdialog
574
        Move bmpPDSTabDialog to iiImage
575
        Case break
576
      Case (sClassname="dfformlist") // Grid (or List)
577
        Move bmpPDSGrid to iiImage
578
        Case break
579
      Case (sClassname="cvdfshape") // DFShape (some bitmapalike object)
580
        Move bmpPDSBitmap to iiImage
581
        Case break
582
      Case (sClassname="afxolecontrol42") // activex
583
        Move bmpPDSActiveX to iiImage
584
        Case break
585
      Case (sClassname="dfframeclass") // panel
586
        Move bmpPDSPanel to iiImage
587
        Case break
588
      Case Else
589
        Move -1 To iiImage
590
    Case End
591
    Function_Return iiImage
592
  End_Function // WindowsClassFromString
593
   
594
   //
595
   // Obsolete, use ObjectWindowsClassName instead.
596
   //
597
   Function WindowsClassToString Integer eClassName Returns String
598
    String  sClassName
599

    
600
    Case Begin
601
      Case (eClassname=bmpPDSForm)
602
        Move "dfForm" To sClassName
603
        Case break
604
      Case (eClassname=bmpPDSEdit)
605
        Move "dfEditBox" To sClassName
606
        Case break
607
      Case (eClassname=bmpPDSTextbox)
608
        Move "dfTextBox" To sClassName
609
        Case break
610
      Case (eClassname=bmpPDSButton)
611
        Move "dfmenu" To sClassName
612
        Case break
613
      Case (eClassname=bmpPDSGroup)
614
        Move "dfGroup" To sClassName
615
        Case break
616
      Case (eClassname=bmpPDSContainer)
617
        Move "dfDialogClass" To sClassName
618
        Case break
619
      Case (eClassname=bmpPDSCombo)
620
        Move "dfComboBox" To sClassName
621
        Case break
622
      Case (eClassname=bmpPDSView)
623
        Move "dfMDIChildClass" To sClassName
624
        Case break
625
      Case (eClassname=bmpPDSModalPanel)
626
        Move "dfWinClass" To sClassName
627
        Case break
628
      Case (eClassname=bmpPDSModalPanel) // ClientArea
629
        Move "dfMDIClient" To sClassName
630
        Case break
631
      Case (eClassname=bmpPDSTabDialog) // Tabdialog
632
        Move "dfSysTabControl32" To sClassName
633
        Case break
634
      Case (eClassname=bmpPDSGrid) // Grid (or List)
635
        Move "dfFormList" To sClassName
636
        Case break
637
      Case (eClassname=bmpPDSBitmap) // DFShape (some bitmapalike object)
638
        Move "cVdfShape" To sClassName
639
        Case break
640
      Case (eClassname=bmpPDSActiveX) // activex
641
        Move "AfxOleControl42" To sClassName
642
        Case break
643
      Case (eClassname=bmpPDSPanel) // panel
644
        Move "dfFrameClass" To sClassName
645
        Case break
646
      Case Else
647
        Move "Unknown" To sClassName
648
    Case End
649
    Function_Return sClassName
650
  End_Function // WindowsClassToString
651

    
652
   Function xBitmapIDForObj Integer hObj Returns Handle
653
    Integer iiImage
654
    Integer hWnd     hWnd2
655
    String  sObjName
656
    String  sClassname
657
    Boolean bClientArea
658
    
659
    Integer eWindowsClass
660
    Integer iCount
661
    Integer iChildCount
662
    tObj[]  Obj
663
    
664
    Get pObjects To Obj
665
    Move (SizeOfArray(Obj)) To iCount
666
    If (hObj<iCount and hObj<>0) Begin
667
      If (Obj[hObj].bExists)  Begin
668
        Move Obj[hObj].eWindowsClass To eWindowsClass
669
      End
670
    End
671
    
672
    If (eWindowsClass=-1) Begin
673
      //Get name Of hObj To sObjName
674
      Get Debuggee_Object_Name hObj To sObjName
675
      Get WindowsClassName hObj To sClassname
676
//      Showln "<" sClassname "> --[" sObjName "]"
677
      Get Debuggee_Client_Area_State hObj to bClientArea
678
      If bClientArea Begin
679
        Move bmpPDSClient to iiImage
680
      End
681
      Else Begin
682
        Move bmpPDSNormal to iiImage
683
      End
684
    End
685
    Else Begin
686
      Move eWindowsClass To iiImage
687
    End
688
    Function_Return iiImage
689
  End_Function // xBitmapIDForObj
690

    
691
  
692
  Function ChildCount Handle hParent Returns Handle
693
    Integer iCount
694
    Integer iChildCount
695
    tObj[]  Obj
696
    
697
    Get pObjects To Obj
698
    Move (SizeOfArray(Obj)) To iCount
699
    If (hParent<iCount and hParent<>0) Begin
700
      If (Obj[hParent].bExists)  Begin
701
        Move Obj[hParent].iChildCount To iChildCount
702
      End
703
    End
704
    Function_Return iChildCount
705
  End_Function
706

    
707
  
708
  Function ShortName Handle hObj Returns String
709
    Integer iCount
710
    String  sName
711
    tObj[]  Obj
712
    
713
    Get pObjects To Obj
714
    Move (SizeOfArray(Obj)) To iCount
715
    If (hObj<iCount and hObj<>0) Begin
716
      If (Obj[hObj].bExists)  Begin
717
        Move Obj[hObj].sShortName to sName
718
      End
719
    End
720
    Function_Return sName
721
  End_Function
722
  
723
  Function ProgID handle hObj Returns String
724
    Integer iCount
725
    String  sProgID
726
    tObj[]  Obj
727
    
728
    Move "" To sProgID
729
    Get pObjects To Obj
730
    Move (SizeOfArray(Obj)) To iCount
731
    If (hObj<iCount and hObj<>0) Begin
732
      If (Obj[hObj].bExists and Obj[hObj].eWindowsClass=bmpPDSActiveX)  Begin
733
        Move Obj[hObj].sProgID to sProgID
734
      End
735
    End
736
    Function_Return sProgID
737
  End_Function
738
  
739
  Function ObjectWindowsClassName handle hObj Returns String
740
    Integer iCount
741
    String  sClassName
742
    tObj[]  Obj
743
    
744
    Move "" To sClassName
745
    Get pObjects To Obj
746
    Move (SizeOfArray(Obj)) To iCount
747
    If (hObj<iCount and hObj<>0) Begin
748
      If (Obj[hObj].bExists)  Begin
749
        Move Obj[hObj].sWindowsClass to sClassName
750
      End
751
    End
752
    Function_Return sClassName
753
  End_Function
754
  
755
  Function ActivexName handle hObj Returns String
756
    Integer iCount
757
    String  sOCXName
758
    tObj[]  Obj
759
    
760
    Move "" To sOCXName
761
    Get pObjects To Obj
762
    Move (SizeOfArray(Obj)) To iCount
763
    If (hObj<iCount and hObj<>0) Begin
764
      If (Obj[hObj].bExists and Obj[hObj].eWindowsClass=bmpPDSActiveX)  Begin
765
        Move Obj[hObj].sOCXName to sOCXName
766
      End
767
    End
768
    Function_Return sOCXName
769
  End_Function
770
  
771
  Function IsActiveXControl handle hObj Returns Boolean
772
    Integer iCount
773
    Integer eClassName
774
    String  bIsActiveX
775
    tObj[]  Obj
776
    
777
    Move False To bIsActiveX
778
    Get pObjects To Obj
779
    Move (SizeOfArray(Obj)) To iCount
780
    If (hObj<iCount and hObj<>0) Begin
781
      If (Obj[hObj].bExists and Obj[hObj].eWindowsClass=bmpPDSActiveX)  Begin
782
        Move True To bIsActiveX
783
      End
784
    End
785
    Function_Return bIsActiveX
786
  End_Function
787
  
788
  Function DetermineDataFlexClass handle hObj Returns Integer
789
    Integer iCount
790
    Integer eWinClass
791
    Integer eDFClass
792
    tObj[]  Obj
793
    
794
    Move eDFUnknown To eDFClass
795
    Get pObjects To Obj
796
    Move (SizeOfArray(Obj)) To iCount
797
    If (hObj<iCount and hObj<>0) Begin
798
      If (Obj[hObj].bExists)  Begin
799
        //Move True To bIsActiveX
800
      End
801
    End
802
    Function_Return eDFClass
803
  End_Function
804
  
805
  Function FirstChild Handle hParent Returns Handle
806
    Integer iCount
807
    Handle  hChild
808
    tObj[]  Obj
809
    
810
    Move 0 To hChild
811
    Get pObjects To Obj
812
    Move (SizeOfArray(Obj)) To iCount
813
    If (hParent<iCount and hParent<>0) Begin
814
      Move Obj[hParent].hFirstChild To hChild
815
    End
816
    Function_Return hChild
817
  End_Function
818
  
819
  Function NextChild Handle hChild Returns Handle
820
    Integer iCount
821
    Handle  hNextChild
822
    tObj[]  Obj
823
    
824
    Move 0 To hNextChild
825
    Get pObjects To Obj
826
    Move (SizeOfArray(Obj)) To iCount
827
    If (hChild<iCount and hChild<>0) Begin
828
      Move Obj[hChild].hNext To hNextChild
829
    End
830
    Function_Return hNextChild
831
  End_Function
832
  
833
  Function LastChild Handle hParent Returns Handle
834
    Integer iCount
835
    Handle  hChild
836
    tObj[]  Obj
837
    
838
    Move 0       To hChild
839
    Get pObjects To Obj
840
    Move (SizeOfArray(Obj)) To iCount
841
    If (hParent<iCount and hParent<>0) Begin
842
      Move Obj[hParent].hLastChild To hChild
843
    End
844
    Function_Return hChild
845
  End_Function
846
   
847
End_Class