tag:blogger.com,1999:blog-51907621955544702182024-03-18T20:43:02.935-07:00GuineuGuineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.comBlogger65125tag:blogger.com,1999:blog-5190762195554470218.post-29436950016731391662013-12-19T22:39:00.002-08:002013-12-19T22:39:38.472-08:00New branch "develop"I've added a <a href="https://bitbucket.org/cwollenhaupt/guineu/branch/develop" target="_blank">new branch</a> to the repository that has the name "develop". This branch is the current development version which usually is ahead of the release version in the master branch. Right now the development branch contains two additional commands:<br />
<br />
<ul>
<li>SUM</li>
<li>COUNT</li>
</ul>
<div>
and a number of bug fixes. If you want to join me in developing Guineu then the develop branch would be the one you want.</div>
<div>
<br /></div>
<div>
If you have never used git or branching I recommend you read a great <a href="http://nvie.com/posts/a-successful-git-branching-model/" target="_blank">blog post</a> by Python developer Vincent Driessen about a branching model that we have mostly adopted.</div>
Christof Wollenhaupthttp://www.blogger.com/profile/05638127628779138129noreply@blogger.com8tag:blogger.com,1999:blog-5190762195554470218.post-31940993713282655072013-12-19T05:10:00.002-08:002013-12-19T05:10:33.465-08:00Guineu is open source<br />
<div>
I've made Guineu open source and published the code and the binaries on Bitbucket. You can download the latest release from:</div>
<div>
<br /></div>
<div>
<a href="https://bitbucket.org/cwollenhaupt/guineu/downloads/Guineu.zip">https://bitbucket.org/cwollenhaupt/guineu/downloads/Guineu.zip</a></div>
<div>
<br /></div>
<div>
BitBucket is a git hosting service. If you have git, you can clone the repository from </div>
<div>
<br /></div>
<div>
<a href="https://bitbucket.org/cwollenhaupt/guineu/overview">https://bitbucket.org/cwollenhaupt/guineu/overview</a></div>
<div>
<br /></div>
<div>
As a Bitbucket user you can also fork the whole project to create your own version. I appreciate anyone who wants to contribute a new feature or a fix. Please submit changes as either a pull request or as a Git patch serial. If you do not have git but are nonetheless interested in the sources, you can download them from:</div>
<div>
<br /></div>
<div>
<a href="https://bitbucket.org/cwollenhaupt/guineu/get/master.zip">https://bitbucket.org/cwollenhaupt/guineu/get/master.zip</a></div>
<div>
<br /></div>
<div>
which is a ZIP file containing the current version of the release branch.</div>
Christof Wollenhaupthttp://www.blogger.com/profile/05638127628779138129noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-84212103725490480082011-12-23T03:39:00.000-08:002011-12-26T01:29:06.093-08:00parameter handling and better code generation (Build 432)GuineuIDE now correctly converts some of the built-in properties. Visual FoxPro uses lower case properties for all user-defined properties (ignoring _MemberData for the moment). Sometimes, however, those properties are stored in all upper-case. Guineu correctly identifies those as user-defined properties now.<br />
<br />
Constants defined in the VCX or SCX include file are evaluated at compile time now. When you rebuild an existing project make sure to select Guineu > Clean up <i>project name</i> from the menu to force Guineu to rebuild all project files.<br />
<br />
PRIVATE variables can be defined and are created in a truly private fashion. Undeclared variables are now PRIVATE, just like in Visual FoxPro. Missing variables raise an error message except when being assigned to. PARAMETERS creates private variables whereas LPARAMETERS is responsible for creating local variables.<br />
<br />
Parameters can now be passed by value or by reference. Call the PARAMETERS() function to determine the number of parameters.<br />
<br />
Some commands in Visual FoxPro are not relevant during program execution. EXTERNAL is a good example and is now supported by Guineu. Just like in the Visual FoxPro runtime this command does absolutely nothing. Previously, though, having the command in the code would raise a compiler error in Guineu due to an unknown token.<br />
<br />
Code lines containing macro substitutions (& command) do not cause an error anymore. Currently, they are skipped at runtime since there's no tokenizer being part of Guineu.<br />
<br />Christof Wollenhaupthttp://www.blogger.com/profile/05638127628779138129noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-64050124069407883942011-12-15T13:32:00.000-08:002011-12-15T14:49:36.766-08:00Changing the color of grid headers (Build 428)Guineu Mobile implements BackColor and ForeColor for Header objects. Due to the (severe) limitations of the DataGrid control in the Compact Framework all headers must have the same settings for these properties. Guineu uses the setting in the last column to define the appearance of all headers.<br />
<br />
There are also minor bugfixes in the STREXTRACT() function and the Listbox control.Christof Wollenhaupthttp://www.blogger.com/profile/05638127628779138129noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-48420249094021224482011-12-12T11:45:00.000-08:002011-12-14T03:46:22.424-08:00.NET objects now First-class citizens in Guineu (build 426)The most wanted features in Guineu were frequently ones that don't even exist in Visual FoxPro, such as making HTTP request, transferring files via FTP, placing phone calls, having a signature control, and so forth. Many of these made it into Guineu in form of a SYS(8xxx) function or a new base class that can be enabled.<br />
<br />
Some of these features are still lacking such as accessing a bluetooth or serial printer, retrieving GPS information, obtaining phone book entries and text messages, and much more. Quite often there's sample code for C# or VB.NET for the Microsoft Compact Framework. Yet, often it's only few who request a particular feature. That makes it particular difficult to implement a solution that covers not only those developers particular needs, but also the needs of others in future scenarios.<br />
<br />
This release is a major step forward!<br />
<br />
We now support .NET objects in the same manner as native objects. The philosophy behind Guineu has always been to keep the look and feel of Visual FoxPro. Therefore you use .NET objects exactly like you would use native objects in Guineu or ActiveX controls in Visual FoxPro. There are no new commands or functions as the next sample demonstrates:<br />
<br />
<div class="p1">
</div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="s1">Local </span>loForm, loButton</span></div>
<div class="p2">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="s1">If Os</span><span class="s2">(6) == "3" <span class="Apple-style-span" style="color: #38761d;"> </span></span><span class="Apple-style-span" style="color: #38761d;">&& Windows CE</span></span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="s3"><span class="Apple-tab-span"> </span></span><span class="s1">Set Classlib To </span>\<span class="s1">Windows</span>\GAC_System.<span class="s1">Windows</span>.Forms_v2_0_0_0_cneutral_1.<span class="s1">dll</span></span></div>
<div class="p2">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="s1">Else </span><span class="Apple-style-span" style="color: #38761d;">&& Windows 9x, Windows NT</span></span></div>
<div class="p3">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="s3"><span class="Apple-tab-span"> </span></span>Set Classlib To <span class="s2">C:\</span>WINDOWS<span class="s2">\Microsoft.NET\Framework\v2.0.50727\</span>System<span class="s2">.</span>Windows<span class="s2">.</span>Forms<span class="s2">.</span>dll</span></div>
<div class="p3">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">EndIf</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loForm = <span class="s1">CreateObject</span>("System.Windows.Forms.Form")</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loForm.<span class="s1">Text </span>= "Hello"</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loButton = <span class="s1">CreateObject</span>("System.Windows.Forms.Button")</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loButton.<span class="s1">Text </span>= "World"</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loForm.<span class="s1">Controls</span>.<span class="s1">Add </span>(m.loButton)</span></div>
<div class="p1">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loForm.ShowDialog()</span></div>
<div class="p1">
<br /></div>
<div class="p1">
The SET CLASSLIB command now works for VCX, PRG and DLL files. CREATEOBJECT() searches .NET classes at the same time as searching for Guineu classes. You can access properties and call methods on .NET objects as you can do in Guineu objects. </div>
<div class="p1">
<br /></div>
<div class="p1">
To load a DLL you need to pass the path to the DLL unless it is in the Windows search path. Please note that SET PATH TO is ignored, because Windows is in charge of loading the DLL. As with FLL libraries in Visual FoxPro you cannot embed these DLLs into the application.</div>
<div class="p1">
<br /></div>
<div class="p1">
On Windows Mobile it's a bit difficult to determine the actual location of the DLL file. By default, File Explorer hides any DLL and loading the Windows directory on a device can take some time. To find the file you can use the ADIR() function using a little Guineu program to list all installed GAC*.DLL files.</div>
<div class="p1">
<br /></div>
<div class="p1">
<b>Limitations</b></div>
<div class="p1">
<br /></div>
<div class="p1">
This is version one. There are naturally a number of things that don't yet work, some easy to fix, some more difficult.</div>
<div class="p1">
<br /></div>
<div class="p1">
NEWOBJECT() cannot load .NET objects yet. Adding a .NET control to an existing control also doesn't work. Guineu will always use the parameterless default constructor. Binding to events is not yet possible.</div>
<div class="p1">
<br /></div>
<div class="p1">
Guineu performs an automatic type cast based on the values you pass in. If there are multiple competing overloads of a method, you might not get the correct one. Similar, return values might be casted to objects when you expect them to be simple data types. This is especially an issue with Enumerations. CAST() does not support any of the native types. In fact, CAST() isn't even in the product yet.</div>
<div class="p1">
<br /></div>
<div class="p1">
Only public instance members are available. Static methods and private properties are not accessible. GETINTERFACE() doesn't work yet, nor does FOR EACH pick up the IEnumerable interface.</div>
<br />
<b>New features</b><br />
<b><br /></b><br />
The <a href="http://guineu.net/help/index.html?os.htm" target="_blank">OS()</a> function implements values 1-6 now. OS(6) returns the platform. This is 1 for Windows 9x, 2 for any Windows NT based system (NT, 2000, XP and later), and 3 for Windows mobile.<br />
<b><br /></b><br />
<b>Bugfixes</b><br />
<b><br /></b><br />
Repeatedly executing CREATE CURSOR would open a further cursor with the same alias.<br />
<br />
ADIR() returned the wrong number of entries and wouldn't indicate directories.<br />
<br />
SYS(2015) would not return a new value every call.<br />
<br />Christof Wollenhaupthttp://www.blogger.com/profile/05638127628779138129noreply@blogger.com2tag:blogger.com,1999:blog-5190762195554470218.post-49183403668482147972011-12-12T07:33:00.000-08:002011-12-12T10:53:55.890-08:00Builds 415-425Since build 414 we made a number of changes, but I haven't been able to keep updating the blog. In this post I'll collect all those changes we made since January last year. Check back regularly, as I'll keep updating this post.<div><br /></div><div><b>New features</b></div><div><b><br /></b></div><div><a href="http://guineu.foxpert.com/help/index.html?strconv.htm">STRCONV()</a> is implemented with two new encodings. Values 17 and 18 provide a conversion between regular strings and URL encoded values ("A B" becomes "A%20B"). You need this with SYS(8009) to post back HTML forms to a web server.</div><div><br /></div><div><a href="http://guineu.foxpert.com/help/index.html?sys8004___switch_spt_engine.htm">SYS(8004) </a>supports the "mssql" engine. Activating this engine switches to the regular SQL server client on mobile devices for SQLSTRINGCONNECT(). With this engine you can connect to a regular SQL server from any mobile devices. For data intensive processes this is a better solution than accessing DBF files across a WiFi.</div><div><br /></div><div>GuineuIDE detects parameters to the Init event of an SCX form and produces the code to receive those in the generated PRG file and pass them on. This feature is a little fragile right now and only works for simply LPARAMETERS statements. Please report any code that doesn't pick up the parameter line. You might have to manually delete the *.scx.prg/fxp files to force GuineuIDE to regenerate the file.</div><div><br /></div><div>APPEND supports the IN and BLANK clauses now.</div><div><br /></div><div>MKDIR is now supported on the desktop and on the mobile platform.</div><div><br /></div><div>Added support for Date, DateTime and Boolean fields to CREATE CURSOR.</div><div><br /></div><div><b>Changes</b></div><div><br /></div><div>We changed a number of file names to cope with a number of new supported platforms. Guineu.exe is now Guineu.Desktop.EXE, Guineu.runtime.dll has become Guineu.Runtime.Desktop.dll. Guineu.compact.runtime.dll is Guineu.Runtime.Mobile.dll. We dropped guineu.compact.exe completely, since it caused confusion about the proper way of creating a mobile application.</div><div><br /></div><div>To use the new runtime version you have to rebuild your EXE using GuineuIDE. </div><div><br /></div><div>Guineu detects when it's running in an emulator. When features aren't supported in the emulator, Guineu does not attempt to call them. This applies mainly to non-standard hardware.</div><div><br /></div><div><b>Bug fixes</b></div><div><br /></div><div>Sometimes Guineu would raise an error message referring to the record source being NULL.</div><div><br /></div><div>Index files were kept open even when the table was closed. This made it impossible to delete the CDX file unless the application was closed.</div><div><br /></div><div>Fixed crash when a class in a separate VCX or a procedure file was instantiated.</div><div><br /></div><div>When a function or method returned a NULL string Guineu would sometimes crash when the result would be used in conjunction with the = or == operator.</div><div><br /></div><div>Umlauts in procedure names no longer cause a crash.</div><div><br /></div><div>Downloading binary files with SYS(8009) caused data corruption, mainly with DBF and CDX files. This has been corrected.</div><div><br /></div><div>Added support for NULL values in cursors other than character fields.</div><div><br /></div><div>COPY FILE handles subdirectories correctly now.</div><div><br /></div><div><b>Known issues</b></div><div><b><br /></b></div><div><b><span class="Apple-style-span" style="font-weight: normal; "><div>Should you encounter an error message when launching the EXE on the device, please create a text file in the same directory as your application with the addition ".config". If your application is "myapp.exe", the file needs to be "myapp.exe.config". Put the following code into the config file:<pre><?xml version="1.0"?><br /><configuration><br /><runtime><br /><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><br /><dependentAssembly><br /><assemblyIdentity name="OpenNETCF" publicKeyToken="E60DBEA84BB431B7" culture="neutral"/><br /><bindingRedirect oldVersion="0.0.0.0-2.3.0.39" newVersion="2.3.0.39"/><br /></dependentAssembly><br /></assemblyBinding><br /></runtime><br /></configuration><br /></pre></div><div><br /></div><div>This was necessary due to an updated DLL. We are working on this issue. In future builds you do not have to create this config file.</div><div><br /></div></span></b></div>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-81390315005356458432010-01-26T15:58:00.001-08:002010-01-26T15:58:47.072-08:00Build 414<span xmlns=''><p>I just noticed that the past releases contained an older version of GuineuIDE.EXE without the fixes for the DO FORM problem some of you encountered. The new build contains the correct version. To benefit from the fixed generated code, you either have to modify the form (just changing the time stamp is sufficient) or delete the *.SCX.PRG files. Otherwise GuineuIDE won't regenerate the files.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-67380504450986992422009-11-30T14:39:00.001-08:002009-12-06T12:55:07.043-08:00Builds 390 - 412<span xmlns=""><p>I'll update this blog entry to collect all changes that have been implemented within the past few months. The past month's activity on the release blog doesn't do justice to the development of Guineu. There have been a number of changes.<br /></p><p>Build <strong>412</strong> introduces the SelStart and SelLength properties for the Editbox control.<br /></p><p>Build <strong>405</strong> adds the SET PROCEDURE TO and SET CLASSLIB TO command. This makes it easier to create more complex applications. Additionally, GuineuIDE handles controls correctly that are stored in a class library. With this release you might have to delete the generated .SCX.PRG files in order to regenerate those using the latest version of GuineuIDE. Starting with build 405 you can create your own VCX class libraries and use those classes on different forms.<br /></p><p>Build <strong>403</strong> includes the Timer control. Available properties are Enabled and Interval. Timers raise the Init and Timer events.<br /></p><p>SYS(8015) is new in build <strong>402</strong>. This function adds SMTP capabilities to Guineu. To send an e-mail from the device you can use the following one liner:<br /></p><p><span style=";font-family:Courier New;font-size:10pt;" ><span style="font-size:100%;">Sys(8015, ;<br /> "from@server.com", ;<br /> "to@server.com", ;<br /> "smtp.server.com","username","password", ;<br /> "Subject", ;"Body" ;<br /></span><span style="font-size:100%;">)</span><br /></span></p><p>You need internet connectivity on the device in order to send mails. Sending mails can be an alternative to printing a receipt.<br /></p><p>Devices behave differently when you press the Enter key while the focus is on a button. Some devices trigger the Click event, some don't. Build <strong>400</strong> adds SYS(8014) to control this behavior. To explicitly call the Click event when Enter is pressed, use the following option:<br /></p><p><span style=";font-family:Courier New;font-size:100%;" >SYS(8014,"ButtonClickOnEnter",1)<br /></span></p><p>You revert to the device's default behavior by using this line:<br /></p><p><span style=";font-family:Courier New;font-size:100%;" >SYS(8014,"ButtonClickOnEnter",0)<br /></span></p><p>Build <strong>395</strong> adds the LOOP command. It works on all three supported loop types: FOR, DO WHILE and SCAN. SCATTER and GATHER have been extended in the same build. In addition to the NAME clause, they now support the MEMVAR and MEMO keywords.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-73862701751686382342009-07-25T03:09:00.001-07:002009-07-25T03:09:30.779-07:00Build 389<span xmlns=''><p><img alt='' src='http://www.foxpert.com/images/072509_1009_Build3891.png' align='left'/><span style='color:black; font-family:Verdana'><br /> </span></p><p>SYS(8012) for controlling the Software-based Input Panel has been in the product for the past few weeks, but not been documented at all. The latest build mainly brings the documentation on par with the product, at least as far as the SIP is concerned. You find a detailed description of SYS(8012) on <a href='http://guineu.net/help/index.html?sys8012___software_based_input_panel.htm'>http://guineu.net/help/index.html?sys8012___software_based_input_panel.htm</a>.<br /></p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-65703556138922040852009-07-24T02:02:00.001-07:002009-07-24T02:07:10.272-07:00Build 388<span xmlns=""><p>Finally, FTP transfer is available for the mobile engine, as well. SYS(8010) allows you to send or receive files from any mobile device with internet connectivity with a single line of code using the FTP protocol:<br /></p><p><span style="font-family:Courier New;">MessageBox( Sys(8010, ;<br /></span><span style="font-family:Courier New;">"put", ;<br /></span><span style="font-family:Courier New;">"ftp.server.com/test.txt", ;<br /></span><span style="font-family:Courier New;">"username", ;<br /></span><span style="font-family:Courier New;">"password", ;<br /></span><span style="font-family:Courier New;">"hello world" ;<br /></span><span style="font-family:Courier New;">))<br /></span><span style="font-family:Courier New;">MessageBox(Sys(8010, ;<br /></span><span style="font-family:Courier New;">"get", ;<br /></span><span style="font-family:Courier New;">"ftp.server.com/test.txt", ;<br /></span><span style="font-family:Courier New;">"username", ;<br /></span><span style="font-family:Courier New;">"password" ;<br /></span><span style="font-family:Courier New;">))<br /></span></p><p>Please note that you need a real internet connection for SYS(8010). The shared internet connection provided by ActiveSync/WMDC while the device is in the cradle (or connected with the PC) does not work reliable for FTP connections.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-73250960787559284202009-07-18T08:39:00.001-07:002009-07-18T08:39:33.312-07:00Build 387<span xmlns=''><p>The desktop version got left behind a bit. Several features like RowSource haven't made it to the desktop engine when I introduced them to the mobile engine. These issues have now been corrected. The past seven builds were mostly lots of smaller bug fixes .</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-76514336156006282182009-07-10T16:03:00.001-07:002009-07-10T16:03:55.810-07:00Build 380<span xmlns=''><p>A number of bugs have been fixed in the last builds. When Guineu causes an exception (aka crashes) it writes an exception.txt file with additional information where the crash happened. Now you also have the calling hierarchy of your programs so you can see which line of code caused the problem.<br /></p><p>Newly implemented are SET DECIMALS. The ? and ?? commands do not yet completely respect the SET DECIMALS setting, though. SYS(1079), an undocumented function in VFP, is also implemented. SYS(1079) causes a crash for diagnostic purposes, if you want to see what the dialog looks like.<br /></p><p>SYS(8013) is the counter part of DATETIME(). You can call it to change the local system time provided you have the permissions to change the time. On Windows Mobile changing the time does not require special privileges as it does on desktop systems. ADIR() now provides the date and time of the last file modification as well as file attribute information. The time respects the current daylight saving settings and like Microsoft Visual FoxPro and Explorer. ADIR() and SYS(8013) can be combined to implement a simple time synchronization between the mobile device and the server.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-73384598651079144272009-06-28T13:50:00.001-07:002009-06-28T13:50:39.301-07:00Build 369<span xmlns=''><p>ADEL() is now available, as well.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-76050751850750714552009-06-28T10:40:00.001-07:002009-06-28T10:40:12.061-07:00Build 368<span xmlns=''><p>RowSource and RowSourceType are now available for comboboxes and listboxes on mobile devices. Right now the only supported value for RowSourceType is 1 = Values.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-29915329398873932702009-06-23T00:14:00.001-07:002009-06-23T00:15:08.794-07:00Build 365<span xmlns=''><p>While there have been only few posts here on the release blog, I've been constantly posting new versions of Guineu over the past few months. I've made many, many bug fixes in this time, but haven't added a lot of new features. Constantly reading blog posts that merely state "There's a new bug fix" doesn't seem very appealing to me, so I rather not posted those.<br /></p><p>There've been a few new features in the meantime. DELETE FILE and SAVE TO are now working. SYS(8010) allows FTP transfer albeit for now only in the desktop version. SYS(8011) is a debugging function that produces extensive log information. <br /></p><p>SYS(8012) is a brand new function that gives you access to the Software Input Panel (SIP) on mobile devices. That's the writing area you use with the stylus when there's no keyboard attached to the device. I'll update the documentation soon.<br /></p><p>Tomorrow morning I'll be presenting in Prague at the conference. Topic of the session is Mobile development with VFP and Guineu.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-57985184774906579642009-03-03T08:51:00.000-08:002009-03-03T08:54:45.541-08:00Updated documentationI've updated the setup instruction and first steps section on mobile development in the Guineu documentation. Following these steps should now enable you to set up Guineu, the device emulator and create your first form. If you had difficulties to get Guineu running with the previous documentation, please give the new documentation a try.Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-69884984385891361972009-03-02T13:26:00.000-08:002009-03-02T13:28:03.952-08:00Build 341In a number of cases there was an exception when simply opening a table when certain field types were present. The new build fixes this issue.Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-24410925466677274182009-02-19T13:49:00.001-08:002009-02-19T13:52:15.270-08:00Build 340<span xmlns=""><p>GuineuIDE has been enhanced a bit. When you have multiple Project Manager windows open at the same time it can be difficult to figure out which project is currently controlled through the Guineu menu. This has become easier since the project name is now displayed in the menu.<br /></p><p><img alt="" src="http://www.foxpert.com/images/021909_2149_Build3401.png" /><br /></p><p>A new option to clean up the project directory has been added. Choosing this option removes all temporary files that GuineuIDE creates in order to build the EXE. Aside from the C# files these are mainly the *.SCX.PRG and *.VCX.PRG file that contain converted versions of the visual files. Use this option after you installed a new build of Guineu or when Guineu isn't picking up any of the changes you make to a visual file.<br /></p><p>When your project file contains an icon, this icon is now added to the EXE. Finding your application in File Explorer on the mobile device should now be significantly easier.<br /></p><p>Mostly you'll be building the same project type repeatedly during development. After you picked on of the build targets in the Guineu Build menu, this target is added as a shortcut directly to the Guineu menu as the very first item. Repeated builds should be easier this way.<br /></p><p>A few bug fixes deal with the conversion of properties. Some color properties where not detected correctly. Also, there was one more issue with long properties that contain double quotes, specifically the _MemberData property. Those are fixed now.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-33052371853131555022009-02-01T14:34:00.001-08:002009-02-01T14:36:23.035-08:00Build 336<span xmlns=''><p><img alt='' src='http://www.foxpert.com/images/020109_2234_Build3361.png' align='left'/>Forms can now be scrollable. This should make it easier for you to create forms that require a lot of input. To enable scroll bars for a form merely set the <a href='http://guineu.foxpert.com/help/scrollbars_property.htm'>ScrollBars</a> property to 3.<br /></p><p>Guineu differs in a few details from Microsoft Visual FoxPro. Unlike in VFP the property is read-/writable at runtime. So you can turn on and off scrollbars as needed. However, you can only turn on horizontal and vertical scrollbars together. The scrollbars only appear when there's something to scroll to, though. Similar to VFP the rightmost and bottommost controls define the extension of the scrollable area.<br /></p><p>Parameters passed to CREATEOBJECT() and NEWOBJECT() are forwarded to the Init event. STR() does now support all three parameters. A few issued with SECONDS() and SYS(2) have been fixed.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-86266450308097652092009-01-21T14:02:00.001-08:002009-01-21T14:07:11.659-08:00Build 333<span xmlns=""><p>The latest addition to Guineu is <a href="http://guineu.foxpert.com/help/sys8009___http_data_transfer.htm">SYS(8009)</a>. With this function you can send and receive data over the internet or intranet using the HTTP protocol.<br /></p><p><span style="font-family:Courier New;">Local lcWeb<br /></span><span style="font-family:Courier New;">lcWeb = Sys(8009,"GET","http://guineu.foxpert.com")<br /></span><span style="font-family:Courier New;">MessageBox( Left(m.lcWeb,500) )<br /></span><span style="font-family:Courier New;">lcWeb = Sys(8009,"POST","http://server/process.php","data")</span></p><p>You are not limited to transfer text data. For instance, you can have a web page that calls a Visual FoxPro COM server. The COM server could execute a query into a temporary DBF and then return the DBF file. In the same way you can transfer a DBF file to the server where server side scripts can process the content.<br /></p><p>Instead of a VFP COM server you could also use a PHP script that accesses a MySql database.<br /></p><p>If you want to pass on state information to a VFP application running on the web server, you can use SAVE MEMORY to save all current variables. On the backend you can use RESTORE MEMORY to load the variable set into memory. This is especially useful when the remote script executes a query and query parameters have been stored in local variables.<br /></p><p><br /></p><p><br /></p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-86597110014517666212009-01-19T12:39:00.001-08:002009-01-19T12:39:48.504-08:00Build 331<span xmlns=''><p>I've fixed a number of bugs. Most importantly, there was a breaking bug in the desktop UI engine that is now fixed. If launching a form brings up an error right away, please download this build. Some minor issues in ALINES() and STRTOFILE() have also been fixed.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-2750549791202805472008-11-11T05:13:00.001-08:002008-11-11T05:13:30.832-08:00Build 329<span xmlns=''><p>Today's build implements SET NOTIFY. While there are currently no messages that are suppressed by SET NOTIFY, this is one command less that you would need to remove from your code. When Guineu encountered an unknown command, in the past you got an error message stating line 1 as the culprit. The latest version accurately reports the compiled code line that caused the problem<br /></p><p>Tab order handling: The <a href='http://guineu.foxpert.com/help/tabindex_property.htm'>TabIndex property</a> is now available for all controls on mobile devices. For desktop controls TabIndex has no effect, as of now, but doesn't cause an error, either. For desktop controls the property will be available shortly.<br /></p><p>Two other reported bugs have been fixed: Passing THIS and THISFORM to a function doesn't raise an invalid type error anymore. Furthermore, accessing a non-existing object brings up a proper "Member not found" error message instead of a .NET runtime exception.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-62961513871139803262008-11-08T03:17:00.001-08:002008-11-08T03:17:57.465-08:00New online help<span xmlns=''><p>The online help (<a href='http://guineu.foxpert.com/help'>http://guineu.foxpert.com/help</a>) has been enhanced. Not only does the help file now contain additional content. There's also a new search feature available that performs a full text search on the entire documentation.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-79421974895847347242008-11-07T15:43:00.001-08:002008-11-07T15:43:31.851-08:00Build 322<span xmlns=''><p><img alt='' src='http://www.foxpert.com/images/110708_2343_Build3221.png' align='left'/>When a package is delivered to your home these days, you don't sign on paper anymore. Instead, the delivery person is asking you to sign on their mobile scanner. The same requirement came up for multiple Guineu applications, be it to sign for delivery, for receipts, etc.<br /></p><p>I'm happy to report that such a control is now available in Guineu. Before you can use the new Signature control, you have to activate the Signature base class with the new SYS(8008) function. This SYS function provides additional base classes that are not in Visual FoxPro. To remain compatible with Visual FoxPro, these classes are disabled by default.<br /></p><p>There's also a new Signature <a href='http://guineu.foxpert.com/help/index.html?signature_sample.htm'>sample project</a> with the form you see on the figure. Signatures can be stored in a memo field in either a binary format that can be loaded into the control, or as a bitmap. You can use an Image control and assign the content of the memo field to the PictureVal property to display the signature. PictureVal has been added to the Image control in this release, as well.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0tag:blogger.com,1999:blog-5190762195554470218.post-22323524938784986352008-10-18T14:14:00.001-07:002008-10-18T14:14:32.701-07:00Build 317<span xmlns=''><p>Currently I'm at the SouthWest FoxPro conference in Phoenix giving various sessions. Among them is one session about doing mobile development with Guineu.<br /></p><p>The last few versions have seen a number of bug fixes. GuineuIDE is now faster as forms and classes are only regenerated when they have changed. New in the language is the BOF() function as requested on the forum. During yesterday's session support for writing memo fields has been requested. That's also available in the new build. Forms now support the Unload event. Editboxes and Textboxes do have the ReadOnly event.<br /></p><p>The help file has been updated. As it turned out, a number of functions have been implemented, but weren't documented.</p></span>Guineuhttp://www.blogger.com/profile/18092546784467693071noreply@blogger.com0