Our Blog, Filemaker only, Xojo only, Archive (older), Follow us on Twitter, Xing, LinkedIn or Facebook.

LibUSB for Xojo in next MBS Plugins

Quite a few Xojo developers use our MBS Xojo USB Plugin to connect to devices, do measurements, exchange data and query information for their applications. Wether this is a scale to weight items, barcode devices, various sensors or just a special label printer, we do provide classes to help you.

For some time now we got HIDAPI classes to replace the older MacHID, LinuxHID and WinHID classes to provide a cross platform interface for USB devices with HID protocol.
And now we replace MacUSBConnect and WinUSB classes with our new LibUSB classes.

The new plugin classes are based on the open source LibUSB library, which works on MacOS, Windows and Linux. With quite a few Linux distributions, it comes preinstalled. The library itself is licensed LGPL, so you can load it in commercial applications, but distribute it as DLL/so/dylib file.

The new LibUSBDeviceMBS class provides functions to list devices and query information. You can open a connection to a device and transfer data as needed. The example project lists all the devices and even works nice on Raspberry Pi.

Will be included in next prerelease or if you like to try now, please do not hesitate to contact us.

MBS Xojo Plugins, version 18.1pr3

New in this prerelease of the 18.0 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

Xojo Meetings for Montreal and Toronto

As I travel to Montreal for the Québec FileMaker conference, I'd love to have some Xojo meetings with local developers:

If you live in this part of Canada, or you like to come over from the USA, please join those surveys to find the perfect date between 12th to 19th March 2018:

Survey for Toronto   Survey for Montreal

I know I have 15 Xojo developers using my plugins in Montreal alone and about 30 in Toronto. If you like to join, please contact me soon.

I reserve a table in a nice restaurant and I will be there. You can join and we can shop talk all night. Ask me plugin questions, bring your laptop and show projects.
And of course we discuss latest changes in Xojo, upcoming conferences and what's new in plugins.

Of course it is possible to arrange private meetings for consulting while I am in the city.

SMTP Server Settings

Sending Emails with various servers can be a challenge. In this blog article we like to collect the settings needed for using our SendMail functions in FileMaker or CURLEmailMBS class in Xojo to send emails. As you see we always prefer to use encryption.

Bei checking certificates, we can detect and avoid giving our password to a transparent proxy. And we enable TLSv1.2 for all here and require encrypted connection. It's important to test and verify this, as I once run into a hotel reading my emails to count them and prevent spamming. (more)

Seven months till European MBS Xojo Conference in Munich

The early bird offer is set to expire in one month (6 months before conference) for our European MBS Xojo Conference 2018 in Munich. If you like to join for the best rate or become a speaker, please contact us soon.

Already 25 attendees are registered from six countries. Reserve your ticket and reserve your hotel room as soon as possible.
Invoices for registered attendees will be written in February.

The schedule:

Sep 5th: Xojo Training in English
Sep 6th: Conference, first day with dinner event
Sep 7th: Conference, second day
Sep 8th: Xojo Training in German

Registration is open. The early bird offer available till 6th March is just 499 Euro plus VAT if needed. Attending the conference costs regularly 699 Euro plus VAT, including food and beverage in the Maritim Hotel as well as an accompanying social program.

Sessions are to be held in English. Our conference is conceived as a networking event for the Xojo community. The conference is an ideal opportunity for sharing your thoughts and your own development experience with fellow users and developers. If you like to hold a presentation, please contact us as soon as possible. Speaker receive discounted tickets.

See also XDC 2018 in Denver in April 2018.

MBS Xojo Plugins, version 18.1pr2

New in this prerelease of the 18.0 plugins:
  • Updated JPEG library to version 9c.
  • Added MemoryStorageMBS.Constructor.
  • Fixed problems with CNContactMBS phoneNumbers and others having wrong return type.
  • Added NSEPSImageRepMBS.pdfImage.
  • Added last error properties to PHPMBS class.
  • Added callXojo function for PHP to trigger event in addition to the callRealbasic function name.
  • Fixed tools plugin to compile with Real Studio 2011.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

Windows Scripting

We do support running Windows scripts with both JavaScript and VBScript with our plugins for Xojo and FileMaker:

In Xojo, you can use the WindowsScriptMBS class. It allows you to add code, evaluate some expressions and run functions with parameters. Errors are reported and you can even define a timeout.

