Author Archives: iozuniga

Xailer 8.1 – Help generator

The new version incorporates a complete help generator in HTML format that allows creating the help of any management application in a very simple and powerful way.

As of version 8.1, the TForm control (form) includes a new property named XHtmlHelp. When you click on the edit button in the property inspector you will be shown this HTML editing screen:

The ID corresponds to the identifier of the help page for that form and the title is the text that will be displayed at the top of the page. It is mandatory to enter some ID, however, the title is not mandatory. If you leave it blank, that page will simply not have a title and the area that the title occupies will disappear.

Our XVC version control system automatically manages the existence of these files and includes them in the repository, without you having to do anything else. If you’re using SVN, you’ll need to add the files manually via Tortoise SVN or via the command line.

Clicking on the menu option Project->Project Helps will show us the help manager, which looks like the following

On the right side, all the help assigned to each of the forms are initially shown and it is your responsibility to move them to the left side to build the table of contents. Once moved to the table of contents (left side), you can use the arrow buttons to move up, down or change its nesting in a simple way. It is not necessary that all help pages that you create appear in the table of contents.

Note that there is a button with some gears that allows you to compile the help in a single file with the extension .XHLP. Logically, said file should be incorporated as one more file of the application that you want to distribute or deliver to your client. Xailer creates with all the aids a single compressed file, with a proprietary format, only accessible through our aid manager.

In the editor you can include all the help text. It is possible to incorporate images, tables, text styles and links to web pages or any other help page. For the latter, you must use the word ‘help://‘ as a protocol. For example, if you wanted to put a link to the page ‘NewCustomer’, you would write the link as: ‘help://NewCustomer‘. That’s all.

For our entire help system to work, you only have to add a line of code at the beginning of our application, which is:

Application:oHelp := THelp():New( "MiFichero.XHLP" )

When the user presses the F1 key on any form, the help for that particular form will be displayed. For example:

There are no more excuses for making 100% professional applications. I hope you liked it.


Xailer’s 20th anniversary

Xailer will soon be 20 years old and we want to celebrate it in style with you by presenting a very special offer that will be available throughout the month of June. For any version of Xailer we offer this offer:

  • 20% discount on upgrades
  • 40% discount on new purchases

These discounts are not cumulative with other discounts you may have.

The presentation was made in Madrid taking advantage of a meeting of xBase programmers from the Olivares 2000 Group, many of whose members have been advanced Xailer users for years.

I have taken the liberty of posting the photos of that meeting, in which you will surely recognize more than one (with a little less hair 😉 ). If any of those present prefer not to leave, leave it in comments and we will delete the photo immediately. In the same way, if anyone has photos from that day, I would love to include them.

I don’t want to end this article without talking a bit about the future of Xailer and what our short and medium term goals are, which are mainly two, but which involve a great effort and which we are sure will be very well received by the entire community:

  • Development of CGIs for Linux 64 bits using all the Xailer DataControls technology (integration with Nefele)
  • New 64-bit version of Xailer and Unicode support

Stay tuned for upcoming posts!!!

Xailer 8.1 – New HTML editor control

This new control allows you to edit HTML documents in a completely visual way and with some complexity since it allows you to include tables and images.

The control is based on the Summernote control, which is a simple editor made in JavaScript, which is especially light, hardly consumes resources and whose license allows commercial use.

This control inherits from the TWebView control which is a Microsoft Edge based web browser control that is only available for Xailer Enterprise.

No need to include any SummerNote source code, everything is self-contained. Its behavior is exactly the same as any other Xailer control.

Important note: images are saved inside the document

More shortly.

a cordial greeting

Xailer 8.1 – New control TAnimatedGif

This control allows you to display animated GIFs with absolutely no lag or stuttering. And this is because the painting is done completely at a low level and in a second thread, which has a very high degree of complexity.

With this animated GIF control there is no need to call ProcessMessages() for the control to continue painting correctly.

It is available for any version of Xailer, even the personal one.

More shortly.

a cordial greeting

Xailer 8.1 – Support of High DPI Desktop Application Development

Xailer 8.1 includes High DPI support, which allows you to get the maximum resolution out of powerful 4K monitors. To activate it you just have to set the Appliction:lDpiAware property to true at the beginning of your application execution. That is all. What this property really does is that your program recognizes the true resolution of the monitor.

