Fresh IDE . Check-in [b15c441b4d]
Not logged in

This repository is a mirror!

The original is located on: https://fresh.flatassembler.net/fossil/repo/fresh
If you want to follow the project, please update your remote-url

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Work on TScrollable and TAsmEdit.
Timelines: family | ancestors | descendants | both | FreshLibDev
Files: files | file ages | folders
SHA1:b15c441b4db932a5012681631f3be25114db3fb4
User & Date: johnfound 2017-04-18 14:11:13
Context
2017-04-20
05:58
Work on TAsmEdit; check-in: 6386df457c user: johnfound tags: FreshLibDev
2017-04-18
14:11
Work on TScrollable and TAsmEdit. check-in: b15c441b4d user: johnfound tags: FreshLibDev
2017-04-16
23:27
Work on TScrollable; Fixed bug in _realobjects.inc; check-in: e4d69cd129 user: johnfound tags: FreshLibDev
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to freshlib/gui/TAsmEdit.asm.

796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
...
837
838
839
840
841
842
843




844
845
846
847
848
849
850
851
852

853
854
855
856
857
858
859
860
861
862
863
864



865
866
867
868
869
870
871
...
964
965
966
967
968
969
970

971
972
973
974
975
976
977
....
1290
1291
1292
1293
1294
1295
1296

1297
1298
1299
1300
1301
1302
1303
....
1354
1355
1356
1357
1358
1359
1360

1361
1362
1363
1364
1365
1366
1367
....
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
....
1514
1515
1516
1517
1518
1519
1520

1521
1522
1523
1524
1525
1526
1527
....
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
        mov     ecx, [esi+TAsmEdit._height_ch]
        mov     [.rect.right], eax
        mov     [.rect.bottom], ecx

        lea     eax, [.rect]
        exec    esi, TAsmEdit:Render, eax, rrfText or rrfBackground or rrfLeftMargin

        stdcall BlendTriangle, [esi+TAsmEdit._canvas], 100, 100, 30, trtLower or trtLeft, $80ff0000
        stdcall BlendTriangle, [esi+TAsmEdit._canvas], 100, 150, 30, trtLower or trtRight, $90ff0000
        stdcall BlendTriangle, [esi+TAsmEdit._canvas], 100, 200, 30, trtUpper or trtLeft, $a0ff0000
        stdcall BlendTriangle, [esi+TAsmEdit._canvas], 100, 250, 30, trtUpper or trtRight, $b0ff0000

        cmp     [Caret.pWindow], esi
        jne     .finish

        exec    esi, TAsmEdit:UpdateCaretPos

.finish:

................................................................................

        xor     eax, eax
        cmp     [esi+TAsmEdit._font_width], eax
        lea     eax, [eax+1]
        je      .xpage_ok

        mov     eax, [esi+TAsmEdit._width]




        sub     eax, [esi+TAsmEdit._left_margin]
        cdq
        idiv    [esi+TAsmEdit._font_width]
        test    eax, eax
        jnz     .xpage_ok

        inc     eax

.xpage_ok:


        set     esi, TScrollable:PageX, eax

        mov     ecx, [esi+TAsmEdit._line_widths]
        mov     edx, [ecx+TArray.count]
        test    edx, edx
        jz      .xsize_ok

        mov     edx, [ecx+TArray.array+sizeof.TCounter*edx+TCounter.value- sizeof.TCounter]
        sub     edx, eax

.xsize_ok:



        set     esi, TScrollable:MaxX, edx

; set Y scrollers page and

        xor     eax, eax
        cmp     [esi+TAsmEdit._font_height], eax
        lea     eax, [eax+1]
................................................................................



method TAsmEdit.Resize
begin
        inherited [.newWidth], [.newHeight]
        exec    [.self], TAsmEdit:ComputeScreenInChars

        exec    [.self], TAsmEdit:Refresh
        return
endp