In FileMaker the WindowsScript functions to do the same. Our examples show how to use various scripts to use OS functions in FileMaker.

Microsoft did not port the ScriptControl to 64-bit, so by default the plugin functions only work properly in 32-bit. But the open source Tablacus Script Control 64 does work in 64-bit with our plugins. The source code is available here: github.com/tablacus/TablacusScriptControl.

Of course nowadays you can do a lot of things directly instead of using VBScript. But if you have existing scripts, it may be convenient to use the plugin functions to run it.

Adding custom icons for MacOS in Xojo

IconsRecently a client asked how to modernize the old icon setting code to work in 64-bit targets. We used to do this via Folderitem.AddCustomIconMBS function and IconFamilyMBS class. But those are primary using old Carbon code with GWorld and IconServices library. Now Apple deprecated that in favor of NSWorkspace's setIcon method.

So today we want to show you how to add a custom icon to a file with three sample snippets. First with an existing picture, second with creating a picture with alpha channel and third one with a masked image. Depending on what you do, all ways work, but if you have an image already or just compose one for the new file, one way may be better suitable.

First, with an existing picture in the project or a variable:

// write a file dim f as FolderItem = SpecialFolder.Desktop.Child("test.txt") dim t as TextOutputStream = TextOutputStream.Create(f) t.WriteLine "Hello" t.Close // use existing picture dim g as new NSImageMBS(SomePicture) dim b as Boolean = NSWorkspaceMBS.setIcon(g, f, 0) if not b then MsgBox "Failed to add icon" end if
Second, with alpha picture:
// write a file dim f as FolderItem = SpecialFolder.Desktop.Child("test.txt") dim t as TextOutputStream = TextOutputStream.Create(f) t.WriteLine "Hello" t.Close // create picture for icon with alpha dim p as new Picture(512, 512) dim pg as Graphics = p.Graphics pg.ForeColor = rgb(255,0,0) pg.FillOval 0,0,p.Width,p.Height // add icon dim g as new NSImageMBS(p) dim b as Boolean = NSWorkspaceMBS.setIcon(g, f, 0) if not b then MsgBox "Failed to add icon" end if
Third, with masked picture:

// write a file dim f as FolderItem = SpecialFolder.Desktop.Child("test.txt") dim t as TextOutputStream = TextOutputStream.Create(f) t.WriteLine "Hello" t.Close // create picture for icon dim p as new Picture(512, 512, 32) p.Graphics.ForeColor = rgb(0,0,0) p.Graphics.FillRect 0,0,p.Width,p.Height p.Graphics.ForeColor = rgb(255,0,0) p.Graphics.FillOval 0,0,p.Width,p.Height // add mask dim m as Picture = p.mask m.Graphics.ForeColor = &cFFFFFF // first all white m.Graphics.FillRect 0, 0, p.Width, p.Height m.Graphics.ForeColor = &c000000 // visible parts black m.Graphics.FillOval 0, 0, p.Width, p.Height // add icon dim g as new NSImageMBS(p) dim b as Boolean = NSWorkspaceMBS.setIcon(g, f, 0) if not b then MsgBox "Failed to add icon" end if
We hope those snippets help you and if you have questions, please do not hesitate to contact us.

PS: The Xojo project icon made with our QuickLook extension.

The Status of our PHP support

As you may know we provide PHP support in our Xojo and FileMaker plugins. You can load a precompiled PHP library, get/set variables and run PHP code. That is useful for reusing existing PHP code in your solutions. There is a wide variety of uses including processing JSON or XML, doing SOAP or REST requests for various web services, calculating hashes or tokens for authentication or using the same functions in Xojo/FileMaker for encryption as in the PHP code running on your website for the counterpart.

We added PHP support a long time ago. At least 9 years ago for Xojo (called REALbasic at that time) and later for FileMaker in the year 2012 with version 2.9, about 5 years ago. The code is mostly identical for both and even allows to call back to the host application. In Xojo you can call an event in your Xojo code. In FileMaker you can trigger scripts, use evaluate and SQL to query your database. It works quite well for a few customers. (more)

MBS Xojo Plugins, version 18.1pr1

