Internationalization Tools Standards: Learning from an ABC Calendar Workaround * 3
ABC Calendar Class 5
Multi-language class workaround 7
Applying the multi-language ABC calendar 9
Translation file (PDABCCal.trn) 9
User interface file (ABUtilui.clw) 10
Sample application 10
Preferences 11
The AddLanguage procedure 12
DateForm 13
Conclusion 15
Completely Dynamic Listbox Formatting? * 17
Selection criteria 18
Sort options 19
The multi-tabbed browse 21
Multiple format strings 25
Summary 27
Edit-In-Place: Getting User Confirmation * 29
Those clever users 30
Asking the user 31
The embeds 33
TakeEvent 35
An alternate approach 36
Conclusion 37
Updating Hot Fields * 39
Trials and errors 42
Record Not Available and browse architecture 43
Planting palm firmly on forehead 43
One solution 44
Summary 46
Aesthetically Pleasing Recursive Updates * 47
Recursive updates 48
Recursive Inserts 51
SELF.BatchProcessing 53
Summary 53
Beautifying Clarion Applications * 55
Highlighting prompts and lists 56
Redrawing controls 58
The DrawGlassPanel procedure 59
Drawing the line(s) 60
Dropping a shadow 61
Getting a head(er) 61
Adding to your body count 63
The end of the line 63
Make up 65
The template 65
Conclusion 66
Replicating IDLE: Throwing Users Out * 67
But Wait! 68
TakeEvent 69
Doing the dirty 70
Who Did What? 71
Summary 72
Throwing Users Out: Methods of Computation * 73
But first, the assumptions 74
And now, another assumption 74
Time of day 75
Countdown 76
Count up 78
But wait! There’s more! 78
Recursive Adds * 81
The default option 83
Buttons on the browse 84
Under the bonnet 85
And now, back to our show 86
Buttons on the form 88
Summary 90
A Survey Of Embed Usage * 91
A storage problem 92
The schema 92
Parsing TXAs 94
Procedure types 94
The embeds 99
Event embeds 105
WindowManager method embeds 106
Browse embeds 110
Process/Report embeds 112
Embeds by procedure type 112
Conclusions and recommendations 125
Another Single Browse For Multiple Lookups * 129
The browse code 130
The extension template 132
Features to be added 139
Summary 139
An Economical Record Status Control * 141
The template 143
Features to be added 147
Using the template 147
Summary 147
A Template Debugger * 149
The Ingredients 150
Adding ODS Messages to Templates 151
Conclusion 152
A Class Wrapper for the SimpleOCR API * 155
SimpleOCR 156
Class wrapper 156
Callbacks 158
Character recognition 159
Improving On The Non-Related Lookup Template * 163
Using the stock template 163
Adding functionality 165
The code template 166
Summary 169
Global Variables, Threads, Critical interSections and the Dangers of Unprotected
Sets * 173
Common misconceptions 174
From bad to worse 176
Practicing safe sets 178
There’s gotta be a better way 183
Acknowledgements, thus far 183
A Global Variables Protection Class * 185
SetGlobal method 186
GetGlobal method 188
Testing 189
A Template wrapper 196
Putting it all together 198
Acknowledgements 198
Classes For Background Processes * 201
A background procedure 202
Almost STARTing a class 203
The example 204
Constructors, destructors, and GPFs 207
Thread safety 209
Summary 209
When START Starts * 211
Controlling START 211
Resume 213
Summary 214
Using DOS Files To Send Printer Codes * 219
The lowly DOS file 220
Sending commands 221
USB printers 222
Summary 222
Printing A Tree From A Page Loaded Browse * 223
A dialogue tree 224
The tree design 225
Printing the tree 227
Getting started on coding 228
Adding the content 234
Printing Unknown Queue Fields * 239
Who()?, What()? 240
Printing a “No Records” Report * 243
Step 1: Add the detail band 243
Step 2: Set the band filter 244
Step 3: Open the report 245
Step 4: Modify AbReport.Inc 246
Step 5: Set OpenReport’s result to 0 247
Step 6: Set SELF.Response 247
Other considerations 247
Step 7 248
Summary 248
Writing To A Printer Port: Sending Escape Codes * 249
Forward to the past 252
CreateFile 253
WriteFile 255
CloseHandle 256
The Sample App 256
Summary 257
Print Directly to Printer Made Easier * 259
A single call 260
The source procedure 261
The Easiest Way To Write To A Printer Port * 263
The Nova Templates 263
Winevent 265
Summary 266
Direct-To-USB Printing * 267
USB need not apply 268
DEVCON to the rescue 269
Caveats 271
Summary 271
Whitemarsh’s Use Of Mimer With Clarion * 275
Getting Mimer 275
Clarion & Mimer 276
Using the SQL Advanced Tab * 279
MS SQL Server and Sample Database 282
What properties? 282
Regular Totaling - retiring ResetFromView 282
PROP:Name 284
PROP:GROUPBY 285
PROP:HAVING 285
SQL() and PROP:ORDER 286
Why not just use PROP:SQL then? 286
PROP:WHERE 287
Summary 288
Creating SQL From XML With XSLT * 289
An XML template language 290
Transformation 290
Tools 290
Where to start? 292
What about Clarion? 299
Calling XSLT Code From Clarion * 301
Transforming the easy way 304
Creating an OLE object in C# 304
Finally, Clarion! 308
Where to next? 312
Resources: 312
External Business Rules with the In-Memory Driver * 315
The basics of business rules 316
Code changes to the template 323
Summary 328
Using SQLIdentity in Clarion 6 * 329
The problem 330
Getting the primary key value 330
Summary 335
Multi-User Primary Keys: A Solution * 337
A solution 338
Step 1 ñ Create the PrimaryKeys table 340
Step 2 - Create two stored procedures 340
Step 3 - Add starting values 341
Step 4 - Create a Clarion source procedure 341
Step 5 - Remove autoinc 343
Step 6. Remove IDENTITY 343
Step 7 ñ Add the extension template 343
Embedding The SQLite Engine In Clarion Applications * 345
What SQLite is and is not 346
Topspeed/SQLite performance comparisons 346
So, will you ever get to use it? 348
SQLite class quick start 349
Inside the supplied SQLite Class 351
Conclusion 354
PROP:SQL And Embedded Single Quotes * 357
The problem with QUOTE 357
The example app 360
Summary 361
Encryption and Application Signing * 365
What is a digital certificate? 366
Who is it? 367
Who vouches for that? 368
What is the entity’s encryption code? 369
Symmetric encryption 369
Upside and Downside of Symmetric Encryption 371
Asymmetric Encryption 371
Encryption 372
Signing 373
Combining Public/Private Keys with Symmetric Keys 375
Next time 376
Signing Your Applications * 377
Your digital certificate 377
The Signing Software 379
Signing your code using the wizard 380
Verifying the Signature 385
Signing your code by batch file 386
Creating the Batch file 387
Conclusion 388
Additional Reading 389
Signing Your Applications: New Challenges * 391
A little background 392
Turning it off manually 393
Turning it off with code 396
Turning it off granularly 396
All users? 398
An end run - my application only 398
For SetupBuilder users 401
As for “real” networks * 401
Miscellaneous security annoyances 402
Conclusion 404
Additional Reading 404
Source code 405
Manifests for Hand Coded Apps * 407
Manifest destiny 408
From the editor 411
Source code 412
Get Ahead Of Your Competition With Vista And Office 2007 * 413
Rose colored glasses 414
Ok, wise guy * 414
A not-so-short Clarion bedtime story 415
Payday 416
The good part? 417
The point 417
Rub your hands together 417
The bigger picture 418
Vista-Compliant INI Files * 419
INI folders 420
The VistaINIClass 420
The template 423
Viewing CSIDL values 424
Summary 424
Source code 424
Running C6 on Vista * 425
Fixing clipped text 425
Fixing WinHlp32.exe 426
An Introduction to CVS and WinCVS * 429
What is CVS? 430
Installing WinCVS 432
Installing Python 432
Terminology 432
Running WinCVS for the first time 433
Start with Checkout 438
Commit changed files 440
CVS, WinCVS and Clarion * 443
Filters 443
Change logs 445
File status 447
Revision graphs 448
Version numbers 450
Tips 450
Summary 451
Recommended reading: 452
Version Control with CVS and Clarion 6.x * 453
The software 454
SoftVelocity versions and hotfixes 455
Tagging a product release (version) 460
Modules 461
Release 463
Branching Out 464
Bug FIX! 467
Version Control with CVS and Clarion 6.x, Part 2 * 471
CVSNT Install on Red Hat Fedora Core 3 472
WinCVS install and configuration 473
Configure applications and directories 474
Directory Structure 481
Reasons to use WinCVS rather than Clarion 484
Administration, automatisation 485
Tools, ideas 486
Source code 487
Understanding The Clarion 6 Version Control Interface * 489
The Clarion 6 Version Control System 490
The in and outs of Clarion 6’s VCS system 491
Details of operation 494
Exporting module TXAs 498
Summary 498
Using MS Visual Source Safe With Clarion * 501
Installation 502
Setup 502
Adding files 504
Sharing code 505
Checking out code 507
Getting the latest version 509
Summary 511
Eliminating Circular DLL Calls * 515
Getting started 516
Automating the evaluation process 518
Trying to find an optimum ordering 518
Modifying the program 520
Summary 523
Nifty Window Tricks And Smart DLL Loading * 525
Getting started 526
Layered windows 526
”Look, there’s a hole in my window” 532
Wrapping it up 534
DLLs and Reusable Code: Divide and Simplify * 535
Handcoding the DLL 537
Create a folder 537
Create a .PRJ File 537
Create the .CLW file(s) 539
Create an .EXP file 539
Compiling your DLL 540
Sharing the DLL prototypes 541
Making your DLL available 541
Using your DLL 541
Source code 543
Generic DLLs The Template Way * 545
Back to the future 545
Export file embed points 546
Hand Coding Export Files * 549
Understanding the nuts and bolts 550
Calculating the export list items 551
Don’t forget the basics 552
Privacy policy 552
When things go wrong 553
Summary 553
Resources 553
Encrypting Data With Number Base Conversion * 557
How to do a general base conversion. 558
Checksums 562
Conclusion 563
App Shutdown Options in Clarion 6.2 * 565
Using the templates 565
The system tray 568
Clean closedown 569
Summary 571
Accessing Private Class Data * 573
No source change required 574
Project defines 575
The Five Minute Developer: Sorting QUEUEs * 577
The SORT function 577
Customized sorting 578
The Five Minute Developer: Displaying QUEUEs * 581
The FROM attribute 581
PROP:FORMAT 582
PROPLIST 583
Inter-Date Computations * 585
Date arithmetic 585
Midnight rollover 586
StarDates 588
Summary 589
A Better DATE Function * 591
The DateFixed2 procedure 591
Next Month Anniversary Date Function * 593
The nmDate function 594
Getting the end of next month 594
Adding Arrays To Generic Queues With HOWMANY * 597
Enough is enough! 598
Extending GroupToINI 599
Summary 600
A Customized Deep Assign Function * 603
Rolling my own deep assign 604
Step 1: Design the data 604
Step 2: Find the Matching Pairs 605
Step 3: Debug the program 606
Step 4: Finalize and test 607
Converting to a class and include file. 608
Solving Problems With Finite State Machines * 609
An example 610
The Character I/O Class (CharFileIO) 611
The Parsing Function (GetToken) 612
The Finite State Machine 613
Tips 616
Clarion Challenge Results - Remove Links * 617
Carlos Gutierrez 620
Poul Jensen 623
Brahn Partridge 624
Lee White 626
Charles Puett 627
Gordon Smith 628
Larry Sand 629
And the winner is Geoff Robinson! 631
Conclusions 633
The Clarion.NET version 634
Clarion Challenge Results - Profiles * 636
Carlos Gutierrez 636
David Harms 637
Poul Jensen 638
Brahn Partridge 639
Charles Puett 640
Geoff Robinson 641
Larry Sand 642
Gordon Smith 643
Lee White 644
Metadata Management: The Way to a Well-Ordered Enterprise * 645
Convincing the boss 647
Design away ETL 647
Consolidate and integrate 648
Standardize reference data 648
Master data 649
Assign enterprise identifiers 649
Remove redundancies 650
Providing Good Customer Support * 651
The customer’s perspective 651
Providing support 652
My process 653
The routine 653
Creating a routine 654
More on Automation 655
Summary 657