When windows is running on a high-resolution monitor and scaling other than 100% is set, programs receive “adjusted” resolution feedback, not the actual resolution. In the same way, when a program sets certain coordinates in a window, windows readjusts those coordinates according to the value of the scale that it has established. For example, if windows is set to 150% scaling, when a program sets the dimensions of a window to 400×400 pixels, windows resets it to an actual size of 600×600 pixels, including all controls within it. .

This means that we do not have to worry about the scale that Windows has configured, but it has the drawback that the texts and images look blurred. When we set Application:lDpiAware to .T., our program will work with real coordinates, with no adjustments by windows. The images and texts will look perfectly sharp and in their original size, even if this means that they will appear smaller than expected. In these cases, we can use the Application:nScale property to adjust the desired scale without losing the sharpness of images and texts.

More on Xailer 8.1 shortly.

All the best

Xailer 8.1 – Enhancements on TDataset

This is a small improvement, but I think it is worth mentioning since it may interest more than one.

For the purists of the view-controller model, the use of the classic Xailer Data-controls is not appropriate, since all the editing process also occurs in the view, when it should be done in the controller. The most convenient way to avoid this problem is to use objects of type TMemDataset that return a memory recordset that is completely unbound from the table from which it came. But it has the disadvantage that the insert and edit operations are more complex since it requires the construction of the insert and update SQL strings manually. Let’s see how Xailer 8.1 solves this problem with a small example:

CLASS TControlador
  METHOD RSClientes( oRs )
  METHOD ClientesUpdate( oRs, nId )
METHOD RsClientes( oRS as CLASS TMemdataset ) CLASS TControlador
  WITH OBJECT ::oDatasource
    IF oRs != NIL
      :QueryMemDataset("SELECT * FROM CLIENTES", "", oRs )
      oRs := :QueryMemDataset("SELECT * FROM CLIENTES")
METHOD ClientesUpdate( oRS, nId ) CLASS TControlador
  WITH OBJECT ::oDatasource
      :Execute(oRs:SqlUpdate("idCliente", nId ))
      // Aquí se pueden hacer más operaciones de forma clara  

The update operation is performed in the controller with the additional advantage that we can include any operation within the same transaction. For this, the new method SqlUpdate( aWhereCols, aWhereValues) is used, which creates the SQL statement with only the columns that have changed their value. As you can imagine, there is also a new method called SqlInsert().

Another of the peculiarities that this code has in its RsClientes() method that I think is very interesting is that the TMemDataset object is passed as a parameter, instead of being created in the method itself and returned as a return value, which could be the first approach that any programmer would make. This technique has a great advantage, which consists of being able to incorporate an empty TMemDataset into the form itself and even link it to a browse in which we have completely defined the columns and everything visually. If our method were responsible for creating the TMemdatset and returned it as a return value to then assign it to the browse with oBrowse:oDataset := oController:RsClientes(…) we would observe how all our browse columns would disappear since a new dataset and that causes a reset of the entire control. On the contrary, if we pass the recordset as a parameter, everything is perfectly maintained.

And that’s all, for now. Soon, more news.

All the best

Xailer 8.1: Enhancements on TWebDatasource

Xailer 8.1 will be published in the near future and in a series of short articles we will explain the new features that Xailer 8.1 will incorporate, leaving the most important ones for last. This is one of them.

The next version of Xailer 8.1 incorporates everything necessary to be able to do without any type of FTP connection. That is, all the classic operations that are carried out by FTP, such as:

  • file upload
  • file download
  • file deletion
  • file renaming
  • directory listing
  • directory creation
  • deletion of directories
  • They are included in the new TWebDataSource class.

Note: The FTP services that TWebDatasource includes are limited to the directory where the PHP module is located and its dependent directories.

The use of the FTP protocol is becoming more complex every day due to the different existing options: secure FTP through digital certificate (FTPS) that can be implicit or explicit, through SSH protocol (SFTP) or non-secure FTP. Unfortunately the support of Microsoft Windows in its WININET library for any type of FTP apart from the non-secure one is null and the most appropriate option to attack this problem would have been to use the CURL library that is available in Harbour, but its use is complicated since it requires installing quite a few DLLs. The other option would be to use CURL by command line, which has been available in Windows for a long time, but that means having to ‘launch’ a console program from our application that programmers and users don’t usually like, and neither do antivirus programs.