New in this prerelease of the 18.0 plugins:
  • Changed MeasureRotatedTextMBS to not use HDC of graphics object to measure, but it's own HDC.
  • Fixed problems with connecting to SQL Anywhere database.
  • Added Options property to SQLDatabaseMBS, SQLConnectionMBS and SQLCommandMBS to inspect options.
  • Updated DynaPDF to version
  • Improved Java loading code on Mac to find automatically newest Java version and load it.
  • Improved JavaVMMBS.SetLibraryPath function to work for Mac, too.
  • Improved Java loading code on Windows to find JRE 9.
  • Added WindowsDisplayMBS class.
  • Fixed problem with BigNumberMBS to currency conversion. Now rounding.
  • Fixed problem with notification receiving in CNContactStoreMBS.
  • Using WindowsFileCopyMBS now sets error mode to prevent error dialogs from system.
  • Fixed bug in DynaPDFMBS.WriteStyledText with extra new lines when switching alignment.
  • Fixed bug in DynaPDFMBS.WriteStyledText with switching font back to non-bold.
  • Updated CURL library to version 7.58.0.
  • Added support for SQL Anywhere API v1 in addition to v2.
  • Fixed problems with using SQLDatabaseMBS object after calling close method on it. Now you can reuse it for another connection.
  • Fixed SQLDatabaseMBS and SQLConnectionMBS to close an existing connections before starting a new one.
  • Updated SQLite to version 3.22.0
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

XDC 2018 in Denver to sell out soon

Xojo Inc. just announced that the Xojo Developer Conference 2018 in Denver may sell out soon as there are only 11 tickets left.

If you haven't registered yet, the time is now!
Save $100 by Feb. 16, but register soon to guarantee you'll have a spot!
The 2014 conference sold out before. Looking forward to even more Xojo developers this time.

Hotel rooms are available here.

I am looking forward to see you all in Denver!

See also Things to do in Denver beside XDC and MBS Xojo Conference in September 2018 in Munich.

Did you try our new Clipper plugin classes?

Recently with the 18.0 release of our MBS Xojo Plugins, we added a new Clipper plugin part in the Tools plugins to use the Clipper library.

As you see, you can do polygon clipping with intersection, union, difference & exclusive-or using ClipperMBS module. The ClipperOffsetMBS class allows to add offset to a polygon like the one on top right.

And the bottom example is a rectangle with a triangle hole. We intersect with a second rectangle and get the new square area with the triangle hole.

BKeeney Software Looking for Xojo Developer

BKeeney Software, a Lenexa, Kansas software consulting company is looking to add a talented developer to their consulting staff. We have been creating cross-platform applications our international clients as well as internally developed products for applications developers for over fifteen years. The resurgence of the Macintosh has driven our business growth.

The ideal candidate should have a minimum of two to three years of experience in an objected oriented development language creating commercial desktop and/or web applications. The candidate should enjoy learning new languages and techniques. A B.A. or B.S. in Computer Science or equivalent is preferred.

Experience with the Xojo (Real Studio) development platform is a plus.

Experience with Objective C, Xcode or web app development is a plus. Candidates must be familiar with Macintosh OS X and Windows from a development standpoint. Linux is a plus.

Experience with iOS development is a huge plus.

Candidates should be comfortable using SQL as most projects involve a database (either local or server). We support projects using MySQL, SQLite, and PostgreSQL databases.

Candidates should enjoy the challenge of working on full life cycle projects. This includes requirements gathering, coding, documentation, testing, and follow up work and changes from the client. Previous consulting experience is a plus.

Candidates must have a suitable work environment in their home. Our offices are virtual with regular interactive meetings. Candidates must have the discipline to work in their home environment and get their work done. Proven experience with work from home development is a plus.

The candidate should have excellent communication skills and be able to interact with clients in a professional manner via phone, email, and video conferencing.

Strong analysis and problem solving skills are required. Candidate must be able to manage multiple priorities. Attention to detail is a required skill.

Send us your resume and introduce yourself!

Resumes can be submitted to: support@bkeeney.com

Due to client restrictions candidate must be U.S. Citizen or green card holder. No recruiters please. Preference will be given to full-time candidates, however, consideration will be given to candidates who would prefer less than full-time (e.g., 20 or more hours per week).

MBS Xojo Plugin registration dialogs

Sometimes you may see a dialog from our plugin with a message about your license for our plugin. You can read the message carefully and see what the problem is. Usually it's not difficult, but to help, here a few common dialogs:

This dialog simply tells you that no license key was used and Register function never called. The dialog includes the name of the plugin "Overlay", the version of the plugin "17.4", the date it was compiled "Sep 25 2017" and the process ID. The last one helps to figure out which application shows the dialog in case you have several candidates. Simply lookup in Task Monitor, Activity Monitor or any other tool which application has this process ID. Than you can add your license call in app.open event and enjoy our plugins.
While you debug the application, we do not show this dialog, so you only see it in built applications.

The second dialog simply tells you about an outdated license key. So your key is from 2017 and the plugin from 2018, so please order an update.

The third dialog appears when you use the plugin in your application before calling the register function. Later when you register, we notify you that the plugin was used before license dialog showed up. This can cause problems like, one part of the plugins misses license key (used before), but other parts have a license. Please make sure registration is done early in the application.

For the forth dialog, you need to mix different version of the plugins. That is a bad idea as we change data structures for C++ from time to time. If two plugin parts share the same data structures and they have a different layout, the application may crash accessing values there. Luckily the plugin tells you the names of both parts and the process ID, so you can locate the application.
Sometimes this happens, when you install an newer over an older application and some DLLs are not properly updated.

If you have trouble, please do not hesitate to contact us. In fact, with a valid license key, you should never see those dialogs.

Java with MBS Plugin

As you may know we support loading Java in both Xojo via MBS Java Plugin and FileMaker via Java functions to call java code. Due to a change in Java 9, the existing plugin doesn't find the jvm.dll on Windows automatically. You can of course just pass the right path to the functions to load it and bypass the automatic.

For Mac and 32-bit applications, you can install Java for OS X 2015-001 and if you run our examples, they will simply work and return java.version with "1.6.0_65".

For Mac and 64-bit application, you can of course use Java 1.6. But we prefer to use version 9. You simply install version 9 and now you see the plugin still loads version 6 unless you fix JavaVM framework manually. But a better fix is to pass in a custom path of the jni library. e.g. in Xojo:

JavaVMMBS.SetLibraryPath "/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/jli/libjli.dylib"

But for next plugin version we added code to find the latest Java version and load it's library automatically. So you don't need to pass in the path.

For Windows in a 64-bit app you get "9.0.4", if you get the Java 9 library loaded and query java.version system property. To have this work better, we improved the loading code there, too.

So for the upcoming version 18.1 (Xojo) and 8.1 (FileMaker) of our plugins, you should be able to use Java 6, 7, 8 and 9 easily without hassle. If you want a specific version, you can always pass in the file path.

If you like to try it soon, you can always contact us for a test copy of the plugin.

MonkeyBread Software Releases the MBS Xojo Plugins in version 18.0

Nickenich, Germany (January 23rd, 2018) -- Monkeybread Software releases version 18.0 of the MBS plug-in for Xojo.

The MBS plug-in comprises a collection of several plug-in parts which extend the Xojo (Real Studio) development environment with 2,300 classes featuring over 60,000 documented functions. Our plugins support all three platforms Mac OS X, Windows and Linux with all project types desktop, web and console including 64-bit and ARM targets. Some of the highlights on the 18.0 update:

We got a new Clipper plugin part inside our Tools plugin. The ClipperMBS module performs line & polygon clipping - intersection, union, difference & exclusive-or, and line & polygon offsetting. Please play with new example projects to see what it can do for you!

Our DynaPDF Plugin got a new ExtractText function to extract text of a page, optionally inside a rectangle. The RenderPDFFileEx function writes images for all pages of a PDF file to a given folder, optionally preemptive threaded. We added example to sign PDF with 2048bit PKCS#12 certificate file.

For our CURLSMBS class on Windows we added support for IDN domains, so you can use umlauts and other special characters in domain names there. This requires Windows Vista or newer and will return error on Windows XP. On Mac all file paths passed into CURL functions are now properly encoded, always as UTF-8.

Our CSV Split function now supports tab character as separator and better handles multi line texts.

The WKWebViewControlMBS control on MacOS in 64-bit applications can now send messages from JavaScript to trigger event where you can process the parameters. The control can now be allowed to access file URLs.

For PictureMBS we got new functions to multiply and un-multiply RGBA pixel data to convert between pictures with alpha channel and those with masks. You can also clear cache, fill rect with alpha, blend pictures and copy picture with alpha channel.

