<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="el-GR"><title type="html">Vassilis Aggelakos</title><subtitle type="html">VFP Can Do Anything You Can Imagine</subtitle><id>http://weblogs.foxite.com/vassilisaggelakos/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.foxite.com/vassilisaggelakos/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2005-09-15T14:14:00Z</updated><entry><title>Vector Drawings with Visual Foxpro and GDI+</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2007/04/24/3726.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2007/04/24/3726.aspx</id><published>2007-04-24T09:29:00Z</published><updated>2007-04-24T09:29:00Z</updated><content type="html">&lt;P&gt;Last October my friend Cesar Chalom asked me to prepare a sample project utilizing some pure GDI+ code in order to demonstrate it in the Brazilian's Conference participants. I kept my promise and I did prepare a simple Visual Foxpro demo project with "drawing" functionality. Since then I have received many emails from participants of the conference asking to publish this demo project. &lt;BR&gt;So here it is... In this laconic project you will see the amazing capabilities of the VFP handling large complex mathematical calculations in "a speed of light" . In this demo project you will find also, two classes for trigonometric and polygon calculations. Very useful indeed. If your project needs any kind of 2D drawing don't look elsewhere.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.themelio.gr/vassilis/demoscreen.jpg" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click inside a polygon and voila!. Since you have finished designing your window you can&amp;nbsp; export your shape into an XML file!&lt;/P&gt;
&lt;P&gt;Tip: You can browse the .\Files\Shapes.dbf and modify the&amp;nbsp;points of the existing&amp;nbsp;polygons. Don't hesitate to add new polygons (like the previous ones) but be careful to have closed shapes.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.themelio.gr/vassilis/xdraw22.zip"&gt;Dowload Project &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Any feedback on this demo project would be greatly appreciated.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;VFP Can Do Anything You Can Imagine...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3726" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Programming Visual Foxpro with Master Pages (...in mind)</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2007/03/09/3430.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2007/03/09/3430.aspx</id><published>2007-03-09T09:52:00Z</published><updated>2007-03-09T09:52:00Z</updated><content type="html">&lt;P&gt;Long ago I promised you that I would give you a series of posts about the work behind ProfilSmart. This is the first installment of this series and today I will try to give you a deeper look into Profilsmart's forms.&lt;/P&gt;
&lt;P&gt;Usually I&amp;nbsp;try to be&amp;nbsp;very careful when I create a new application. I have always in my mind that what understands a user as "application" is just the user interface (UI) so I am very scholastic designing the UI.&lt;BR&gt;&amp;nbsp;Three years ago I found myself to spend almost half (40% - 45%) of my time creating new forms and playing with GUI controls. I don't know whether it was my laziness or the need that made me to create a "strange" form then. Playing with the colors or the controls on a form for a corporate team maybe it is a pleasant occupation but when you are the only developer in the company and you have to wear a dozen of hats every day, you have to find solutions and efficient ways to turn your development into a really rapid one.&lt;BR&gt;My very first thought was to create a set of Form classes with typical GUI controls and functionality that could be inherited and used in every need. Very soon a better idea came to mind and it was then that I tested to have a single form as "skeleton" and different container objects for the specific cases. So instead to load different forms across my application I created a "Master Page" with a pleasant color scheme, the navigation controls while a "sub form" was called according the occassion.&lt;/P&gt;
&lt;P&gt;Very Soon my application in "design mode" was looking like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/form01.jpg" width=600 border=0&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;...Hey this is an empty form! How can this be your 12 months work ???&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Ok let's dive a bit deeper... &lt;/P&gt;
&lt;P&gt;The form has a custom method called cAddPanel. The code of the method looks like the listing:&lt;BR&gt;(Since Profilsmart is a commercial close source application I can't publish the exact code here but I hope you get an idea)&lt;/P&gt;
&lt;P&gt;Function cAddPanel&lt;BR&gt;Lparameters tcPanelName&lt;/P&gt;
&lt;P&gt;IF ! VARTYPE(&amp;amp;tcPanelName)="O" THEN &lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;IF VARTYPE(thisform.cfrmpanel)="C" then&lt;BR&gt;&amp;nbsp;&amp;nbsp;lcObjectName = "thisform." + thisform.cFrmPanel&lt;BR&gt;&amp;nbsp;&amp;nbsp;EVALUATE(lcObjectName + ".OnBeforeClose()")&lt;BR&gt;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;thisform.cRemoveAll()&lt;BR&gt;&amp;nbsp;thisform.AddObject(tcPanelName,tcPanelName)&lt;BR&gt;&amp;nbsp;lcObjectName = "thisform." + tcPanelName&lt;/P&gt;
&lt;P&gt;&amp;nbsp;this.cFrmPanel = tcPanelName&lt;BR&gt;&amp;nbsp;WITH &amp;amp;lcObjectName&lt;BR&gt;&amp;nbsp;&amp;nbsp;IF NOT .cNoResize &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.top = this.xpanel_guide1.Top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.left = this.xpanel_guide1.Left&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.width = this.xpanel_guide1.Width&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.height = this.xpanel_guide1.Height&lt;BR&gt;&amp;nbsp;&amp;nbsp;ELSE&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Top = .cMyTop&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Left = .cMyLeft&lt;BR&gt;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;.cActivate()&lt;BR&gt;&amp;nbsp;&amp;nbsp;.visible = .t.&lt;BR&gt;&amp;nbsp;&amp;nbsp;IF tnKeyValue &amp;lt; 0 THEN &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.cAddNew()&lt;BR&gt;&amp;nbsp;&amp;nbsp;ELSE&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.cPrimaryKeyValue = tnKeyValue&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.cRequery()&lt;BR&gt;&amp;nbsp;&amp;nbsp;ENDIF&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Refresh&lt;BR&gt;&amp;nbsp;ENDWITH&lt;BR&gt;ENDIF&lt;/P&gt;
&lt;P&gt;thisform.Refresh&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;As you can see the method accepts the name of the panel (container object) and then loads the container. In the form we have an xpanel_guide1 object (A simple shape obj Visible=.F.) that works as a proxy and the container takes its place. &lt;/P&gt;
&lt;P&gt;In addition the form has a property called cFrmPanel that keeps the name of the current container.&lt;/P&gt;
&lt;P&gt;After the new container's creation the cAddPanel function calls a couple of methods for new objects's setup.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/master01.jpg" width=600 border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Every container has a property called cNextPanel that holds the name of the next panel. This is easily configurable at design time while the form's Next button is clicked the cShowNext method is called.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Function cShowNext&lt;BR&gt;LOCAL lcObjectName, lbCheck, lcNextPanel&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;IF VARTYPE(thisform.cfrmpanel)="C" then&lt;BR&gt;&amp;nbsp;lcObjectName = "thisform." + thisform.cFrmPanel&lt;BR&gt;&amp;nbsp;EVALUATE(lcObjectName + ".OnBeforeNext()")&lt;BR&gt;&amp;nbsp;IF PEMSTATUS(thisform,thisform.cFrmPanel,5)&lt;BR&gt;&amp;nbsp;&amp;nbsp;WITH &amp;amp;lcObjectName&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF VARTYPE(.cNextPanel)="C" AND NOT EMPTY(.cNextPanel)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcNextPanel = .cNextPanel&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lbCheck = (Vartype(lcNextPanel)="C")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;BR&gt;&amp;nbsp;&amp;nbsp;ENDWITH&lt;BR&gt;&amp;nbsp;ENDIF&lt;BR&gt;ENDIF&lt;/P&gt;
&lt;P&gt;IF lbCheck&lt;BR&gt;&amp;nbsp;thisform.cAddPanel(lcNextPanel)&amp;nbsp;&lt;BR&gt;ENDIF&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Let's imagine that you have to code a 4 pages wizard form. All you have to do is to create a new form based on the xBaseform class and to fill 4 containers with the appropriate controls. In the first container you write in the cNextpanel property the name of the second panel, in the second the name of the third and so on...&lt;BR&gt;You run the form and your wizard is ready!&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Continuing to throw here listings with code I am sure that very soon you will leave this page with headache. Stand by one minute and let's see what are the benefits of this approach.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;1. It is really easy to have a consinstent User interface accross the whole application.&lt;BR&gt;&amp;nbsp;2. Having solved basic form functionality (resize code, close buttons, navigation controls etc...) your development time is reduced many times.&lt;BR&gt;&amp;nbsp;3. When you want to make an application wide change (form's layout, form's colors , theme support etc.) you have to change a single point!&lt;BR&gt;&amp;nbsp;4. From my metrics it is faster to load a container than to call a brand new form at runtime.&lt;BR&gt;&amp;nbsp;5. You can have more simplistic UI elements in different containers instead of a crowded form.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;In my own framework the form does not know anything about Business objects or data. I don't use form's DataEnvironment and the form's BindControls property is by default to .F.
&lt;P&gt;The containers have custom methods that handle the data.&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;This is a typical supplier's form at runtime:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/form02.jpg" width=600 border=0&gt;&lt;/P&gt;&lt;BR&gt;In the next post of the series we will examine the container objects.
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;See you!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3430" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>CodeFocus Magazine - Sedna Beyond VFP9</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2007/02/14/3281.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2007/02/14/3281.aspx</id><published>2007-02-14T10:21:00Z</published><updated>2007-02-14T10:21:00Z</updated><content type="html">&lt;P&gt;I just downloaded the special edition of CodeFocus magazine dedicated to VFP Sedna. The whole&amp;nbsp;magazine is really&amp;nbsp;SUPER with articles from Rick Schummer, Yair Alan Griver, Markus Egger, Rick Strahl, Craig Boyd, Bo Durban, Doug Hennig, Mike Yeager, Kevin Goff, John Miller and others, &amp;nbsp;it is full of many community tips and great articles about our next development tool VFP Sedna!&lt;/P&gt;
&lt;P&gt;Explore the next version of Visual Foxpro here: &lt;A href="http://www.code-magazine.com/focus/Index.aspx"&gt;http://www.code-magazine.com/focus/Index.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Don't miss that you can download the electronic version of the magazine in pdf format.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3281" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>The last of the tagged</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2007/01/18/3154.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2007/01/18/3154.aspx</id><published>2007-01-18T13:59:00Z</published><updated>2007-01-18T13:59:00Z</updated><content type="html">&lt;P&gt;Having spent most of my time with &lt;A HREF="/vassilisaggelakos/archive/2007/01/16/3142.aspx"&gt;MSDN support center&lt;/A&gt; and various "offline" works lately I missed the fun of the "Tag" game. I just read the &lt;A HREF="/cesarchalom/archive/2007/01/12/3115.aspx"&gt;Cesar's post &lt;/A&gt;and I saw that I am tagged too!!! Now I have to tell you 5 things you don't know about me:&lt;/P&gt;
&lt;P&gt;1. I downloaded my first bits from my brain to a &lt;A href="http://en.wikipedia.org/wiki/Amstrad_CPC_464"&gt;Schneider CPC 464 &lt;/A&gt;(Amstrad) at the age of twelve in the beginning of 1987. My first computer was a Christmas gift from my parents and of course my first programming language was BASIC.&lt;/P&gt;
&lt;P&gt;2. My college diploma says that I am a hardware specialist but I can't imagine myself doing something else than programming. Working since 1993 for Themelio Software (a company which develops software for window/door fabricators) I have written 4 times the same - vertical market - application with various tools (Visual Basic, Powerbuilder, Visual Foxpro). Of course my favorite programming tool is Visual Foxpro. Recently I had the idea to rewrite the GDI part of ProfilSmart utilizing the new GDI+ classes of SednaX project but thinking the total amount of work I left it very soon. Maybe my next try will be a 3D solution in another life.&lt;/P&gt;
&lt;P&gt;3. In my personal life I am not married, I don't smoke and I like listening Depeche Mode, The Cure, New Order, U2 and other 80's bands.&lt;/P&gt;
&lt;P&gt;4. I don't like cooking but ... only eating!!! &lt;BR&gt; &lt;BR&gt;5. I love MS Flight Simulator. Actually I live for the moment where I can fly my favourite Cessna in a 3D google earth style world with real road traffic!!!&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;After more than 30 minutes of blog surfing I found that the entire VFP blogoshere has been tagged!  but continuing this so "productive" (I spent more than 2 hours writting this post) game I am  tagging: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.hentzenwerke.com/"&gt;Whil Hentzen &lt;/A&gt;(Actually from Whil I would like to know a single thing: When he plans to release the entire MySQL book?)&lt;/P&gt;
&lt;P&gt;Malcolm Greene (He doesn't have a blog but I would like to join the blogosphere soon)&lt;/P&gt;
&lt;P&gt;&lt;A HREF="/andykramek/"&gt;Andy Kramek / Marcia Akins&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://leafe.com/"&gt;Ed Leafe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As for the rest of the VFP fellows please don't feel that you are not my friends but I saw in your blogs that you are already tagged!&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3154" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>MSDN Renewal? A wild story!</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2007/01/16/3142.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2007/01/16/3142.aspx</id><published>2007-01-16T16:28:00Z</published><updated>2007-01-16T16:28:00Z</updated><content type="html">&lt;P&gt;I really tried hard to avoid sending my first post of the year with complaints but I didn't win...&lt;BR&gt;All started on November 7 (please keep this date), my current MSDN Subscription was going to expire on November 30, having in mind that they need about 20 days to deliver I ordered to a local store a Visual Studio 2005 Team Edition with Premium MSDN subscription package. The price for the package was 2,556 Euros (about $3,200) . &lt;/P&gt;
&lt;P&gt;As Murphy could predict, my package came to me a couple of days after of my MSDN subscription's expiration. (If I remember well, it was December 4) I opened the package and tried to renew my MSDN subscription via Microsoft MSDN site. I got a message saying that they could not renew my subscription because there was no active subscription in my name at that time. I said ok - the same had happened the previous year also - so I sent an email to MSDN Support explaining the situation. Some minutes later I received an email saying "Thank you for contacting MSDN. I wish to inform that if you can fax in a copy of your PID  and proof of payment we can activate your subscription for you. "&lt;/P&gt;
&lt;P&gt;I filled the activation card, photocopied the invoice from the reseller and I sent them by fax. For the next few days there was no any response when I decided to send another email saying "please tell me do you need something else?" they replied that they need the same documents by email!&lt;BR&gt; To make a long story short, from that day I have been sending the same emails and faxes in order to renew my subscription and until today (16th of January) nothing has happened!&lt;BR&gt;Last friday I sent an email to MSDN Support saying "did you receive my last email? do you need something else?" There was no any response! Until now, Nobody from the MSDN "Support" center have thought that a customer who pays 2,556 euros deserves, at least, just an email!&lt;/P&gt;
&lt;P&gt;Just think of it for a while I have paid more than 3k dollars to the world's largest software company I am asking help for more than a month now and  there is no any result!!!&lt;/P&gt;
&lt;P&gt;If your M$DN Subscription is going to expire (and you think that it deserves to renew - I don't think so anymore) try to renew on time!&lt;/P&gt;
&lt;P&gt;Happy New Year !!!&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt; [Update: Finally my subscription activated on Jan 22.]&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3142" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>ProfilSmart 3.0 is finally here!</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/12/12/3016.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/12/12/3016.aspx</id><published>2006-12-12T15:58:00Z</published><updated>2006-12-12T15:58:00Z</updated><content type="html">&lt;P&gt;After months of work and a whole month behind the schedule, we finally shipped earlier today the third version of ProfilSmart. It is a true client/server application with a MySQL ( or MS Sql Server 2005) &amp;nbsp;as backend database. The whole app is written in VFP utilizing a 2 1/2 tier framework (more on this in a later post).&lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/smart2.jpg" width=600 border=0&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;This newest version has no differences in the UI or any more features than the previous one but I tried to rewrite thousands of queries against local dbf files, as SPT calls against a distant database server. That was a dramatic change in the existing application and as I didn't know anything about MySQL my first thoughts were to migrate my database only in the SQL Server. Visiting many clients at their site very soon I discovered that an unbelievable high percentage of their PCs do not meet the MS requirements for a SQL Server 2005 Express installation. (I saw many pcs running windows XP without SP2!) As I have written again in the past the majority of our customers do not know about service packs, windows update and etc... So it is really tough for us to convince them that they have to pay a technician for maintaining the pcs in a healthy state. The MySQL database was a good alternative choice for a backend as it can be installed very easily in older machines too. &lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/smart6.jpg" width=600 border=0&gt;&lt;/P&gt;
&lt;P&gt;Having by side the draft chapters of the&amp;nbsp;&lt;A href="http://www.hentzenwerke.com/catalog/mysqlvfp.htm"&gt;&amp;nbsp;MySQL Client-Server Applications with Visual FoxPro&lt;/A&gt;, the whole process was a great experience for me as I had to rewrite thousands lines of code, I had to modify many parts of the existing framework and of course I had to solve many new problems that they didn't exist before. My best moment was when I had to populate my listview-like controls with photograhs stored in the database. In the previous versions of ProfilSmart the photographs were pure files lying on the disk and in the dbf was stored only the paths. Because I didn't want to have all these photographs a so easy CopySource for everybody, I decided to put them in the database. In a typical installation there about 10,000 elements of alouminium with photographs. At first I created a blob field (medium BLOB in the MySQL) in the same table with other characteristics of these parts. Very soon I realised that transfering 10 - 20 records over the LAN was a considerable pain&amp;nbsp;( Seconds are Hours* ) for the user. So I broke the table and I saved the photos in a second table of the database but even then, the amount of data over the wire was huge. Finally I remembered Andy Kramek saying that you can combine a remote database with dbfs! So my app transfers only once all the photos from the database in local dbfs in BLOB fields for every terminal and now all the photographs appear instantly! - Great Tip!&lt;/P&gt;
&lt;P&gt;&lt;IMG height=450 src="http://www.themelio.gr/vassilis/smart1.jpg" width=600 border=0&gt;&lt;/P&gt;
&lt;P&gt;I plan to give you a long serie of posts with some technical details about the making of the ProfilSmart in the near future. I hope to be helpful for the community to know the Hows and Whys of the making of a real application. Please feel free to send me your thougths or comments about this, in order to help me prepare something more helpful.&lt;/P&gt;
&lt;P&gt;Stay tuned!&lt;/P&gt;* &lt;A href="http://www.amazon.com/User-Interface-Design-Programmers-Spolsky/dp/1893115941/sr=1-3/qid=1165939661/ref=sr_1_3/103-2670014-9211834?ie=UTF8&amp;amp;s=books"&gt;Joel's Spolsky book - User interface for programmers &lt;/A&gt;- Highly recommended! 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=3016" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>A VFP treasure at your next click</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/09/12/2454.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/09/12/2454.aspx</id><published>2006-09-12T13:24:00Z</published><updated>2006-09-12T13:24:00Z</updated><content type="html">&lt;P&gt;The majority of you maybe already knows about PortalFox. For those of you who don't, PortalFox Is a Free Portal for Spanish-speaking developers, located at &lt;A href="http://www.portalfox.com"&gt;http://www.portalfox.com&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I dare to write for PortalFox because I am really excited with the wealth and the tips that fellow developers can find there. I don't know too much about the guys (and gals) who run the site but there you can find the best articles from the whole VFP universe, in one place. It is a great resource for every VFP developer and you shouldn't miss it. &lt;/P&gt;
&lt;P&gt;Even if you don't know the spanish language you can find an english version of the site &lt;A href="http://babelfish.altavista.com/urltrurl?url=http%3A%2F%2Fwww.portalfox.com%2F&amp;amp;lp=es_en&amp;amp;tt=url"&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;This site alone could be a good reason to start learning Spanish -;)&lt;/P&gt;
&lt;P&gt;Well done guys - Keep Foxing!&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=2454" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Lazy programmer translates all his forms automatically</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/08/24/2311.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/08/24/2311.aspx</id><published>2006-08-24T11:54:00Z</published><updated>2006-08-24T11:54:00Z</updated><content type="html">&lt;P&gt;Recently I was trying to make &lt;A href="/vassilisaggelakos/archive/2006/05/18/1551.aspx"&gt;ProfilSmart&lt;/A&gt; translatable. In other words all program texts on forms, classes, messageboxes, reports etc. must be in the language that the user prefers. I have to admit that this is a very very boring procedure. If you ever have tried something like that you understand what I mean. Even I have downloaded &lt;A href="http://www.dfpug.de/konf/konf_1994/fwk/221_INTL.HTM"&gt;Steven's INTL Toolkit &lt;/A&gt;I preferred to do the job manually.&lt;BR&gt;At first, program forms have all the captions in greek. I was lucky enough to have used only sublclassed labels. So I created a Message_id property in my base label class. After that I created a table LangText (REC_ID Integer, GR_Text , EN_Text, FR_Text ...) in order to keep there every string of the program. My thought was to have a table with the messages and in each control a message_id number that corresponds to the appropriate record. The translation will take place "on the fly" in the SetCaption method after label's Init Event.&lt;/P&gt;
&lt;P&gt;Moving the label captions from controls into LangText table one by one very soon I realised that this procedure will take months! So I decided to spend a couple of hours to create this routine:&lt;/P&gt;&lt;FONT face=Arial color=#008000 size=2&gt;
&lt;P&gt;*======================================================================&lt;/P&gt;
&lt;P&gt;*| Purpose...... Sets the correct message_id to all Labels of the class/form&lt;/P&gt;
&lt;P&gt;*| Author....... Vaggelakos&lt;/P&gt;
&lt;P&gt;*| Created......&amp;nbsp;August 18, 2006&lt;/P&gt;
&lt;P&gt;*| About........&lt;/P&gt;
&lt;P&gt;*| Mod List.....&lt;/P&gt;
&lt;P&gt;*======================================================================&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;LOCAL &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lcClassName, lcProp, lnMsgLine, lnCaptionLine, lnCaptionStart, lnCountOfFiles, lnCounter&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;LOCAL ARRAY &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;laPropLines[1]&lt;/P&gt;
&lt;P&gt;lcClassName = "Form1.Scx"&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;STORE &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;0 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;TO &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnMsgLine, lnCaptionLine, lnCaptionStart, lnCountOfFiles&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;IF &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;NOT &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;USED&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;("LangText")&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;USE &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;langText &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;IN &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;0&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;ENDIF&lt;/P&gt;
&lt;P&gt;IF &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;NOT &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;USED&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;JUSTFNAME&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;USE &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName) &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;IN &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;0&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;ENDIF&lt;/P&gt;
&lt;P&gt;SELECT &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName)&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;GO top&lt;/P&gt;
&lt;P&gt;SCAN&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF ALLTRIM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;baseclass&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;)="label"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = Properties&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnCaptionStart = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;AT&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;("Caption",lcProp)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STORE &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;0 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;TO &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnMsgLine, lnCaptionLine&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCaptionStart &amp;gt; 0 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;THEN &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*We have a Caption&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnCountofLines = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;GetWordCount&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(Properties,&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(10))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DIMENSION &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;laPropLines[lnCountofLines]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;laPropLines[1] = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;GetwordNum&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(properties,1,&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(13))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[1],1,7) = "Caption"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnCaptionLine = 1&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FOR &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCounter = 2 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;TO &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCountofLines&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;laPropLines[lnCounter] = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(13) + &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;GetwordNum&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(properties,lnCounter,&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(13))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnCounter],1,7) = "Caption"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnCaptionLine = lnCounter&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnCounter],3,7) = "Caption"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnCaptionLine = lnCounter&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnCounter],3,10) = "message_id"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnMsgLine = lnCounter&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDFOR&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCaptionLine &amp;gt; 0 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;THEN &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcString = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnCaptionLine],&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;AT&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;("=",laPropLines[lnCaptionLine])+1)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcString2Find = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;GETWORDNUM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(&amp;amp;lcString,1,["])&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;LangText&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LOCATE FOR ALLTRIM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(Gr_Text) == &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;ALLTRIM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcString2Find)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF FOUND&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnMessage_id = Record_id&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELSE&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APPEND BLANK&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replace &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;Record_id &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;WITH RECNO&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;()&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replace &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;gr_Text &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;WITH &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lcString2Find&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lnMessage_id = Record_id&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnMsgLine &amp;gt; 0 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;THEN &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcString = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnMsgLine],&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;AT&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;("=",laPropLines[lnMsgLine])+1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;laPropLines[lnMsgLine] = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;SUBSTR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(laPropLines[lnMsgLine],1,&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;AT&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;("=",laPropLines[lnMsgLine]))+ " " + &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;ALLTRIM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;STR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lnMessage_id))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;***Update Properties Field &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = ""&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FOR &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCounter = 1 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;TO &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCountofLines&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = lcProp +laPropLines[lnCounter]&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDFOR&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replace &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;Properties &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;WITH &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lcProp&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELSE&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcNewLine = &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(13)+&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CHR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(10) + "message_id = "+ &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;ALLTRIM&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;STR&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lnMessage_id))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;***Update Properties Field &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = ""&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FOR &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCounter = 1 &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;TO &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lnCountofLines - 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = lcProp +laPropLines[lnCounter]&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDFOR&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = lcProp + lcNewLine&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#008000 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcProp = lcProp + laPropLines[lnCountofLines]&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replace &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;Properties &lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;WITH &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;lcProp&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#008000 size=2&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDIF&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;(lcClassName)&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;ENDSCAN&lt;/P&gt;
&lt;P&gt;Wait Window&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt; "Done!"&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;
&lt;P&gt;CLOSE DATABASES&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;BR&gt;That's It! what I wanted all the texts from every control are transferred into langtext table in seconds! Keep in mind that the routine checks if the text string is already in the table and updates the message_id property correctly.&lt;/P&gt;
&lt;P&gt;After that it was a matter of minutes to create a wrapper method that finds all the forms (and all the classes) of the project and calls this routine for every form or class. &lt;/P&gt;
&lt;P&gt;All of my visual controls are now translatable!&lt;BR&gt;Thanks to the nature of the Visual Foxpro source files this routine saved me months of work!&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Important: Since this procedure dives into your form/class file keep a BACKUP copy before you run it!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;VFP can do anything you can imagine!&lt;/P&gt;
&lt;P&gt;Ta Leme&amp;nbsp;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=2311" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Stiff asks, great programmers answer</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/08/01/2163.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/08/01/2163.aspx</id><published>2006-08-01T09:14:00Z</published><updated>2006-08-01T09:14:00Z</updated><content type="html">&lt;P&gt;Really interesting post. Worth reading... &lt;A href="http://sztywny.titaniumhosting.com/2006/07/23/stiff-asks-great-programmers-answers/"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(Via &lt;A href="http://www.codinghorror.com/blog/"&gt;Jeff Atwood&lt;/A&gt;)&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=2163" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Visual Foxpro Success Stories!</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/07/06/1961.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/07/06/1961.aspx</id><published>2006-07-06T07:54:00Z</published><updated>2006-07-06T07:54:00Z</updated><content type="html">&lt;P&gt;Much of our success as Fox programmers is celebrated in the back offices, out of the public eye. It is often difficult to cite the success to management and clients when the stories are virtually invisible to the outside world.&lt;/P&gt;
&lt;P&gt;Michael Hogan is preparing a &lt;A href="http://www.foxprosuccess.com"&gt;Visual Foxpro Success stories &lt;/A&gt;site these days. The &lt;A href="http://www.foxprosuccess.com"&gt;FoxProSuccess.com&lt;/A&gt; site is intended to be a resource for the community to let the world know what a productive community can do with a vital tool like Visual FoxPro. We hope to gather success stories from guest writers into this central repository.&lt;/P&gt;
&lt;P&gt;Success can be measured in many ways: On time and On Budget, Exceeding client expectations, sales and client retention, increases in productivity, saving a project that was DOA with other technologies, large multi-user support, integrating new or interesting technologies, etc.&lt;/P&gt;
&lt;P&gt;You can contact Michael at &lt;A href="mailto:mhogan@Ideatellc.com"&gt;mhogan at Ideatellc.com&lt;/A&gt; - please email him if you have a success story to tell, or can let us know about a peer with a success story of her own. If you need a ghost writer, Michael will write or edit the story for you, and he will edit all posts for grammar and brevity when necessary.&lt;/P&gt;
&lt;P&gt;In your stories, please include information that illustrates the particular success of the project - estimated number of users, estimated increase in productivity, time of developement - whatever supports your definition of success for that project.&lt;/P&gt;
&lt;P&gt;Our home page will be created within a couple of weeks, and more sections will be added to the site as time goes on. Expect refactoring of the site, and a more user-friendly submission process.&lt;/P&gt;
&lt;P&gt;Thank you in advance for your contributions to the community! &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1961" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>VFP does Mp3 too!</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/07/04/1947.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/07/04/1947.aspx</id><published>2006-07-03T22:58:00Z</published><updated>2006-07-03T22:58:00Z</updated><content type="html">&lt;P&gt;Last weekend my girlfriend wanted to set a new mp3 song as ringtone in her mobile phone. So She opened up her brand new Sony VAIO (chocked by preinstalled software) and tried to find the appropiate application for cropping an mp3. She didn't want to have a 4 min song as&amp;nbsp; ringtone, instead she wanted to create a new file with just a small portion (10-15sec) of the original song. At first she asked me "How can I do sth like this?" I replied "Just open Visual Foxpro and I will show you"&amp;nbsp; She said&amp;nbsp; "Aaahh you have overdone it with VFP! My super laptop is full of utilities, there must be something here for something so simple...". I said OK and I switched on the tv because Brasil's match have just begun. 90 minutes later I found her trying while several windows lying on the screen. She couldn't find something so when I said "OK open Visual Foxpro" she gave up. I launched Visual Foxpro and immediately the Command Window appeared. I typed 5 commands:&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;lcFile = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;FiletoStr&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;("C:\music\a.mp3")&lt;/P&gt;
&lt;P&gt;lnFileLen = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Len&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;(lcFile)&lt;/P&gt;
&lt;P&gt;lnSizePerSec = lnFileLen / 200 &lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;amp;&amp;amp; 3.20 Total song time in sec.&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;lcNewFile = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Substr&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;(lcFile, lnSizePerSec * 20, lnSizePerSec * 15)&lt;/P&gt;
&lt;P&gt;? &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;StrToFile&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;(lcNewFile, "c:\music\new.mp3")&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;and Voila! a new mp3 file was there as she wanted!&lt;/P&gt;
&lt;P&gt;VFP does &lt;FONT color=#ff0000&gt;ringtones&lt;/FONT&gt; too!&lt;/P&gt;
&lt;P&gt;Ofcourse this really simple case has nothing extraordinary from programmer's view. Everyone could create a similar "program" with its favourite programming tool BUT here there is a detail. I didn't create any program! All these commands were executed&amp;nbsp;&amp;nbsp;directly from VFP's magical command window!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;I have never seen a similar command window in any other language. If you know something that&amp;nbsp;I have&amp;nbsp;missed please let me know&lt;/P&gt;
&lt;P&gt;P.S Don't forget VFP can do anything you can imagine!&lt;/P&gt;
&lt;P&gt;.&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1947" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Where the tools have no name?</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/06/12/1792.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/06/12/1792.aspx</id><published>2006-06-12T11:42:00Z</published><updated>2006-06-12T11:42:00Z</updated><content type="html">&lt;P&gt;Microsoft did it again. MS is going to release .Net Framework 2.0 bundled with WinFX under the name .Net Framework 3.0! &lt;BR&gt;As Somasegar &lt;A href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;writes on his blog&lt;/A&gt;: "The .NET Framework 3.0 is still comprised of the existing .NET Framework 2.0 components, including ASP.NET, WinForms, ADO.NET, additional base class libraries and the CLR..."&lt;/P&gt;
&lt;P&gt;it is supposed that microsoft would disappear the DLL Hell with .Net framework but now it is clear that they are not in the right path. I can't imagine myself waiting 1 hour to uninstall .Net Framework 2.0 and then another hour just to install the same DLLs.!&lt;/P&gt;
&lt;P&gt;As you can see in the comments of the Somasegar's post .Net developers are not so happy with this decision.&lt;/P&gt;
&lt;P&gt;See also &lt;A href="http://bloggingabout.net/blogs/erwyn/archive/2006/06/12/12458.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;BTW, If you have not heard it already, you can vote for the new name of SednaX project &lt;A href="http://meltech.freepolls.com/cgi-bin/polls/027/poll_center.htm"&gt;here&lt;/A&gt;. (Isn't it more democratic?)&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1792" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>VFP can do anything you can imagine...</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/05/22/1565.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/05/22/1565.aspx</id><published>2006-05-22T16:54:00Z</published><updated>2006-05-22T16:54:00Z</updated><content type="html">&lt;P&gt;Last week I blogged about &lt;A href="/vassilisaggelakos/archive/2006/05/18/1551.aspx"&gt;ProfilSmart&lt;/A&gt;&amp;nbsp;but I couldn't expect so positive comments. I received many emails mainly from members of &lt;A href="http://www.leafe.com/"&gt;Profox &lt;/A&gt;emailing list and I promised to prepare a video in order to give you a better idea of the whole app.&lt;/P&gt;
&lt;P&gt;So here it is. You can download&amp;nbsp;a 2.5MB&amp;nbsp;WMV file from &lt;A href="http://www.themelio.gr/zip/prfvideo.wmv"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;If you any problem with the&amp;nbsp;WMV you can download&amp;nbsp;a packaged EXE file that contains the camtasia player winhin&amp;nbsp;from &lt;A href="http://www.themelio.gr/zip/prfvid2.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Watch the video and please let me know your comments.&lt;/P&gt;
&lt;P&gt;Visual Foxpro can do anything you can imagine!&lt;/P&gt;
&lt;P&gt;P.S: In my last post I forgot to mention that I found invaluable help in the API reference site of &lt;A href="http://www.news2news.com/vfp/index.php"&gt;Anatoliy Mogylevets&lt;/A&gt;. The subscription is worth many times more than Anatoliy is charging.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1565" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>What I have done with VFP, GDI+, and a ton of help from VFP Community (OR why VFP is COOL)</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2006/05/18/1551.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="698153" href="http://weblogs.foxite.com/vassilisaggelakos/attachment/1551.ashx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2006/05/18/1551.aspx</id><published>2006-05-18T11:44:00Z</published><updated>2006-05-18T11:44:00Z</updated><content type="html">&lt;P&gt;My company develops software for a very special market. We write code for window fabricators (They who build real windows and doors, not operating systems :-) )&lt;BR&gt;I say that we have to deal with a very special customer group because (at least in my country) the users of our applications very often don't have any previous computer experience at all. So our application must have a very clear intuitive interface and on the other hand, must cover very complex needs. &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Some features of the appliaction are: Cost calculations, Quotation printouts, Cutting length calculations, Automatically created Price lists, Bar optimization, and many more...  All these features require powerful data handling mechanisms and VFP gives them to us very generously. (We have tried the same project in the past with Visual Basic, PowerBuilder and C++  but sooner or later all these tries failed because we couldn't succeed an acceptable balance between Budget - Time and Features ). &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;VFP is our Weapon. Our application utilizes a hand made framework inspired basically by the book &lt;A href="http://www.hentzenwerke.com/catalog/buildfox.htm"&gt;Build Your Own Framework with Visual FoxPro&lt;/A&gt; by Kenneth Chazotte.In addition, I have stolen the code (and ideas) from many base classes from the book &lt;A href="http://www.hentzenwerke.com/catalog/megafox.htm"&gt;MegaFox: 1002 Things You Wanted to Know About Extending VFP&lt;/A&gt; by Marcia Akins, Andy Kramek and Rick Schummer. All these under the guidelines of the &lt;A href="http://www.hentzenwerke.com/catalog/aoopvfp.htm"&gt;Advanced Object Oriented Programming with Visual FoxPro 6.0&lt;/A&gt; by Markus Egger. Of course I can't list here all the books that I have read in order to write this applcation but please forgive me and let me mention two more books that gave me a tremendous help. First the book &lt;A href="http://www.hentzenwerke.com/catalog/hackfox7.htm"&gt;Hacker's Guide to Visual FoxPro 7.0&lt;/A&gt; by Tamar E. Granor, Ted Roche, Doug Hennig, Della Martin and the book &lt;A href="http://www.hentzenwerke.com/catalog/deployfox.htm"&gt;Deploying Visual FoxPro Solutions&lt;/A&gt; by Rick Schummer, Rick Borup and Jacci Adams. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;In November 2004 we shipped the first version of ProfilSmart that introduced a modern interface inspired heavily by Windows XP. All the controls of the application are written in pure VFP code.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=266 src="http://www.themelio.gr/zip/screen1.jpg" width=400 border=0&gt;&lt;/P&gt;
&lt;P&gt; The feedback from our customer base was so encouraging that In April 2006 we shipped the second version of our application that gives the ability to the user to draw its own models very easily. Utilizing  thousands lines of GDI+ code VFP with the FFC classes (unfortunately we don't have explored the GDI+ classes from SednaX yet) gave us the ability to focus our attention (and code) into a higher level of the system coding. So I have made a full CAD like package with nothing more but VFP and GDI+ DLLs. Favor to &lt;A href="http://www.sweetpotatosoftware.com/SPSBlog/default.aspx"&gt;Craig Boyd&lt;/A&gt;, &lt;A HREF="/cesarchalom/default.aspx"&gt;Cesar Chalom&lt;/A&gt; , &lt;A href="http://www.pinpub.com/ME2/Audiences/Default.asp"&gt;FoxTalk magazine &lt;/A&gt;, Walter Nicholls and many other members of the VFP community, Our customers are more than satisfied. &lt;/P&gt;
&lt;P&gt;&lt;IMG height=266 src="http://www.themelio.gr/zip/screen4b.jpg" width=400 border=0&gt;&lt;/P&gt;
&lt;P&gt;Unfortunately the most recent parts of  the application are available only in greek language at the moment.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=266 src="http://www.themelio.gr/zip/screen7b.jpg" width=400 border=0&gt;&lt;A href="http://screen4b.jpg/"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG height=266 src="http://www.themelio.gr/zip/screen6b.jpg" width=400 border=0&gt;&lt;/P&gt;
&lt;P&gt;In the near future we prepare a LAN version with SQL Server 2005 as a backend database and a PDA version with C# code. All these in an harmonic cooperation that brings technology into every manufacturing company (even here in Greece).&lt;/P&gt;
&lt;P&gt;I am writing all these because first of all I would like to express my deepest thanks to all these people that helped me implement a huge system (coding more than 160 KLOC for a single developer is not a funny occupation)  and then because I believe that my case reveals a real example of a modern application in response to all those people that say  VFP is a dead language or it is an old fashioned database or or etc... I don't want to feed all the battles about VFP here, but  I strongly recommend to other people of the VFP community to show real examples of their applications in order to understand the non VFP people the power of Visual FoxPro. &lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1551" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry><entry><title>Hierarchical Drop Down Combo without Activex</title><link rel="alternate" type="text/html" href="http://weblogs.foxite.com/vassilisaggelakos/archive/2005/09/15/914.aspx" /><id>http://weblogs.foxite.com/vassilisaggelakos/archive/2005/09/15/914.aspx</id><published>2005-09-15T11:14:00Z</published><updated>2005-09-15T11:14:00Z</updated><content type="html">&lt;P&gt;Recently&amp;nbsp;while&amp;nbsp;I&amp;nbsp;was working&amp;nbsp;on a new application and trying to find an efficient way for selecting an option from a ComboBox I remembered the article of Predrag Bosnic in the &lt;A href="http://www.foxtalknewsletter.com"&gt;FoxTalk magazine &lt;/A&gt;(December 2002 - you are a subscriber,&amp;nbsp;Isn't it?) that explains the making of a combined ComboBox control with a Treeview ActiveX. For some (mysterious) reasons, I dislike activeX controls. Instead of them, I prefer to build or use only pure VFP controls. So I decided to make one on my own.&lt;/P&gt;
&lt;P&gt;Definitely, my control has serious limitations over Predrag's ComboTree view control (images, deep nesting level,drag n drop, etc...) but for now I can live with it.&lt;/P&gt;
&lt;P&gt;My scope is to make it public in order to improve it. The control has code / ideas from &lt;A href="http://www.hentzenwerke.com/catalog/megafox.htm"&gt;Megafox &lt;/A&gt;book (&lt;A href="/andykramek/"&gt;Andy Kramek&lt;/A&gt;, &lt;A href="http://www.hentzenwerke.com/catalog/akins_marcia.htm"&gt;Marcia Akins&lt;/A&gt;, &lt;A href="http://rickschummer.com/blog/"&gt;Rick Schummer&lt;/A&gt;),&amp;nbsp; &lt;A href="http://www.sweetpotatosoftware.com/SPSBlog"&gt;Craig Boyd&lt;/A&gt;,&amp;nbsp; Predrag Bosnic, Art Bergquist&amp;nbsp; and I would like to say a big THANK you to all of them. Also, I would like to thank &lt;A href="http://www.btfworks.gr"&gt;Tasos Bazotis &lt;/A&gt;and &lt;A href="http://www.btfworks.gr"&gt;Fay Bazoti &lt;/A&gt;for their contribution.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.themelio.gr/zip/screenshot1.jpeg" border=0&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Download the following zip file try it and please don't hesitate to send me your comments. Any feedback would be greatly appreciated.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.themelio.gr/zip/mycombo.zip"&gt;Download zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;P.S : Please show mercy, as it is my first try to make public some code bits.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=914" width="1" height="1"&gt;</content><author><name>vassilag</name><uri>http://weblogs.foxite.com/members/vassilag.aspx</uri></author></entry></feed>