; parameters get/set methods
................................................................................
        shr     eax, 1
        mov     [.half_x], eax

        shr     eax, 1
        mov     [.quarter_x], eax



        stdcall CaretShow, 0

        mov     eax, [esi+TAsmEdit._caret_x]
        sub     eax, [esi+TAsmEdit._scrX.pos]    ; offset from the screen home.
        js      .scroll_right

; scroll left
................................................................................

.changed:
        exec    esi, TAsmEdit:RectChanged, 0, FALSE

.finish:
        exec    esi, TAsmEdit:UpdateCaretPos
        stdcall CaretShow, 1


        popad
        return


.paint_all:
        exec    esi, TAsmEdit:Paint
................................................................................

        shr     eax, 1
        mov     [.half_y], eax

        shr     eax, 1
        mov     [.quarter_y], eax


        stdcall CaretShow, 0

        mov     eax, [esi+TAsmEdit._caret_y]
        sub     eax, [esi+TAsmEdit._scrY.pos]    ; offset from the screen home.
        js      .scroll_down

; scroll up
................................................................................

.changed:
        exec    esi, TAsmEdit:RectChanged, 0, FALSE

.finish:
        exec    esi, TAsmEdit:UpdateCaretPos
        stdcall CaretShow, 1


        popad
        return


.paint_all:
        exec    esi, TAsmEdit:Paint
................................................................................
        mov     edx, eax
        imul    edx, [esi+TAsmEdit._font_height]

        mov     ecx, [esi+TAsmEdit._height_ch]
        imul    ecx, [esi+TAsmEdit._font_height]

        stdcall ScrollRectDn, [esi+TAsmEdit._canvas], 0, 0, [esi+TAsmEdit._width], ecx, edx


        mov     [.rect.bottom], eax
        xor     eax, eax
        mov     ecx, [esi+TAsmEdit._width_ch]
        mov     [.rect.top], eax
        mov     [.rect.left], eax
        mov     [.rect.right], ecx







<
<
<
<
<







 







>
>
>
>









>








|



>
>
>







 







>







 







>







 







>







 







|







 







>







 







<







796
797
798
799
800
801
802





803
804
805
806
807
808
809
...
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
...
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
....
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
....
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
....
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
....
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
....
1569
1570
1571
1572
1573
1574
1575

1576
1577
1578
1579
1580
1581
1582
        mov     ecx, [esi+TAsmEdit._height_ch]
        mov     [.rect.right], eax
        mov     [.rect.bottom], ecx

        lea     eax, [.rect]
        exec    esi, TAsmEdit:Render, eax, rrfText or rrfBackground or rrfLeftMargin






        cmp     [Caret.pWindow], esi
        jne     .finish

        exec    esi, TAsmEdit:UpdateCaretPos

.finish:

................................................................................

        xor     eax, eax
        cmp     [esi+TAsmEdit._font_width], eax
        lea     eax, [eax+1]
        je      .xpage_ok

        mov     eax, [esi+TAsmEdit._width]

        OutputValue "_width: ", eax, 10, -1
        OutputValue "_left_margin: ", [esi+TAsmEdit._left_margin], 10, -1

        sub     eax, [esi+TAsmEdit._left_margin]
        cdq
        idiv    [esi+TAsmEdit._font_width]
        test    eax, eax
        jnz     .xpage_ok

        inc     eax

.xpage_ok:
        OutputValue "Page X: ", eax, 10, -1

        set     esi, TScrollable:PageX, eax

        mov     ecx, [esi+TAsmEdit._line_widths]
        mov     edx, [ecx+TArray.count]
        test    edx, edx
        jz      .xsize_ok

        mov     edx, [ecx+TArray.array+sizeof.TCounter*edx+TCounter.value - sizeof.TCounter]
        sub     edx, eax

.xsize_ok:

        OutputValue "Max X: ", edx, 10, -1

        set     esi, TScrollable:MaxX, edx

; set Y scrollers page and

        xor     eax, eax
        cmp     [esi+TAsmEdit._font_height], eax
        lea     eax, [eax+1]
................................................................................



