<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://code.msdn.microsoft.com/rss.xsl"?><rss version="2.0"><channel><title>wOOdy's Visual FoxPro code snippets</title><link>http://code.msdn.microsoft.com/FoxPro/Project/ProjectRss.aspx</link><description>Tips, Tricks and Code about Visual FoxPro</description><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=14</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 years working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=442" class="externalLink"&gt;NET stringformat for VFP&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=213" class="externalLink"&gt;Generate Anagram-based passwords&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Rev.2 &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at our &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Thu, 21 Feb 2008 19:16:41 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 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;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 09:22:23 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 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;&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 09:14:13 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080221A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=13</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 years working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=442" class="externalLink"&gt;NET stringformat for VFP&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=213" class="externalLink"&gt;Generate Anagram-based passwords&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Rev.2 &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at my &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Thu, 21 Feb 2008 09:13:00 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080221A</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 09:12:08 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221A</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 09:10:32 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221A</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 09:10:11 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: NET.String.Format for VFP (Feb 21, 2008) 20080221A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 years working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=213" class="externalLink"&gt;Generate Anagram-based passwords&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Rev.2 &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at my &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Thu, 21 Feb 2008 06:31:06 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 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;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 06: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 06:28:04 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080221A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 years working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=213" class="externalLink"&gt;Generate Anagram-based passwords&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at my &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Wed, 20 Feb 2008 16:01:40 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080220P</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 04:58:43 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</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 04: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....&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 04:51:00 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Password Generator based on Anagrams (Feb 13, 2008) 20080213A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 year working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=FoxPro&amp;amp;ReleaseId=213" class="externalLink"&gt;Generate Anagram-based passwords&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at my &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Wed, 13 Feb 2008 04:42:49 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 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 04: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 17: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 17: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 17:21:53 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: Simple but powerful calculator (Feb 03, 2008) 20080204P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://code.msdn.microsoft.com/FoxPro/Wiki/View.aspx?title=Home&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Tips, Tricks and Code about Visual FoxPro
&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;I just claimed this space for a place to upload some small but genious ;) routines for our beloved tool &lt;a href="http://msdn.com/vfoxpro" class="externalLink"&gt;Visual FoxPro&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  Currently I don't want to clutter that MSDN area with different entries for a  lot of small codesnippets, thus please select &amp;quot;All Releases&amp;quot; at the right side to see all uploads.&lt;br /&gt; &lt;br /&gt;Here are some of my routines I have written over the last 25 year working with FoxPro. Maybe some of them are helping you on a similar problem. Of course, I suppose that you are using the latest and greatest version VFP9, thus don't holler if some samples are not working with older versions!&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=131" class="externalLink"&gt;Display huge numbers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=129" class="externalLink"&gt;Simple but powerful calculator&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=127" class="externalLink"&gt;Rescue tables with corrupted Memo&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=126" class="externalLink"&gt;DBF Resizer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=125" class="externalLink"&gt;VFP Runtime Installer&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.msdn.microsoft.com/FoxPro/Release/ProjectReleases.aspx?ReleaseId=124" class="externalLink"&gt;GZIP routine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://code.msdn.microsoft.com/UserAccount/UserProfile.aspx?UserName=woody" class="externalLink"&gt;wOOdy&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;P.S. For more downloads, take a look at my &lt;a href="ftp://ftp.prolib.de/public/" class="externalLink"&gt;FTP Server&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; where you'll find lots of downloads as well as the very popular VFP-Runtime-Installers&lt;br /&gt;
&lt;/div&gt;</description><author>woody</author><pubDate>Sun, 03 Feb 2008 11:01:50 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080203A</guid></item></channel></rss>