<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://code.msdn.microsoft.com/rss.xsl"?><rss version="2.0"><channel><title>FoxPro Release Rss Feed</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx</link><description>FoxPro Release Rss Description</description><item><title>UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127</link><description>Sometimes it happens that some memofields get corrupted, due for whatever reasons. If you try to access such a file, you&amp;#39;ll get errors or can&amp;#39;t even open it.&lt;br /&gt;The attached routine creates a new table and tries to copy record for record to the new table. It supports tables with multiple memos per record.&lt;br /&gt;If there&amp;#39;s an error, it only copies the normal fields first, and then tries to access the memo fields separately, that way it can stil save other memos of that record. The faulty fieldname as well as the recordnumber are recorded to a logfile.&lt;br /&gt;After finishing, it opens the logfile as well as the old and new tables in BROWSE, and relates them based on the logged recordnumbers. That way you can easily see the problematic records and try to reenter that information.&lt;br /&gt;&lt;br /&gt;Interesting part here is the use of TYPE&amp;#40;&amp;#41; for checking the readability of the memo.&lt;br /&gt;&lt;br /&gt;Updated 2009-06-29&amp;#58; Fixed some small errors &amp;#40;Thanks to Stefan Zehner for reprting them&amp;#33;&amp;#41;&lt;br /&gt;</description><author></author><pubDate>Mon, 29 Jun 2009 21:48:06 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008) 20090629P</guid></item><item><title>UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127</link><description>Sometimes it happens that some memofields get corrupted, due for whatever reasons. If you try to access such a file, you&amp;#39;ll get errors or can&amp;#39;t even open it.&lt;br /&gt;The attached routine creates a new table and tries to copy record for record to the new table. It supports tables with multiple memos per record.&lt;br /&gt;If there&amp;#39;s an error, it only copies the normal fields first, and then tries to access the memo fields separately, that way it can stil save other memos of that record. The faulty fieldname as well as the recordnumber are recorded to a logfile.&lt;br /&gt;After finishing, it opens the logfile as well as the old and new tables in BROWSE, and relates them based on the logged recordnumbers. That way you can easily see the problematic records and try to reenter that information.&lt;br /&gt;&lt;br /&gt;Interesting part here is the use of TYPE&amp;#40;&amp;#41; for checking the readability of the memo.</description><author></author><pubDate>Mon, 29 Jun 2009 21:46:44 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008) 20090629P</guid></item><item><title>UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=442</link><description>Yesterday a customer called because he stumbled over a NET method for formatting strings, when he tried to understand a NET sampleprogram he wanted to convert to VFP.. It was something like &lt;br /&gt;&amp;#123;&amp;#123;String.Format&amp;#40;&amp;#34;This is a test &amp;#123;0&amp;#125; with name &amp;#123;1&amp;#125;&amp;#34;, &amp;#34;Hello&amp;#34;, &amp;#34;Willi&amp;#34;&amp;#41;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;I pointed out, that VFP&amp;#39;s TEXTMERGE&amp;#40;&amp;#41; is much more capable than this simple routine&amp;#58;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#60;&amp;#60;adress.lastname&amp;#62;&amp;#62; at &amp;#60;&amp;#60;date&amp;#40;&amp;#41;&amp;#62;&amp;#62; on PC &amp;#60;&amp;#60;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#62;&amp;#62;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#42; or in NET style&amp;#58;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#123;adress.lastname&amp;#125; at &amp;#123;date&amp;#40;&amp;#41;&amp;#125; on PC &amp;#123;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#125;&amp;#34;,.f. ,&amp;#34;&amp;#123;&amp;#34;,&amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;but just for fun, I wrote this routine which works similar to the NET version&amp;#58;&lt;br /&gt;It takes a string plus several parameters &amp;#40;if you need more than 9 you could extend that parameters list up to vPara30&amp;#41;. Optionally those parameter placeholders can have a formatting clause attached, in that case they are appended with a &amp;#34;&amp;#58;&amp;#34;. We use the standard FORMAT and INPUTMASK rules here. You can use any parameter several times in the string &amp;#40;see that &amp;#123;0&amp;#125; as an example&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#42;-------------------------------------------------&lt;br /&gt;x &amp;#61; &amp;#34;Hallo, heute ist der &amp;#123;0&amp;#125;, und mein Name ist &amp;#123;1&amp;#58;&amp;#64;&amp;#33;&amp;#125; und der Umsatz ist &amp;#123;2&amp;#58;99,999.99&amp;#125; und das ist am &amp;#123;0&amp;#58;&amp;#64;YL&amp;#125;&amp;#33;&amp;#34;&lt;br /&gt;&amp;#63; stringformat&amp;#40;x, DATE&amp;#40;&amp;#41;, &amp;#34;willi&amp;#34; , 1234.45&amp;#42;11&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;FUNCTION StringFormat&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;&amp;#42; Mimics the String.Format&amp;#40;&amp;#41; Method of NET&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;LPARAMETERS cString, vPara0, vPara1, vPara2, vPara3, vPara4, vPara5, vPara6, vPara7, vPara8, vPara9&lt;br /&gt;LOCAL nCount, cCount, cReturn, cSearch, cFormat&lt;br /&gt;cReturn &amp;#61; cString&lt;br /&gt;FOR nCount &amp;#61; 1 TO OCCURS&amp;#40;&amp;#34;&amp;#123;&amp;#34;, cString&amp;#41;&lt;br /&gt;    cSearch &amp;#61; STREXTRACT&amp;#40;cString, &amp;#34;&amp;#123;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;, nCount, 4&amp;#41;&lt;br /&gt;    cFormat &amp;#61; STREXTRACT&amp;#40;cSearch, &amp;#34;&amp;#58;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;    cCount  &amp;#61; CHRTRAN&amp;#40;STRTRAN&amp;#40;cSearch, cFormat,&amp;#34;&amp;#34;&amp;#41;, &amp;#34;&amp;#123;&amp;#58;&amp;#125;&amp;#34;,&amp;#34;&amp;#34;&amp;#41;&lt;br /&gt;    IF EMPTY&amp;#40;cFormat&amp;#41;&lt;br /&gt;        cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;&amp;#41; &amp;#41;&lt;br /&gt;    ELSE &amp;#9;&lt;br /&gt;        cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;,cFormat&amp;#41; &amp;#41;&lt;br /&gt;    ENDIF &lt;br /&gt;ENDFOR &lt;br /&gt;RETURN cReturn&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Thu, 21 Feb 2008 12:22:23 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221P</guid></item><item><title>UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....  And with some initial help from my buddy Bernhard Reiter for the Internet stuff I ended up with this solution.&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;&amp;#123;&amp;#123; DO FORM CreatePassword WITH User.LastName TO cPassword &amp;#125;&amp;#125;&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;Uploaded Rev.2 with some small enhancements...</description><author></author><pubDate>Thu, 21 Feb 2008 12:14:13 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080221P</guid></item><item><title>UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=442</link><description>Yesterday a customer called because he stumbled over a NET method for formatting strings, when he tried to understand a NET sampleprogram he wanted to convert to VFP.. It was something like &lt;br /&gt;&amp;#123;&amp;#123;String.Format&amp;#40;&amp;#34;This is a test &amp;#123;0&amp;#125; with name &amp;#123;1&amp;#125;&amp;#34;, &amp;#34;Hello&amp;#34;, &amp;#34;Willi&amp;#34;&amp;#41;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;I pointed out, that VFP&amp;#39;s TEXTMERGE&amp;#40;&amp;#41; is much more capable than this simple routine&amp;#58;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#60;&amp;#60;&amp;#39;Hallo&amp;#39;&amp;#62;&amp;#62; at &amp;#60;&amp;#60;date&amp;#40;&amp;#41;&amp;#62;&amp;#62; on PC &amp;#60;&amp;#60;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#62;&amp;#62;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#42; or in NET style&amp;#58;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#123;&amp;#39;Hallo&amp;#39;&amp;#125; at &amp;#123;date&amp;#40;&amp;#41;&amp;#125; on PC &amp;#123;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#125;&amp;#34;,.f. ,&amp;#34;&amp;#123;&amp;#34;,&amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;but just for fun, I wrote this routine which works similar to the NET version&amp;#58;&lt;br /&gt;It takes a string plus several parameters &amp;#40;if you need more than 9 you could extend that parameters list up to vPara30&amp;#41;. Optionally those parameter placeholders can have a formatting clause attached, in that case they are appended with a &amp;#34;&amp;#58;&amp;#34;. We use the standard FORMAT and INPUTMASK rules here. You can use any parameter several times in the string &amp;#40;see that &amp;#123;0&amp;#125; as an example&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#42;-------------------------------------------------&lt;br /&gt;x &amp;#61; &amp;#34;Hallo, heute ist der &amp;#123;0&amp;#125;, und mein Name ist &amp;#123;1&amp;#58;&amp;#64;&amp;#33;&amp;#125; und der Umsatz ist &amp;#123;2&amp;#58;99,999.99&amp;#125; und das ist am &amp;#123;0&amp;#58;&amp;#64;YL&amp;#125;&amp;#33;&amp;#34;&lt;br /&gt;&amp;#63; stringformat&amp;#40;x, DATE&amp;#40;&amp;#41;, &amp;#34;willi&amp;#34; , 1234.45&amp;#42;11&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;FUNCTION StringFormat&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;&amp;#42; Mimics the String.Format&amp;#40;&amp;#41; Method of NET&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;LPARAMETERS cString, vPara0, vPara1, vPara2, vPara3, vPara4, vPara5, vPara6, vPara7, vPara8, vPara9&lt;br /&gt;LOCAL nCount, cCount, cReturn, cSearch, cFormat&lt;br /&gt;cReturn &amp;#61; cString&lt;br /&gt;FOR nCount &amp;#61; 1 TO OCCURS&amp;#40;&amp;#34;&amp;#123;&amp;#34;, cString&amp;#41;&lt;br /&gt;    cSearch &amp;#61; STREXTRACT&amp;#40;cString, &amp;#34;&amp;#123;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;, nCount, 4&amp;#41;&lt;br /&gt;    cFormat &amp;#61; STREXTRACT&amp;#40;cSearch, &amp;#34;&amp;#58;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;    cCount  &amp;#61; CHRTRAN&amp;#40;STRTRAN&amp;#40;cSearch, cFormat,&amp;#34;&amp;#34;&amp;#41;, &amp;#34;&amp;#123;&amp;#58;&amp;#125;&amp;#34;,&amp;#34;&amp;#34;&amp;#41;&lt;br /&gt;    IF EMPTY&amp;#40;cFormat&amp;#41;&lt;br /&gt;        cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;&amp;#41; &amp;#41;&lt;br /&gt;    ELSE &amp;#9;&lt;br /&gt;        cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;,cFormat&amp;#41; &amp;#41;&lt;br /&gt;    ENDIF &lt;br /&gt;ENDFOR &lt;br /&gt;RETURN cReturn&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Thu, 21 Feb 2008 12:12:08 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221P</guid></item><item><title>UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=442</link><description>Yesterday a customer called because he stumbled over a NET method for formatting strings, when he tried to understand a NET sampleprogram he wanted to convert to VFP.. It was something like &lt;br /&gt;&amp;#123;&amp;#123;String.Format&amp;#40;&amp;#34;This is a test &amp;#123;0&amp;#125; with name &amp;#123;1&amp;#125;&amp;#34;, &amp;#34;Hello&amp;#34;, &amp;#34;Willi&amp;#34;&amp;#41;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;I pointed out, that VFP&amp;#39;s TEXTMERGE&amp;#40;&amp;#41; is much more capable than this simple routine&amp;#58;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#60;&amp;#60;&amp;#39;Hallo&amp;#39;&amp;#62;&amp;#62; at &amp;#60;&amp;#60;date&amp;#40;&amp;#41;&amp;#62;&amp;#62; on PC &amp;#60;&amp;#60;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#62;&amp;#62;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#42; or in NET style&amp;#58;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#123;&amp;#39;Hallo&amp;#39;&amp;#125; at &amp;#123;date&amp;#40;&amp;#41;&amp;#125; on PC &amp;#123;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#125;&amp;#34;,.f. ,&amp;#34;&amp;#123;&amp;#34;,&amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;but just for fun, I wrote this routine which works similar to the NET version&amp;#58;&lt;br /&gt;It takes a string plus several parameters &amp;#40;if you need more than 9 you could extend that parameters list up to vPara30&amp;#41;. Optionally those parameter placeholders can have a formatting clause attached, in that case they are appended with a &amp;#34;&amp;#58;&amp;#34;. We use the standard FORMAT and INPUTMASK rules here. You can use any parameter several times in the string &amp;#40;see that &amp;#123;0&amp;#125; as an example&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#42;-------------------------------------------------&lt;br /&gt;x &amp;#61; &amp;#34;Hallo, heute ist der &amp;#123;0&amp;#125;, und mein Name ist &amp;#123;1&amp;#58;&amp;#64;&amp;#33;&amp;#125; und der Umsatz ist &amp;#123;2&amp;#58;99,999.99&amp;#125; und das ist am &amp;#123;0&amp;#58;&amp;#64;YL&amp;#125;&amp;#33;&amp;#34;&lt;br /&gt;&amp;#63; stringformat&amp;#40;x, DATE&amp;#40;&amp;#41;, &amp;#34;willi&amp;#34; , 1234.45&amp;#42;11&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;FUNCTION StringFormat&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;&amp;#42; Mimics the String.Format&amp;#40;&amp;#41; Method of NET&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;LPARAMETERS cString, vPara0, vPara1, vPara2, vPara3, vPara4, vPara5, vPara6, vPara7, vPara8, vPara9&lt;br /&gt;LOCAL nCount, cCount, cReturn, cSearch, cFormat&lt;br /&gt;cReturn &amp;#61; cString&lt;br /&gt;FOR nCount &amp;#61; 1 TO OCCURS&amp;#40;&amp;#34;&amp;#123;&amp;#34;, cString&amp;#41;&lt;br /&gt;&amp;#9;cSearch &amp;#61; STREXTRACT&amp;#40;cString, &amp;#34;&amp;#123;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;, nCount, 4&amp;#41;&lt;br /&gt;&amp;#9;cFormat &amp;#61; STREXTRACT&amp;#40;cSearch, &amp;#34;&amp;#58;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#9;cCount  &amp;#61; CHRTRAN&amp;#40;STRTRAN&amp;#40;cSearch, cFormat,&amp;#34;&amp;#34;&amp;#41;, &amp;#34;&amp;#123;&amp;#58;&amp;#125;&amp;#34;,&amp;#34;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#9;IF EMPTY&amp;#40;cFormat&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;&amp;#41; &amp;#41;&lt;br /&gt;&amp;#9;ELSE &amp;#9;&lt;br /&gt;&amp;#9;&amp;#9;cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;,cFormat&amp;#41; &amp;#41;&lt;br /&gt;&amp;#9;ENDIF &lt;br /&gt;ENDFOR &lt;br /&gt;RETURN cReturn&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Thu, 21 Feb 2008 12:10:32 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221P</guid></item><item><title>UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=442</link><description>Yesterday a customer called because he stumbled over a NET method for formatting strings, when he tried to understand a NET sampleprogram he wanted to convert to VFP.. It was something like &lt;br /&gt;&amp;#123;&amp;#123;String.Format&amp;#40;&amp;#34;This is a test &amp;#123;0&amp;#125; with name &amp;#123;1&amp;#125;&amp;#34;, &amp;#34;Hello&amp;#34;, &amp;#34;Willi&amp;#34;&amp;#41;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;I pointed ot, that VFP&amp;#39;s TEXTMERGE&amp;#40;&amp;#41; is much more capable than this simple routine&amp;#58;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#60;&amp;#60;&amp;#39;Hallo&amp;#39;&amp;#62;&amp;#62; at &amp;#60;&amp;#60;date&amp;#40;&amp;#41;&amp;#62;&amp;#62; on PC &amp;#60;&amp;#60;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#62;&amp;#62;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#42; or in NET style&amp;#58;&lt;br /&gt;&amp;#63; TEXTMERGE&amp;#40;&amp;#34;This is a test &amp;#123;&amp;#39;Hallo&amp;#39;&amp;#125; at &amp;#123;date&amp;#40;&amp;#41;&amp;#125; on PC &amp;#123;GETWORDNUM&amp;#40;SYS&amp;#40;0&amp;#41;,1&amp;#41;&amp;#125;&amp;#34;,.f. ,&amp;#34;&amp;#123;&amp;#34;,&amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;but just for fun, I wrote this routine which works similar to the NET version&amp;#58;&lt;br /&gt;It takes a string plus several parameters &amp;#40;if you need more than 9 you could extend that parameters list up to vPara30&amp;#41;. Optionally those parameter placeholders can have a formatting clause attached, in that case they are appended with a &amp;#34;&amp;#58;&amp;#34;. We use the standard FORMAT and INPUTMASK rules here. You can use any parameter several times in the string &amp;#40;see that &amp;#123;0&amp;#125; as an example&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#123;&amp;#123;&lt;br /&gt;&amp;#42;-------------------------------------------------&lt;br /&gt;x &amp;#61; &amp;#34;Hallo, heute ist der &amp;#123;0&amp;#125;, und mein Name ist &amp;#123;1&amp;#58;&amp;#64;&amp;#33;&amp;#125; und der Umsatz ist &amp;#123;2&amp;#58;99,999.99&amp;#125; und das ist am &amp;#123;0&amp;#58;&amp;#64;YL&amp;#125;&amp;#33;&amp;#34;&lt;br /&gt;&amp;#63; stringformat&amp;#40;x, DATE&amp;#40;&amp;#41;, &amp;#34;willi&amp;#34; , 1234.45&amp;#42;11&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;FUNCTION StringFormat&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;&amp;#42; Mimics the String.Format&amp;#40;&amp;#41; Method of NET&lt;br /&gt;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&amp;#42;&lt;br /&gt;LPARAMETERS cString, vPara0, vPara1, vPara2, vPara3, vPara4, vPara5, vPara6, vPara7, vPara8, vPara9&lt;br /&gt;LOCAL nCount, cCount, cReturn, cSearch, cFormat&lt;br /&gt;cReturn &amp;#61; cString&lt;br /&gt;FOR nCount &amp;#61; 1 TO OCCURS&amp;#40;&amp;#34;&amp;#123;&amp;#34;, cString&amp;#41;&lt;br /&gt;&amp;#9;cSearch &amp;#61; STREXTRACT&amp;#40;cString, &amp;#34;&amp;#123;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;, nCount, 4&amp;#41;&lt;br /&gt;&amp;#9;cFormat &amp;#61; STREXTRACT&amp;#40;cSearch, &amp;#34;&amp;#58;&amp;#34;, &amp;#34;&amp;#125;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#9;cCount  &amp;#61; CHRTRAN&amp;#40;STRTRAN&amp;#40;cSearch, cFormat,&amp;#34;&amp;#34;&amp;#41;, &amp;#34;&amp;#123;&amp;#58;&amp;#125;&amp;#34;,&amp;#34;&amp;#34;&amp;#41;&lt;br /&gt;&amp;#9;IF EMPTY&amp;#40;cFormat&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;&amp;#41; &amp;#41;&lt;br /&gt;&amp;#9;ELSE &amp;#9;&lt;br /&gt;&amp;#9;&amp;#9;cReturn &amp;#61; STRTRAN&amp;#40;cReturn, cSearch, TRANSFORM&amp;#40;EVALUATE&amp;#40;&amp;#34;vPara&amp;#34;&amp;#43;cCount&amp;#41;,cFormat&amp;#41; &amp;#41;&lt;br /&gt;&amp;#9;ENDIF &lt;br /&gt;ENDFOR &lt;br /&gt;RETURN cReturn&lt;br /&gt;&amp;#125;&amp;#125;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Thu, 21 Feb 2008 12:10:11 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221P</guid></item><item><title>UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....  And with some initial help from my buddy Bernhard Reiter for the Internet stuff I ended up with this solution.&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;Uploaded Rev.2 with some small enhancements, like added Autocomplete to the searchtextbox, setting _Cliptext on exit etc</description><author></author><pubDate>Thu, 21 Feb 2008 09:30:21 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080221A</guid></item><item><title>UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....  And with some initial help from my buddy Bernhard Reiter for the Internet stuff I ended up with this solution.&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Thu, 21 Feb 2008 09:28:04 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080221A</guid></item><item><title>RELEASED: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....  And with some initial help from my buddy Bernhard Reiter for the Internet stuff I ended up with this solution.&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Wed, 13 Feb 2008 07:58:43 GMT</pubDate><guid isPermaLink="false">RELEASED: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</guid></item><item><title>UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....  And with some initial help from my buddy Bernhard Reiter for the Internet stuff I ended up with this solution.&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Wed, 13 Feb 2008 07:58:43 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</guid></item><item><title>UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;One caveat&amp;#58; If those guys over at WordSmith.org will change their website, then the parsing code will probably fail. Screenscraping is a thing of the past, but since that website doesn&amp;#39;t provide a webservice yet, we have to live with that. &lt;br /&gt;And&amp;#58; hey it&amp;#39;s just a sample for fun&amp;#33;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Wed, 13 Feb 2008 07:51:00 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</guid></item><item><title>CREATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=213</link><description>&lt;br /&gt;Whenever I needed to create new user accounts, I always struggle with &amp;#34;Which _temporary_ password do I assign that user&amp;#63;&amp;#34; Normally I used just SYS&amp;#40;2015&amp;#41; for a random string, but users don&amp;#39;t appreciate those...   Then some time ago I stumbled over that &amp;#91;url&amp;#58;Anagram Generator&amp;#124;http&amp;#58;&amp;#47;&amp;#47;www.wordsmith.org&amp;#47;anagram&amp;#47;index.html&amp;#93; which produces very interesting lists of permutations of the entered characters. Of course a manual copy and paste of those parameters isn&amp;#39;t too much fun, thus I had the idea to call that service from a FoxPro form, which is again called from the user maintainance application.  Shouldn&amp;#39;t be too difficult, eh&amp;#63; Just something for that rest of an evening or so....&lt;br /&gt;&lt;br /&gt;So, if you modify the sample form &amp;#34;CreatePassword.scx&amp;#34;, you&amp;#39;ll see some helper objects on that form, the most interesting part here is  the&lt;br /&gt;&amp;#43;&amp;#42;Anagram Class&amp;#42;&amp;#43;&lt;br /&gt;It has several properties, which are connected to all those textboxes, listbox and spinners. &amp;#40;Depending on your needs you would normally just set those properties once, but for education purposes I added them all...&amp;#41; I use the ControlSources of that controls to directly connect to the properties of the object.  And it has two methods&amp;#58;&lt;br /&gt;&amp;#42;GetAnagram&amp;#42;&amp;#58; This one makes use of the MSXML2 object, &amp;#40;which should be available on any PC which has it&amp;#39;s &amp;#91;url&amp;#58;VFP runtime&amp;#124;ftp&amp;#58;&amp;#47;&amp;#47;ftp.prolib.de&amp;#47;public&amp;#47;&amp;#93; correctly installed&amp;#41;. Downloading some Internet files is super easy with that. Interesting parts&amp;#58; The use of TEXTMERGE&amp;#40;&amp;#41; and EVL&amp;#40;&amp;#41; to assemble the URL with all it&amp;#39;s parameters. Also STRCONV&amp;#40;&amp;#41; is very handy to convert the returned content from DBCS &amp;#40;UTF-16&amp;#41; to readable content.  This HTML-String is then sent to &lt;br /&gt;&amp;#42;ParseResult&amp;#42;, which uses STREXTRACT&amp;#40;&amp;#41; to cut the useful information out of all that ads and formatting stuff. It then cleans the resultset with some help of STRTRAN&amp;#40;&amp;#41; etc, and finally converts it into a collection for returning the information back to the caller.&lt;br /&gt;&lt;br /&gt;The sample form isn&amp;#39;t too complicated&amp;#58; There&amp;#39;s just the one &amp;#34;Get&amp;#33;&amp;#34; button, which calls the Thisform.DoYourJob method, which in turn calls the Anagram-object and connects the returned collection with the listbox.  The rest is fancy things like Anchoring of the controls, &amp;#40;the Gripper in the down-right corner denotes a resizable form&amp;#41; and saving the various settings of those parameters to an INI-file with the &lt;br /&gt;&amp;#43;&amp;#42;INI-Saver&amp;#42;&amp;#43;&lt;br /&gt;This class is a subclass of the &amp;#42;Inihandler&amp;#42; class. It has a property which just holds a comma-separated list of propertynames to save and restore &amp;#40;the default is the forms top, left, height and width&amp;#41;&amp;#59; you just drop that class on a form and that&amp;#39;s it&amp;#58; positions saved and restored automagically. &lt;br /&gt;Hmm, where do we save, especially in Vista&amp;#63; I use HOME&amp;#40;7&amp;#41; as general user-related storage area here &amp;#40;see the IniSaver.INIT for setting the filename&amp;#41;&lt;br /&gt;The underlying INIHANDLER class is just a wrapper to the various API calls, which I wrote some eons ago...&lt;br /&gt;&lt;br /&gt;So have fun with your new passwords&amp;#33; How do you use it in praxis&amp;#63; You may just DO FORM and enter the First- &amp;#47; Lastname of your new user. Since that sample form is modal, you could call it like a function&amp;#58;&lt;br /&gt;DO FORM CreatePassword WITH User.LastName TO cPassword&lt;br /&gt;Of course you can also drag&amp;#38;drop some selected text to the first textbox, and drag the result back from the listbox to your userform &amp;#40;In that case you have to set  the Form.WindowType to Modeless&amp;#33;&amp;#41;.  And since someone already asked&amp;#58; Yes, you can optionally transfer the input as parameter when calling DO FORM also in modeless mode.&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Wed, 13 Feb 2008 07:41:35 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</guid></item><item><title>UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129</link><description>This sample shows how powerful the FoxPro language is. Unpack the ZIP, and you&amp;#39;ll get a RECHNER.SCX &amp;#40;which is german for Calculator&amp;#41;. The CALCTEST.SCX just shows you some examples how to call it. &lt;br /&gt;It runs either standalone &amp;#40;DO FORM RECHNER&amp;#41;, then it pops up auto-centered&amp;#59; or if you provide an objectreference as parameter, it wiill adjust itself in such a way that the entrytextbox appears on the exact position as the calling textbox, and it will grab the value of that textbox.&lt;br /&gt;&lt;br /&gt;Just enter any calculation like &amp;#34;3 &amp;#43; 4.5 &amp;#42;&amp;#40;PI&amp;#40;&amp;#41;&amp;#43;SIN&amp;#40;3&amp;#41;&amp;#41;&amp;#47;4.5&amp;#34; and you&amp;#39;ll see the result as you type. If the result is red, then there&amp;#39;s an error in the formula.  If you provided an objectreference when calling, it will transfer the result back to the textbox.&lt;br /&gt;&lt;br /&gt;Nice things to note&amp;#58; Check out the horribly complicated &amp;#34;calculation engine&amp;#34; in the text1.InteractiveChange&amp;#58; If it wouldn&amp;#39;t be the internationalisation &amp;#40;In Germany we have commas instead of points&amp;#41;, the code is a simple 1-liner&amp;#33;&lt;br /&gt;Also see the nice way to switch the color of the result-textbox, this is done in the error-method.&lt;br /&gt;&lt;br /&gt;An ugly codefragment is the Form.INIT, which tries to figure out the position of the calling textbox. Since this could be a nested multi-container hierarchy, I do a bruteforce crawl of the objectstack up to the toplevel form. &amp;#40;If you have a better logic&amp;#58; please add&amp;#33;&amp;#41;&lt;br /&gt;&lt;br /&gt;Then there are three more nice objects on that form&amp;#58;&lt;br /&gt;&amp;#42;a&amp;#41; The formsizer control&amp;#58;&amp;#42; &lt;br /&gt;It&amp;#39;s just a line, which resizes the form to a defined size at runtime, yet leaves it bigger at designtime. This way you can group all your helper objects at the botton of the form, and just denote the real runtime-size with the FormSizer line. The code is in the init, which sets the Form.Height to it&amp;#39;s own Top, then the line gets destroyed, because there&amp;#39;s no need any more for it.   Just save that line as a class to your utility classes.&lt;br /&gt;&lt;br /&gt;&amp;#42;b&amp;#41; The NoteIt control&amp;#58;&amp;#42;&lt;br /&gt;This we use for adding &amp;#34;Sticky Notes&amp;#34; for other developers&amp;#59; just like the comment property, but more visible. This notes are only available at designtime &amp;#40;the object is not instanciated at runtime&amp;#41;. This is good for notifying about important things &amp;#40;like &amp;#34;there&amp;#39;s stil abug in xyz&amp;#34;, &amp;#34;the object abc has to be always the top one&amp;#34; or such..&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;c&amp;#41; The FormGrip Control&amp;#42;&lt;br /&gt;which is in it&amp;#39;s own class and needs that grabber.gif.   Just add it to your baseform, and it will position itself to the lower right corner automagically. It changes its visual apperance depending on Windows-Themes &amp;#40;Classic or TeleTubby mode&amp;#41;, as well reacts on changes of the Borderstyle.  It just visualizes the ability to resize the form &amp;#40;something VFP  forms never had&amp;#41; and if you rightclick on it, it resizes the form back to the original size.&lt;br /&gt;&lt;br /&gt;Have fun&amp;#33;&lt;br /&gt;</description><author></author><pubDate>Mon, 04 Feb 2008 20:22:40 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080204P</guid></item><item><title>UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129</link><description>This simple form shows how powerful the FoxPro language is. Unpack the ZIP, and you&amp;#39;ll get a RECHNER.SCX &amp;#40;which is german for Calculator&amp;#41;. The CALCTEST.SCX just shows you some examples how to call it. &lt;br /&gt;It runs either standalone &amp;#40;DO FORM RECHNER&amp;#41;, then it pops up auto-centered&amp;#59; or if you provide an objectreference as parameter, it wiill adjust itself in such a way that the entrytextbox appears on the exact position as the calling textbox, and it will grab the value of that textbox.&lt;br /&gt;&lt;br /&gt;Just enter any calculation like &amp;#34;3 &amp;#43; 4.5 &amp;#42;&amp;#40;PI&amp;#40;&amp;#41;&amp;#43;SIN&amp;#40;3&amp;#41;&amp;#41;&amp;#47;4.5&amp;#34; and you&amp;#39;ll see the result as you type. If the result is red, then there&amp;#39;s an error in the formula.  If you provided an objectreference when calling, it will transfer the result back to the textbox.&lt;br /&gt;&lt;br /&gt;Nice things to note&amp;#58; Check out the horribly complicated &amp;#34;calculation engine&amp;#34; in the text1.InteractiveChange&amp;#58; If it wouldn&amp;#39;t be the internationalisation &amp;#40;In Germany we have commas instead of points&amp;#41;, the code is a simple 1-liner&amp;#33;&lt;br /&gt;Also see the nice way to switch the color of the result-textbox, this is done in the error-method.&lt;br /&gt;&lt;br /&gt;An ugly codefragment is the Form.INIT, which tries to figure out the position of the calling textbox. Since this could be a nested multi-container hierarchy, I do a bruteforce crawl of the objectstack up to the toplevel form. &amp;#40;If you have a better logic&amp;#58; please add&amp;#33;&amp;#41;&lt;br /&gt;&lt;br /&gt;Then there are three more nice objects on that form&amp;#58;&lt;br /&gt;&amp;#42;a&amp;#41; The formsizer control&amp;#58;&amp;#42; &lt;br /&gt;It&amp;#39;s just a line, which resizes the form to a defined size at runtime, yet leaves it bigger at designtime. This way you can group all your helper objects at the botton of the form, and just denote the real runtime-size with the FormSizer line. The code is in the init, which sets the Form.Height to it&amp;#39;s own Top, then the line gets destroyed, because there&amp;#39;s no need any more for it.   Just save that line as a class to your utility classes.&lt;br /&gt;&lt;br /&gt;&amp;#42;b&amp;#41; The NoteIt control&amp;#58;&amp;#42;&lt;br /&gt;This we use for adding &amp;#34;Sticky Notes&amp;#34; for other developers&amp;#59; just like the comment property, but more visible. This notes are only available at designtime &amp;#40;the object is not instanciated at runtime&amp;#41;. This is good for notifying about important things &amp;#40;like &amp;#34;there&amp;#39;s stil abug in xyz&amp;#34;, &amp;#34;the object abc has to be always the top one&amp;#34; or such..&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;c&amp;#41; The FormGrip Control&amp;#42;&lt;br /&gt;which is in it&amp;#39;s own class and needs that grabber.gif.   Just add it to your baseform, and it will position itself to the lower right corner automagically. It changes its visual apperance depending on Windows-Themes &amp;#40;Classic or TeleTubby mode&amp;#41;, as well reacts on changes of the Borderstyle.  It just visualizes the ability to resize the form &amp;#40;something VFP  forms never had&amp;#41; and if you rightclick on it, it resizes the form back to the original size.&lt;br /&gt;&lt;br /&gt;Have fun&amp;#33;&lt;br /&gt;</description><author></author><pubDate>Mon, 04 Feb 2008 20:22:14 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080204P</guid></item><item><title>UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129</link><description>This simple form shows how powerful the FoxPro language is. Unpack the ZIP, and you&amp;#39;ll get a RECHNER.SCX &amp;#40;which is german for Calculator&amp;#41;. The CALCTEST.SCX just shows you some examples how to call it. &lt;br /&gt;It runs either standalone &amp;#40;DO FORM RECHNER&amp;#41;, then it pops up auto-centered&amp;#59; or if you provide an objectreference as parameter, it wiill adjust itself in such a way that the entrytextbox appears on the exact position as the calling textbox, and it will grab the value of that textbox.&lt;br /&gt;&lt;br /&gt;Just enter any calculation like &amp;#34;3 &amp;#43; 4.5 &amp;#42;&amp;#40;PI&amp;#40;&amp;#41;&amp;#43;SIN&amp;#40;3&amp;#41;&amp;#41;&amp;#47;4.5&amp;#34; and you&amp;#39;ll see the result as you type. If the result is red, then there&amp;#39;s an error in the formula.  If you provided an objectreference when calling, it will transfer the result back to the textbox.&lt;br /&gt;&lt;br /&gt;Nice things to note&amp;#58; Check out the horribly complicated &amp;#34;calculation engine&amp;#34; in the text1.InteractiveChange&amp;#58; If it wouldn&amp;#39;t be the internationalisation &amp;#40;In Germany we have commas instead of points&amp;#41;, the code is a simple 1-liner&amp;#33;&lt;br /&gt;Also see the nice way to switch the color of the result-textbox, this is done in the error-method.&lt;br /&gt;&lt;br /&gt;An ugly codefragment is the Form.INIT, which tries to figure out the position of the calling textbox. Since this could be a nested multi-container hierarchy, I do a bruteforce crawl of the objectstack up to the toplevel form. &amp;#40;If you have a better logic&amp;#58; please add&amp;#33;&amp;#41;&lt;br /&gt;&lt;br /&gt;Then there are three more nice objects on that form&amp;#58;&lt;br /&gt;&amp;#42;a&amp;#41; The formsizer control&amp;#58;&amp;#42; &lt;br /&gt;It&amp;#39;s just a line, which resizes the form to a defined size at runtime, yet leaves it bigger at designtime. This way you can group all your helper objects at the botton of the form, and just denote the real runtime-size with the FormSizer line. The code is in the init, which sets the Form.Height to it&amp;#39;s own Top, then the line gets destroyed, because there&amp;#39;s no need any more for it.   Just save that line as a class to your utility classes.&lt;br /&gt;&lt;br /&gt;&amp;#42;b&amp;#41; The NoteIt control&amp;#58;&amp;#42;&lt;br /&gt;This we use for adding &amp;#34;Sticky Notes&amp;#34; for other developers&amp;#59; just like the comment property, but more visible. This notes are only available at designtime &amp;#40;the object is not instanciated at runtime&amp;#41;. This is good for notifying about important things &amp;#40;like &amp;#34;there&amp;#39;s stil abug in xyz&amp;#34;, &amp;#34;the object abc has to be always the top one&amp;#34; or such..&amp;#41;&lt;br /&gt;&lt;br /&gt;&amp;#42;c&amp;#41; The FormGrip Control&amp;#42;&lt;br /&gt;which is in it&amp;#39;s own class and needs that grabber.gif.   Just add it to your baseform, and it will position itself to the lower right corner automagically. It changes its visual apperance depending on Windows-Themes &amp;#40;Classic or TeleTubby mode&amp;#41;, as well reacts on changes of the Borderstyle.  It just visualizes the ability to resize the form &amp;#40;something VFP  forms never had&amp;#41; and if you rightclick on it, it resizes the form back to the original size.&lt;br /&gt;&lt;br /&gt;Have fun&amp;#33;&lt;br /&gt;</description><author></author><pubDate>Mon, 04 Feb 2008 20:21:53 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080204P</guid></item><item><title>CREATED RELEASE: Digital display for huge numbers (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131</link><description>If you need to display huge sized numbers on a display, you can either size a truetype font up to some hundred points, or you can mimic that typical 8-segment cashregister displays.&lt;br /&gt;&lt;br /&gt;The attached class &amp;#34;digital.vcx&amp;#34; contains a ready to go class for displaying those numbers, as well as two testforms.&lt;br /&gt;&lt;br /&gt;DIGITAL1.SCX&amp;#58;&lt;br /&gt;This one shows the whole range of usable characters.  Note that there is only one single line of code to make the whole form work&amp;#58; Optiongroup.Click&amp;#58; &amp;#34;thisform.Digital1.Value &amp;#61; this.Value&amp;#34;&lt;br /&gt;The trick here is that the Optiongroup.Value is initialized with SPACE&amp;#40;1&amp;#41;, this means that we get the Caption of the clicked Optionbuttion back, which then gets &lt;br /&gt;assigned to the Digital-Class.  FOX ROCKS&amp;#33;&lt;br /&gt;&lt;br /&gt;DIGITAL2.SCX&amp;#58;&lt;br /&gt;Here you see 4 digits together, as you would typically build them for a real display.  Enter the value to display in the textbox at the lower right corner. Play with the assignments of the various colors to find your style... Switch on and off the blinking and Borders&amp;#33; &lt;br /&gt;Notice the use of THISFORM.SETALL&amp;#40;&amp;#41; to set the colors etc for all instances.&lt;br /&gt;&lt;br /&gt;There&amp;#39;s also a not yet finished attempt to build a 16-segment display... Feel free to get creative&amp;#33;&lt;br /&gt;&lt;br /&gt;</description><author></author><pubDate>Sun, 03 Feb 2008 14:00:54 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: Digital display for huge numbers (Feb 03, 2008) 20080203P</guid></item><item><title>UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129</link><description>This simple form shows how powerful the FoxPro language is. Unpack the ZIP, and you&amp;#39;ll get a RECHNER.SCX &amp;#40;which is german for Calculator&amp;#41;. The CALCTEST.SCX just shows you some examples how to call it. &lt;br /&gt;It runs either standalone &amp;#40;DO FORM RECHNER&amp;#41;, then it pops up auto-centered&amp;#59; or if you provide an objectreference as parameter, it wiill adjust itself in such a way that the entrytextbox appears on the exact position as the calling textbox, and it will grab the value of that textbox.&lt;br /&gt;&lt;br /&gt;Just enter any calculation like &amp;#34;3 &amp;#43; 4.5 &amp;#42;&amp;#40;PI&amp;#40;&amp;#41;&amp;#43;SIN&amp;#40;3&amp;#41;&amp;#41;&amp;#47;4.5&amp;#34; and you&amp;#39;ll see the result as you type. If the result is red, then there&amp;#39;s an error in the formula.  If you provided an objectreference when calling, it will transfer the result back to the textbox.&lt;br /&gt;&lt;br /&gt;Nice things to note&amp;#58; Check out the horribly complicated &amp;#34;calculation engine&amp;#34; in the text1.InteractiveChange&amp;#58; If it wouldn&amp;#39;t be the internationalisation &amp;#40;In Germany we have commas instead of points&amp;#41;, the code is a simple 1-liner&amp;#33;&lt;br /&gt;Also see the nice way to switch the color of the result-textbox. This is done in the error-method.&lt;br /&gt;&lt;br /&gt;An ugly codefragment is the Form.INIT, which tries to figure out the position of the calling textbox. Since this could be a nested multi-container hierarchy, I do a bruteforce crawl of the objectstack up to the toplevel form. &amp;#40;If you have a better logic&amp;#58; please add&amp;#33;&amp;#41;&lt;br /&gt;&lt;br /&gt;Then there are three more nice objects on that form&amp;#58;&lt;br /&gt;a&amp;#41; The formsizer control&amp;#58;  &lt;br /&gt;It&amp;#39;s just a line, which resizes the form to a defined size at runtime, yet leaves it bigger at designtime. This way you can group all your helper objects at the botton of the form, and just denote the real runtime-size with the FormSizer line. The code is in the init, which sets the Form.Height to it&amp;#39;s own Top, then the line gets destoyed, because there&amp;#39;s now need any more for it.   Just save that line as a class to your utility classes.&lt;br /&gt;&lt;br /&gt;b&amp;#41; The NoteIt control&amp;#58;&lt;br /&gt;This we use for adding &amp;#34;Sticky Notes&amp;#34; for other developers&amp;#59; just like the comment property, but more visible. This notes are only available at designtime &amp;#40;the object is not instanciated at runtime&amp;#41;. This is good for notifying about important things &amp;#40;like &amp;#34;there&amp;#39;s stil abug in xyz&amp;#34;, &amp;#34;the object abc has to be always the top one&amp;#34; or such..&amp;#41;&lt;br /&gt;&lt;br /&gt;c&amp;#41; The FormGrip Control&lt;br /&gt;which is in it&amp;#39;s own class and need that grabber.gif.   Just add it to your form, and it will position itself to the lower right corner automagically. It changes its visual apperance depending on Themes &amp;#40;Classic or TeleTubby mode&amp;#41;, as well reacts on changes of the Borderstyle.  It just visualizes the ability to resize the form &amp;#40;something VFP  forms never had&amp;#41; and if you rightclick on it, it resizes the form back to the original size.&lt;br /&gt;&lt;br /&gt;Have fun&amp;#33;&lt;br /&gt;</description><author></author><pubDate>Sun, 03 Feb 2008 12:49:23 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080203P</guid></item><item><title>CREATED RELEASE: Simple but powerful calculator (Feb 03, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129</link><description>This simple form shows how powerful the FoxPro language is. Unpack the ZIP, and you&amp;#39;ll get a RECHNER.SCX &amp;#40;which is german for Calculator&amp;#41;. The CALCTEST.SCX just shows you some examples how to call it. &lt;br /&gt;It runs either standalone &amp;#40;DO FORM RECHNER&amp;#41;, then it pops up auto-centered&amp;#59; or if you provide an objectreference as parameter, it wiill adjust itself in such a way that the entrytextbox appears on the exact position as the calling textbox, and it will grab the value of that textbox.&lt;br /&gt;&lt;br /&gt;Just enter any calculation like &amp;#34;3 &amp;#43; 4.5 &amp;#42;&amp;#40;PI&amp;#40;&amp;#41;&amp;#43;SIN&amp;#40;3&amp;#41;&amp;#41;&amp;#47;4.5&amp;#34; and you&amp;#39;ll see the result as you type. If the result is red, then there&amp;#39;s an error in the formula.  If you provided an objectrefernce when calling, it will transfer the result back to the textbox.&lt;br /&gt;&lt;br /&gt;Nice things to note&amp;#58; Check out the horribly complicated &amp;#34;calculation engine&amp;#34; in the text1.InteractiveChange&amp;#58; If it wouldn&amp;#39;t be the internationalisation &amp;#40;In Germany we have commas instead of points&amp;#41;, the code is a simple 1-liner&amp;#33;&lt;br /&gt;Also see the nice way to switch the color of the result-textbox. This is done in the error-method.&lt;br /&gt;&lt;br /&gt;An ugly codefragment is the Form.INIT, which tries to figure out the position of the calling textbox. Since this could be a nested multi-container hierarchy, I do a bruteforce crawl of the objectstack up to the toplevel form. &amp;#40;If you have a better logic&amp;#58; please add&amp;#33;&amp;#41;&lt;br /&gt;&lt;br /&gt;Then there are three more nice objects on that form&amp;#58;&lt;br /&gt;a&amp;#41; The formsizer control&amp;#58;  &lt;br /&gt;It&amp;#39;s just a line, which resizes the form to a defined size at runtime, yet leaves it bigger at designtime. This way you can group all your helper objects at the botton of the form, and just denote the real runtime-size with the FormSizer line. The code is in the init, which sets the Form.Height to it&amp;#39;s own Top, then the line gets destoyed, because there&amp;#39;s now need any more for it.   Just save that line as a class to your utility classes.&lt;br /&gt;&lt;br /&gt;b&amp;#41; The NoteIt control&amp;#58;&lt;br /&gt;This we use for adding &amp;#34;Sticky Notes&amp;#34; for other developers&amp;#59; just like the comment property, but more visible. This notes are only available at designtime &amp;#40;the object is not instanciated at runtime&amp;#41;. This is good for notifying about important things &amp;#40;like &amp;#34;there&amp;#39;s stil abug in xyz&amp;#34;, &amp;#34;the object abc has to be always the top one&amp;#34; or such..&amp;#41;&lt;br /&gt;&lt;br /&gt;c&amp;#41; The FormGrip Control&lt;br /&gt;which is in it&amp;#39;s own class and need that grabber.gif.   Just add it to your form, and it will position itself to the lower right corner automagically. It changes its visual apperance depending on Themes &amp;#40;Classic or TeleTubby mode&amp;#41;, as well reacts on changes of the Borderstyle.  It just visualizes the ability to resize the form &amp;#40;something VFP  forms never had&amp;#41; and if you rightclick on it, it resizes the form back to the original size.&lt;br /&gt;&lt;br /&gt;Have fun&amp;#33;&lt;br /&gt;</description><author></author><pubDate>Sun, 03 Feb 2008 12:45:41 GMT</pubDate><guid isPermaLink="false">CREATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080203P</guid></item><item><title>UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008)</title><link>http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127</link><description>Sometimes it happens that some memofields get corrupted, due for whatever reasons. If you try to access such a file, you&amp;#39;ll get errors or can&amp;#39;t even open it.&lt;br /&gt;The attached routine creates a new table and tries to copy record for record to the new table. It supports tables with multiple memos per record.&lt;br /&gt;If there&amp;#39;s an error, it only copies the normal fields first, and then tries to access the memo fields separately, that way it can stil save other memos of that record. The faulty fieldname as well as the recordnumber are recorded to a logfile.&lt;br /&gt;After finishing, it opens the logfile as well as the old and new tables in BROWSE, and relates them based on the logged recordnumbers. That way you can easily see the problematic records and try to reenter that information.&lt;br /&gt;&lt;br /&gt;Interesting part here is the use of TYPE&amp;#40;&amp;#41; for checking the readability of the memo.</description><author></author><pubDate>Sun, 03 Feb 2008 00:59:04 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Rescue tables with corrupted Memo (Feb 02, 2008) 20080203A</guid></item></channel></rss>