method TAsmEdit.Resize
begin
        inherited [.newWidth], [.newHeight]
        exec    [.self], TAsmEdit:ComputeScreenInChars
        exec    [.self], TAsmEdit:UpdateScrollBar
        exec    [.self], TAsmEdit:Refresh
        return
endp



; parameters get/set methods
................................................................................
        shr     eax, 1
        mov     [.half_x], eax

        shr     eax, 1
        mov     [.quarter_x], eax


        exec    esi, TAsmEdit:RestoreBackground
        stdcall CaretShow, 0

        mov     eax, [esi+TAsmEdit._caret_x]
        sub     eax, [esi+TAsmEdit._scrX.pos]    ; offset from the screen home.
        js      .scroll_right

; scroll left
................................................................................

.changed:
        exec    esi, TAsmEdit:RectChanged, 0, FALSE

.finish:
        exec    esi, TAsmEdit:UpdateCaretPos
        stdcall CaretShow, 1
        exec    esi, TAsmEdit:DrawScrollbars

        popad
        return


.paint_all:
        exec    esi, TAsmEdit:Paint
................................................................................

        shr     eax, 1
        mov     [.half_y], eax

        shr     eax, 1
        mov     [.quarter_y], eax

        exec    esi, TAsmEdit:RestoreBackground
        stdcall CaretShow, 0

        mov     eax, [esi+TAsmEdit._caret_y]
        sub     eax, [esi+TAsmEdit._scrY.pos]    ; offset from the screen home.
        js      .scroll_down

; scroll up
................................................................................

.changed:
        exec    esi, TAsmEdit:RectChanged, 0, FALSE

.finish:
        exec    esi, TAsmEdit:UpdateCaretPos
        stdcall CaretShow, 1
        exec    esi, TAsmEdit:DrawScrollbars

        popad
        return


.paint_all:
        exec    esi, TAsmEdit:Paint
................................................................................
        mov     edx, eax
        imul    edx, [esi+TAsmEdit._font_height]

        mov     ecx, [esi+TAsmEdit._height_ch]
        imul    ecx, [esi+TAsmEdit._font_height]

        stdcall ScrollRectDn, [esi+TAsmEdit._canvas], 0, 0, [esi+TAsmEdit._width], ecx, edx


        mov     [.rect.bottom], eax
        xor     eax, eax
        mov     ecx, [esi+TAsmEdit._width_ch]
        mov     [.rect.top], eax
        mov     [.rect.left], eax
        mov     [.rect.right], ecx

Changes to freshlib/gui/TScrollable.asm.

54
55
56
57
58
59
60
61
62
63
64
65

66
67
68
69
70
71
72
...
111
112
113
114
115
116
117

118
119
120
121
122
123
124
125
...
154
155
156
157
158
159
160

161
162
163
164
165
166
167
168
...
204
205
206
207
208
209
210

211
212
213
214
215
216
217
218
...
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
...
247
248
249
250
251
252
253
254

















255




256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
...
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
...
429
430
431
432
433
434
435

436
437
438
439
440
441
442
...
457
458
459
460
461
462
463









464
465
466
467
468
469
470
471
472
473
474
475

476
477
478
479
480
481
482
  param .PageY, ._scrY.page, .SetPage:2
  param .MaxY,  ._scrY.max,  .SetMax:2

  method .SetPos,  .param, .value
  method .SetPage, .param, .value
  method .SetMax,  .param, .value


  method .Destroy

  method .Paint
  method .DrawScrollbars


  method .EventMouseMove, .x, .y, .kbdState
  method .EventMouseLeave

  method .EventButtonPress, .button, .kbdState, .x, .y
  method .EventButtonRelease, .button, .kbdState, .x, .y

................................................................................
        cmp     eax, ecx
        cmovg   eax, ecx

        cmp     eax, [esi+edx+TScroller.pos]
        je      .finish

        mov     [esi+edx+TScroller.pos], eax

        exec    esi, TScrollable:DrawScrollbars

.finish:
        popad
        return
endp

