HomeClarion Live! Web Gems

Clarion Live! Web Gems

Weekly Web Gems gathered from various sources across the world wide interweb!
  • PDF

WebGems week of March 27th, 2011

Dennis E Evans:
came across this one a couple days ago, makes reading the execution plans a little simpler,
MS Sql Server  http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp
  • PDF

Web Gems 1/15/10

Web Gems 1/15/10

  Ben Dell: I like to keep the DCT open while I am coding the app.. it allows me to see the table structures and relationships without having to add a table to the local procedure to get what I want www.riebens.co.za/benimages/Captureappdct.PNG 

ALERT: for those of you thinking of modifying PE structures in EXE files  Very Happy  use the folowing FREE product ... http://www.ntcore.com/exsuite.php it is better than PE Explorer and the price is much better


  Arnold Young: Web Gem: Manning Publications - Deal of the Day signup http://www.manning.com

Getting It Done On-Time with Simple Project Management



  Arnold Young: Get the jQuery for Designers ebook for $10. Use checkout code dotd0113. http://www.manning.com/sharp/


  Arnold Young: SmartDraw it looks pretty cool and it is on sale till Wed Jan 20th for $197 versus $297. http://www.smartdraw.com/


  Bijan J. Hosseinian: I have a gotomeeting account and several other helpdesk tools for supporting customers. However, I find Mikogo to be a great tool for doing a quick one on one demo. It loads quickly. One thing that most users might miss is that there is an option in the initial settings that lets you provide help desk. Right click on the system trays icon and select Start Options/View and Control another screen. This will let you take control of your client's pc and It is Free.


  Bijan J. Hosseinian: I bought Tivoli but for offsite  backup I recommend mozy.com They have a  2 GIG free backup plan. Clarion developers can use the incremental backup feature to backup .app and .dct files. Files are backed up off site and you can restore to any day. It works great www.mozy.com


  Bijan J. Hosseinian: http://devexpress.com/Products/NET/Reporting/QuickStart.xml These webcasts show some of the features in the new 7.1 Clarion Report Writer.


  Bijan J. Hosseinian: I am using something from bo schmidt that's called BsIdent - Remove Ident numbers from TXD/TXA Files (Zip format). It is free.  This is a great little tool that we may want to let others know about.It can be downloaded for free from http://comsoft7.com/Prices.htm


  Presentation Showcase - The Presentation Secrets of Steve Jobs  Last month Carmine Gallo delivered an insightful web seminar based on his book, The Presentation Secrets of Steve Jobs, that lets you learn the secrets of the master. This month we're featuring the on demand version of this presentation in our January showcase.   Carmine used SlideRocket's new audio features to record audio for each slide and time his slide builds to match, letting him deliver his pitch at a time that's convenient for you.   http://app.sliderocket.com/app/FullPlayer.aspx?id=bafe6c8d-b323-4f61-ad30-cbe6e0ad9a37&mkt_tok=3RkMMJWWfF9wsRoluKvfLqzsmxzEJ8r8%2FbF8APvv3Mga3E5XdrGbaxk%3D
  • PDF

WebGems #02

What it is Contributor Details
All about Symlinks in Windows Vista and above

Brahn Partridge
symlinks in vista are pretty handy too Mark apparently improved a bit from earlier OS versions

This is another article I had bookmarked. I also have somewhere a GUI that will setup and manage them for you if you want me to dig it out.



"Symlinks can span volumes (wicked useful) and you can also Symlink to UNC paths"

For a while I had my laptop setup with a symlink on c:\clarion6 which pointed to an external drive. It could handle hot plugging of the drive which was neat. And switching clarion environments could be done by just deleteing and recreating the link to a new location.

this looks neat:

Clarion program that remote controls your PC using Twitter!

For those who could be interested, here is a program that let you use Twitter, mail or your cell phone as a remote control for your PC.


All comments are welcome

Just forgot: That's a clarion 6 / nettalk 4 program
Using Molebox for virtualizing your program

I just finished my initial testing with MoleBox Pro and it seems to work fine even on a Vista Machine logged in as Guest i.e. because of Registry virtualisation there are no UAC or other warnings for registering ActiveX controls. It is also useful in packaging other required files like the Styles sub-folder. Looks very promising.

I would suggest that those that are interested try out the demo with your applications to test it further. The only downside is that the demo is hardware bound and hence would work only on the machine from which it is installed and hence I would suggest installing it on the machine you want to test it on. The link is

Using Oddjob to run DebugView

Dave Moyer
I am using Oddjob to run DebugView (WinInternals) when my application is running in debug mode.   There is a command line option for DebugView to launch in the tray.  Everything works great, but when my program terminates, the DebugView icon is left in the tray until I move my mouse over it.