For all these reasons and an additional one, which is that it is practically impossible for port 80 to be closed (which is the one used by the Web), we have decided to incorporate into our TWebDatasource class all the services that any class of file handling by ftp.

But already put, we have added one more service, which is the possibility of sending emails using one of the most used libraries in PHP, which is PHPMailer. As with the database access credentials to include in the PHP file, the same is true for the credentials for sending mail. In the PHP file itself and under the XA_SendMail() function, in a very simple way and without having to know anything about PHP, you can set all the parameters you want to send emails.

We remind you that this class is only available in the Enterprise version of Xailer.

All the best

Important news in Xailer Professional

After having turned our base version of Xailer into a completely free product and having been a complete success due to its great reception. Now it’s time to promote the professional version to make it much more interesting.

From the publication of this article, Xailer Professional receives two important news:

  • The inclusion of many controls that until now were only present in the ‘Enterprise’ version, such as:
    • Native access to MySQL, MariaDB and SQLite database servers.
    • Access to WIA scanner.
    • Access to the image editor.
  • A very important reduction in its price, which goes from € 395 to € 245

And also as a launch offer for this new version. We offer Xailer Professional at an upgrade price, that is, € 145 until June 30, 2021.

No more excuses not to start using SQL databases and definitely abandon DBF files. Furthermore, Xailer’s DataControls, included in the professional version, make the process very easy and intuitive. It is never too late to make the change.

You can place your order directly from this link:

Comparison of the different versions of Xailer

Xailer Personal Professional Enterprise
Classes & functions libraries for Windows
Integrated development environment
Complete documentation in English
No preferential technical support
Technical support through private forums
One year technical support and Xailer upgrades
Runtime library source code, except few internal components
Datasets components to access different database formats, DBF, ADS and SQL
WIA scanner support
Image editor
ActiveX support
MySQL & MariaDB native support
MySQlite native support
MySQlite encription support
Multithread Internet download support
Multithread support
Native Web browser control based on Webkit
Native Web browser control based on Microsoft Edge
Access to external databases trough WEB
Windows 10 stylish controls
Advanced control animation

Xailer Personal: Completely free!

Dear Xailer and Xbase users in general,

Taking advantage of these Christmas dates, we have decided to offer our personal version of Xailer completely free and for an unlimited time. We remind you that this version is fully functional and includes everything you need to make robust management applications using any existing RDD. All the power of Xailer’s IDE, such as its fast debugger, intellisense support and its ease in creating executables, are available to the programmer.

We hope this offer is well received and encourages many users of [x] Harbor, Clipper and Visual FoxPro to try our integrated development environment for xBase. We are sure they will not disappoint. We thank you in advance that you can share this news.

Best regards and Merry Christmas!

Xailer 6.1.0 publication

Today we publish a new version of Xailer, the version 6.1.0

In this new version we have updated the tool to the latest versions of all the external tools we use, such as compilers, code editors or databases. Xailer has adapted to the latest versions of:

  • Harbour
  • MinGW
  • SQLite
  • Scintilla
  • MariaDB

And great improvements have been added, such as:

  • Event support in ActiveX controls.
  • Full support of stored procedures for MariaDB and MySQL. It includes the creation of classes that automatically incorporate all existing stored procedures in a database catalog.
  • New control TGroupboxMod which is the classic TGroupbox control but vitaminized.
  • Incredible improvements in the TRICHEdit control that now includes multiple import and export formats if you need to have Microsoft Office installed. In addition to supporting transparency.
  • New opacity property in a large number of controls. There is no longer just the possibility of putting transparency yes or no. With Xailer 6 it is possible to set an opacity level by percentage.
  • New method ToExcel () that allows to send from any TBrowse type control, its content to Excel (Excel must be installed).

For a complete list of all the improvements you can consult the following link:

The new version of Xailer and Harbor can be found in the following links:

This new version of Xailer starts directly from version 6.1 because version 6.0 has only been available for beta-testers and for a considerable time. Possibly, this new version of Xailer is the one that has been most tested before its final publication due to the update made in all the tools on which our product is based. We hope that the possible errors that can be found are minimal. And in any case they will be corrected quickly.

You need to completely rebuild all your projects, including any static or dynamic library that you are using.

Best regards,
[Xailer team]