;_________________________________________________________________________________________
................................................................................
        cmp     eax, [esi+edx+TScroller.page]
        jne     .refresh

        cmp     ebx, [esi+TScroller.pos]
        je      .finish

.refresh:

        exec    esi, TScrollable:DrawScrollbars
;        exec    esi, TScrollable:Refresh

.finish:
        popad
        return
endp

................................................................................
        cmp     ebx, [esi+edx+TScroller.pos]
        jne     .refresh

        cmp     ecx, [esi+edx+TScroller.page]
        je      .finish

.refresh:

        exec    esi, TScrollable:DrawScrollbars
;        exec    esi, TScrollable:Refresh

.finish:
        popad
        return
endp

................................................................................
        pushad

        mov     esi, [.self]
        mov     ebx, [esi+TScrollable._canvas]
        test    ebx, ebx
        jz      .finish

;        xor     eax, eax
;        mov     ecx, [esi+TScrollable._width]
;        mov     edx, [esi+TScrollable._height]
;        stdcall DrawSolidRect, ebx, 0, 0, ecx, edx, [GUI.clTreeViewBack]

; Free the previous stored images.

        stdcall DestroyImage, [esi+TScrollable._BackGroundH]
        stdcall DestroyImage, [esi+TScrollable._BackGroundV]

; Create new

................................................................................
        sub     ecx, [GUI.scrollWidth]

        stdcall CreateImage, ecx, [GUI.scrollWidth]
        mov     [esi+TScrollable._BackGroundH], eax

        stdcall CreateImage, [GUI.scrollWidth], edx
        mov     [esi+TScrollable._BackGroundV], eax


















        xor     eax, eax




        stdcall CopyImageRect, [esi+TScrollable._BackGroundV], eax, eax, ebx, ecx, eax, [GUI.scrollWidth], edx

        sub     edx, [GUI.scrollWidth]
        stdcall CopyImageRect, [esi+TScrollable._BackGroundH], eax, eax, ebx, eax, edx, ecx, [GUI.scrollWidth]

; Store the bitmaps with the canvas below the scrollbars.

        exec    esi, TScrollable:DrawScrollbars

.finish:
        popad
        return
endp


................................................................................
        jz      .finish

        xor     eax, eax
        mov     ecx, [esi+TScrollable._width]
        mov     edx, [esi+TScrollable._height]

        sub     ecx, [GUI.scrollWidth]
        stdcall CopyImageRect, ebx, ecx, eax, [esi+TScrollable._BackGroundV], eax, eax, [GUI.scrollWidth], edx

        sub     edx, [GUI.scrollWidth]
        stdcall CopyImageRect, ebx, eax, edx, [esi+TScrollable._BackGroundH], eax, eax, ecx, [GUI.scrollWidth]

        mov     [.rectX.x], eax
        mov     [.rectX.y], edx
        mov     [.rectX.width], ecx

        mov     [.rectY.x], ecx
        mov     [.rectY.y], eax
................................................................................
        xor     ecx, ecx
        xor     edx, edx
        xchg    ecx, [esi+TScrollable._scrX.state]
        xchg    edx, [esi+TScrollable._scrY.state]
        or      ecx, edx
        jz      .finish


        exec    esi, TScrollable:DrawScrollbars

.finish:
        pop     edx ecx esi
        return
endp

................................................................................
        xor     ecx, ecx
        mov     [.stateH], ecx
        mov     [.stateV], ecx

        stdcall TScrollable.FindScroller, esi, [.x], [.y]
        inc     [.stateH+4*eax]         ; notice the .dummy variable for eax = -1










        xor     eax, eax
        mov     ebx, [.stateH]
        xchg    ebx, [esi+TScrollable._scrX.state]
        xor     ebx, [esi+TScrollable._scrX.state]
        or      eax, ebx

        mov     ebx, [.stateV]
        xchg    ebx, [esi+TScrollable._scrY.state]
        xor     ebx, [esi+TScrollable._scrY.state]
        or      eax, ebx
        jz      .state_ok   ; if the state has not be changed.


        exec    esi, TScrollable:DrawScrollbars