I know this isn't an Oddjob problem, but just wondering if there is a Winevent method or other function to refresh the tray automatically.

Launching DebugView via Oddjob is pretty cool, since I can log to a file and use Winevent to output useful debugging messages.  Just this cosmetic problem lingers.  Any ideas welcome.
Just click the link!

Wolfgang Orth
Monitor events in your APP!

Charles Edmonds
Download a copy of my free ControlMonitor template at:


With the extended CASE option on the template you get an embed point that you can put your code in that will fire reliably when the value of the field changes (by any means).

In fact you get embeds that fire in this order:

1) ANY monitored data has changed - BEFORE field specific embed code is fired

2) When a SPECIFIC field has changed value

3) ANY monitored data has changed - AFTER field specific embed code is fired

That pretty much gives you total control over what fires and when.  Plus it allows you to prepare for any field specific event and clean up (or do something else) after all field specific events are done.

We wrote this years ago to get rid of all the herky-jerky problems of Clarion firing code whenever it wanted to.

We have a lot of developers who use it (including us) in all our apps.

It works (even in C55) and the price is right!
KSpng special!

KSpng class allows Clarion programmers to display PNG and TIFF format images
using native Clarion IMAGE control on both windows and reports. It also allows you to convert files between different image formats. BMP, GIF, JPEG, TIFF and PNG formats are supported. Everything is done with just one call.

Clarion 5.5, 6.3 and 7  both Legacy and ABC are supported.

Demo version can be downloaded from


During beta period product cost is $69.95
Sale on SQL Manager

Jeff Slarve
FYI, they're having a 25% off sale all through December.
I have both the MySQL and postgre products. Excellent stuff.

Fix for PDF font problems

Lynn Howard
Thanks again to Lee for pointing out my PDF problem was due to Large fonts specified for Vista and Windows 7.
And special thanks to Arnor's fix! Perfect!
  • PDF

WebGems #01

What it is Contributor Details
Evernote lets you enter notes from multiple devices and access them anywhere

John Hickey
Info on using jquery

Mark Riffey
Special on Acronis

Mark Goldberg

Acronis True Image Home 2010 -- price $24
Virtualbox (free!)

Wolfgang Orth
VirtualBox 3.1.0 arrives, adds teleportation support
Mark Goldberg http://msdn.microsoft.com/en-us/magazine/ee358705.aspx
Mark Sarson Free Microsoft Book/PDF: Microsoft Application Architecture Guide/Second Editon : http://bit.ly/4ZIAXK
Mark Goldberg http://www.microsoft.com/web/websitespark/
Does your company have 10 or fewer employees?
Receive Windows Web Server and SQL Server Web Edition at no cost to host new websites
Olivier Cretey http://softvelocity.cachefly.net/ex/Clarion7ExamplesandLessons_installer.zip
Update to the debugger class

Mark Goldberg
SELF.debugout('Debuger Class last modified['& CLIP(FORMAT(DATE(10,27,2009),@D18)) &']')
      SELF.debugout('Debuger Class Updates: http://www.monolithcc.com/clarion/debuger.zip     ')
Andy_eaFXTrader http://www.balsamiq.com/  --- xml , and screen / web prototyping
Search and Replace string method

Mark Goldberg
I remember spending a day writing a method in CW to do a search and replace on a string, where the lengths of the strings were different.  It takes advantage of advanced CW coding techniques.

In .NET, it's a matter of opening a browser, doing a quick search, to find the command (assuming you didn't already know it)
and then using it is... nothing... it's just so simple.
[1:07:19 PM] Mark Goldberg:

ctMG.ReplaceStr          PROCEDURE(STRING xSearchIn, STRING xSearchFor, STRING xReplaceWith, <*LONG xaReplaceLen>Wink !,STRING
PARAM::ReplaceLen  EQUATE(5)

!Note: C6+ can declare a string dimension at runtime via an expression, C55 cannot
!      so I have created ctMGStr, which allocates a string via NEW STRING
!      the reason I'm using a CLASS vs. a simple &STRING is so I can return the value of the string
!      and AFTER the RETURN do a DISPOSE - via the .DESTRUCT

       !RetVal                  STRING( 200) !<-- simple for initial test
!C60+!  RetVal                  STRING(8192) ! LEN(xSearchIn) * CEILING( LEN(xReplaceWith) / LEN(xSearchFor) ) )!<-- C6 Language Construct
oMGStr                   ctMGStr   !  RetVal.INIT(nPictLen - 3)  !  RetVal &= NEW STRING( nPictLen - 3)
RetVal                  &STRING

nLen_xSearchIn          LONG(),AUTO
nLen_xSearchFor         LONG(),AUTO
nLen_xReplaceWith       LONG(),AUTO