The new NSViewTooltipMBS class allows you to add dynamic tooltips to Mac applications. You can provide a static tooltip text or provide current text via event based on the mouse position.

We added clipboard functions for NSAttributedStringMBS, GUID parsing for DirectShowGUIDMBS and WIAGUIDMBS, a function for OpenSSLMBS to sign data with PKCS7, new camera configuration properties for RaspberryPiCameraMBS class, LocalIP, LocalPort and Poll to RAWSocketMBS and UDPSocketMBS classes, AppReceiptVerificatorMBS.MACAddress shared property and we pass through picture resolution properties for various picture functions.

Finally we updated Xcode to version 9.2, CURL library to version 7.57.0, updated DynaPDF to version, updated OpenSSL to 1.1.0g and 1.0.2m, updated Rockesy4ND library for macOS to better support macOS High Sierra and updated SQLAPI to version 4.2.1.

See release notes for a complete list of changes.

Colorspaces in MacOS with Xojo

Some of our clients love to make applications to edit photos and want to display them in the correct colorspace.

The example project used for a test shows various colorspaces and you need to look very close at them on the screen so you can spot the difference between the red in the three color spaces: screenshot For my screen left is RGB(237, 65, 36), middle is RGB(235, 51, 36) and right is RGB(255, 2, 0). So the right one is basically 1 to 1 to the screen. In that screen colorspace a SRGB or generic RGB red color is quite a difference. (more)

Sign up for MBS Newsletters

You can sign up for MBS Newsletters on our website.

We keep you informed about new plugin versions, local events, conferences and special offers. Emails are sent out in average once a month, so it shouldn't fill your mailbox.

If you provide an address, we can make sure we include you for local events in your area. Like when we attend meetings, we usually email people 100 km or miles around to let them know we are coming.

Looking for a trial license key?
You can get one here: Trial License Request Form.

MBS Xojo Plugins, version 18.0pr9

New in this prerelease of the 18.0 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

DynaPDF Text Position Examples

We got a new example for Xojo on how to extract text from a page and know each position of each text chunk. We can even keep track of current state, so we have the fonts ready and can even draw the same text on top of the existing PDF with Xojo. So DynaPDF renders page with here with text in black and we draw in paint event the blue rectangles for text portions and than draw the same text with Xojo in red:

This example uses the DynaPDFParseInterfaceMBS class from DynaPDF Pro to walk over all PDF commands drawing a page, so we get all the text output as well as matrix changes, font setting and state saving & restoring. We keep track of the current matrix with DynaPDFMatrixMBS class and collect the text records with DynapdfTextRecordWMBS class for Unicode or DynapdfTextRecordAMBS for font specific encodings. In latter case we convert the characters using current font to unicode text.

The example will be included in 18.0pr9 later today and in the 18.0 release next week.
To use this code in a shipping application, you need to order the DynaPDF Pro license from us for use with the MBS Xojo DynaPDF Plugin.

Older blog entries:

2018-01-17 FileMaker und Xojo Stammtisch in Passau
2018-01-16 Register for XDC 2018 in Denver soon
2018-01-15 MBS Xojo Plugins, version 18.0pr8
2018-01-14 Xojo Stammtisch in Hamburg
2018-01-10 MBS Xojo Plugins, version 18.0pr7
2018-01-07 Xojo Developer Meeting for Dallas
2018-01-05 Sign PDF with DynaPDF and your custom signature
2018-01-05 Xojo Developer Meeting for Stockholm
2018-01-04 The 2018 Xojo Design Awards
2018-01-03 Very early bird offer to expire for European MBS Xojo Conference in Munich
2018-01-02 xDev Magazine Issue 16.1 Issue
2018-01-01 MBS Xojo Plugins, version 18.0pr6
2017-12-31 Happy new year 2018
2017-12-31 Xojo Versions used
2017-12-28 Three days left for DynaPDF Christmas Sale
2017-12-24 Merry Christmas
2017-12-22 MBS Xojo Plugins, version 17.6pr5
2017-12-20 Load RAW image on MacOS with options
2017-12-19 DenkForm Schulung zur Europäische Datenschutzgrundverordnung
2017-12-19 Welcome 5th generation of MBS Pens


Feb 2018
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008
XML: RSS Feed XML: Atom Feed