.state_ok:
        inherited  [.x], [.y], [.kbdState]
        popad
        return








<




>







 







>
|







 







>
|







 







>
|







 







<
<
<
<
<







 








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

>
>
>
>
|


|
<
<
<
<







 







|


|







 







>







 







>
>
>
>
>
>
>
>
>












>







54
55
56
57
58
59
60

61
62
63
64
65
66
67
68
69
70
71
72
...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
...
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
...
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
...
229
230
231
232
233
234
235





236
237
238
239
240
241
242
...
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278




279
280
281
282
283
284
285
...
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
...
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
...
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
  param .PageY, ._scrY.page, .SetPage:2
  param .MaxY,  ._scrY.max,  .SetMax:2

  method .SetPos,  .param, .value
  method .SetPage, .param, .value
  method .SetMax,  .param, .value


  method .Destroy

  method .Paint
  method .DrawScrollbars
  method .RestoreBackground

  method .EventMouseMove, .x, .y, .kbdState
  method .EventMouseLeave

  method .EventButtonPress, .button, .kbdState, .x, .y
  method .EventButtonRelease, .button, .kbdState, .x, .y

................................................................................
        cmp     eax, ecx
        cmovg   eax, ecx

        cmp     eax, [esi+edx+TScroller.pos]
        je      .finish

        mov     [esi+edx+TScroller.pos], eax
;        exec    esi, TScrollable:RestoreBackground
;        exec    esi, TScrollable:DrawScrollbars

.finish:
        popad
        return
endp

;_________________________________________________________________________________________
................................................................................
        cmp     eax, [esi+edx+TScroller.page]
        jne     .refresh

        cmp     ebx, [esi+TScroller.pos]
        je      .finish

.refresh:
;        exec    esi, TScrollable:RestoreBackground
;        exec    esi, TScrollable:DrawScrollbars
;        exec    esi, TScrollable:Refresh

.finish:
        popad
        return
endp

................................................................................
        cmp     ebx, [esi+edx+TScroller.pos]
        jne     .refresh

        cmp     ecx, [esi+edx+TScroller.page]
        je      .finish

.refresh:
;        exec    esi, TScrollable:RestoreBackground
;        exec    esi, TScrollable:DrawScrollbars
;        exec    esi, TScrollable:Refresh

.finish:
        popad
        return
endp

................................................................................
        pushad

        mov     esi, [.self]
        mov     ebx, [esi+TScrollable._canvas]
        test    ebx, ebx
        jz      .finish






; Free the previous stored images.

        stdcall DestroyImage, [esi+TScrollable._BackGroundH]
        stdcall DestroyImage, [esi+TScrollable._BackGroundV]

; Create new

................................................................................
        sub     ecx, [GUI.scrollWidth]

        stdcall CreateImage, ecx, [GUI.scrollWidth]
        mov     [esi+TScrollable._BackGroundH], eax

        stdcall CreateImage, [GUI.scrollWidth], edx
        mov     [esi+TScrollable._BackGroundV], eax

        exec    esi, TScrollable:DrawScrollbars

.finish:
        popad
        return
endp



method TScrollable.RestoreBackground
begin
        pushad
        mov     esi, [.self]
        mov     ebx, [esi+TWindow._canvas]
        test    ebx, ebx
        jz      .finish

        xor     eax, eax
        mov     ecx, [esi+TScrollable._width]
        mov     edx, [esi+TScrollable._height]

        sub     ecx, [GUI.scrollWidth]
        stdcall CopyImageRect, ebx, ecx, eax, [esi+TScrollable._BackGroundV], eax, eax, [GUI.scrollWidth], edx

        sub     edx, [GUI.scrollWidth]
        stdcall CopyImageRect, ebx, eax, edx, [esi+TScrollable._BackGroundH], eax, eax, ecx, [GUI.scrollWidth]





.finish:
        popad
        return
endp