nFoundAt                LONG,AUTO
nSearchIn_Lo            LONG(1)
nRetVal_Dest            LONG(1)

nMoveSize               LONG,AUTO
lcl:bODS                LONG(FALSE)

    nLen_xSearchFor   = LEN(xSearchFor)
    IF NOT nLen_xSearchFor
       RETURN xSearchIn        !<--- MG Policy
    nLen_xSearchIn    = LEN(xSearchIn)
    nLen_xReplaceWith = LEN(xReplaceWith)
     IF lcl:bODS THEN ASSERT(0,eqDBG&'ctMG.ReplaceStr [start]vvvvv-{142}') END
     !-! ASSERT(0,eqDBG&'SIZE(RetVal)['& SIZE(RetVal) &']')
     !-! ASSERT(0,eqDBG&'                         1         2         3         4         5         6         7         8         9        10        11        12        13        14        15        16        17')
     !-! ASSERT(0,eqDBG&'                123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-')
     !-! ASSERT(0,eqDBG&'ReplaceStr   In[' & xSearchIn &']')
     !-! ASSERT(0,eqDBG&'ReplaceStr  For[' & xSearchFor &']')
     !-! ASSERT(0,eqDBG&'ReplaceStr With['& xReplaceWith &']')
     !-! ASSERT(0,eqDBG&'  Len In/For/With=['& nLen_xSearchIn &','& nLen_xSearchFor &','& nLen_xReplaceWith &']')
     !-! ASSERT(0,eqDBG&'Retval being .init to a len of ['& nLen_xSearchIn * SELF.ceiling( nLen_xReplaceWith / nLen_xSearchFor ) &']')
    IF nLen_xReplaceWith
      oMGStr.INIT(nLen_xSearchIn * SELF.ceiling( nLen_xReplaceWith / nLen_xSearchFor ) )
    RetVal &= oMGStr.Str

      nFoundAt = INSTRING( xSearchFor, xSearchIn, 1, nSearchIn_Lo) !Start searching at nSearchIn_Lo

      IF lcl:bODS THEN ASSERT(0,eqDBG&'nSearchIn_Lo['& nSearchIn_Lo &'] nFoundAt['& nFoundAt &'] nRetVal_Dest['& nRetVal_Dest &']') END

      IF nFoundAt
         nMoveSize                                         = nFoundAt - nSearchIn_Lo     !1 + (nFoundAt - 1) - nSearchIn_Lo
                                                                        !-! ASSERT(0,eqDBG&'nMoveSize['& nMoveSize &']')
                                                                        !-! ASSERT(0,eqDBG&'['& nRetVal_Dest &' : '& nRetVal_Dest + nMoveSize - 1&'] = ['&  nSearchIn_Lo &' : '& nFoundAt - 1 &']')
         RetVal[ nRetVal_Dest : nRetVal_Dest + nMoveSize - 1 ] = xSearchIn[ nSearchIn_Lo : nFoundAt - 1]
         nRetVal_Dest                                     += nMoveSize
                                                                        !-! ASSERT(0,eqDBG&'nLen_xReplaceWith['& nLen_xReplaceWith &']')
         RetVal[ nRetVal_Dest :  nRetVal_Dest + nLen_xReplaceWith ] = xReplaceWith
                                                                        !-! ASSERT(0,eqDBG&'nLen_xReplaceWith['& nLen_xReplaceWith &']')
         nRetVal_Dest                                     += nLen_xReplaceWith

         nSearchIn_Lo                                      = nFoundAt + nLen_xSearchFor !error by 1 ?

         IF nSearchIn_Lo > nLen_xSearchIn


           nMoveSize = 1 + nLen_xSearchIn - nSearchIn_Lo
           !-! ASSERT(0,eqDBG&'nMoveSize['& nMoveSize &']')
           IF nMoveSize
              !-! ASSERT(0,eqDBG&'['& nRetVal_Dest &' : '& nRetVal_Dest + nMoveSize - 1&'] = ['&  nSearchIn_Lo &' : '& nLen_xSearchIn &']')
              RetVal[ nRetVal_Dest : nRetVal_Dest + nMoveSize - 1] = xSearchIn[ nSearchIn_Lo : nLen_xSearchIn]
              nRetVal_Dest                                    += nMoveSize

       xaReplaceLen = nRetVal_Dest - 1

    IF lcl:bODS THEN    ASSERT(0,eqDBG&'ctMG.ReplaceStr [end] nRetVal_Dest['& nRetVal_Dest &']^^^^-{142}') END

    IF nRetVal_Dest =  1
       RETURN ''

    RETURN RetVal[ 1 : nRetVal_Dest - 1]
Joomla Template: by JoomlaShack