................................................................................
        jz      .finish

        xor     eax, eax
        mov     ecx, [esi+TScrollable._width]
        mov     edx, [esi+TScrollable._height]

        sub     ecx, [GUI.scrollWidth]
        stdcall CopyImageRect, [esi+TScrollable._BackGroundV], eax, eax, ebx, ecx, eax, [GUI.scrollWidth], edx

        sub     edx, [GUI.scrollWidth]
        stdcall CopyImageRect, [esi+TScrollable._BackGroundH], eax, eax, ebx, eax, edx, ecx, [GUI.scrollWidth]

        mov     [.rectX.x], eax
        mov     [.rectX.y], edx
        mov     [.rectX.width], ecx

        mov     [.rectY.x], ecx
        mov     [.rectY.y], eax
................................................................................
        xor     ecx, ecx
        xor     edx, edx
        xchg    ecx, [esi+TScrollable._scrX.state]
        xchg    edx, [esi+TScrollable._scrY.state]
        or      ecx, edx
        jz      .finish

        exec    esi, TScrollable:RestoreBackground
        exec    esi, TScrollable:DrawScrollbars

.finish:
        pop     edx ecx esi
        return
endp

................................................................................
        xor     ecx, ecx
        mov     [.stateH], ecx
        mov     [.stateV], ecx

        stdcall TScrollable.FindScroller, esi, [.x], [.y]
        inc     [.stateH+4*eax]         ; notice the .dummy variable for eax = -1

        mov     ecx, [esi+TWindow._cursor]
        inc     eax
        jz      @f
        mov     ecx, mcArrow
@@:
        get     edx, esi, TWindow:OSWindow
        stdcall GetStockCursor, ecx
        stdcall SetMouseCursor, [edx+TWindow.handle], eax

        xor     eax, eax
        mov     ebx, [.stateH]
        xchg    ebx, [esi+TScrollable._scrX.state]
        xor     ebx, [esi+TScrollable._scrX.state]
        or      eax, ebx

        mov     ebx, [.stateV]
        xchg    ebx, [esi+TScrollable._scrY.state]
        xor     ebx, [esi+TScrollable._scrY.state]
        or      eax, ebx
        jz      .state_ok   ; if the state has not be changed.

        exec    esi, TScrollable:RestoreBackground
        exec    esi, TScrollable:DrawScrollbars

.state_ok:
        inherited  [.x], [.y], [.kbdState]
        popad
        return

Changes to freshlib/test_code0/TestAsmEdit.asm.

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

          ObjTemplate  tfChild, TButton, btnRedo,               \
                     SplitCell = SplitTest.cellRedo,            \
                     Caption = "R",                             \
                     Visible = TRUE, \
                     OnClick = DoRedo


;          ObjTemplate  tfChild or tfEnd, TScrollable, AsmEdit,     \
;                     x = 10, y = 40, width = 200, height = 200, \
;                     MaxX = 1000, PosX = 500, PageX = 100,        \
;                     MaxY = 1000, PosY = 500, PageY = 100,        \
;                     SplitCell = SplitTest.cellAsmEdit,         \
;                     Visible = TRUE

          ObjTemplate  tfChild or tfEnd, TAsmEdit, AsmEdit,     \
                     x = 10, y = 40, width = 200, height = 200, \
                     SplitCell = SplitTest.cellAsmEdit,         \
                     Visible = TRUE


;utf8_long file "unicode_test.txt"







<
<
<
<
<
<
<
<







71
72
73
74
75
76
77








78
79
80
81
82
83
84

          ObjTemplate  tfChild, TButton, btnRedo,               \
                     SplitCell = SplitTest.cellRedo,            \
                     Caption = "R",                             \
                     Visible = TRUE, \
                     OnClick = DoRedo









          ObjTemplate  tfChild or tfEnd, TAsmEdit, AsmEdit,     \
                     x = 10, y = 40, width = 200, height = 200, \
                     SplitCell = SplitTest.cellAsmEdit,         \
                     Visible = TRUE


;utf8_long file "unicode_test.txt"