MBS Xojo / Real Studio Plugins, version 15.2pr5

Sunday 28 June 2015 at 6:42 pm
New in this prerelease of the 15.2 plugins:
  • Fixed bug with ChartDirector string array handling introduced in earlier prerelease.
  • Marked some QuickTime stuff to be deprecated for Xojo 2014 and newer.
  • Fixed a bug with ChartDirector setDataSymbol method for bigger image sizes.
  • Changed JavaVMMBS to raise more exceptions if initialization failed.
Download: MBS Plugins for Xojo and MBS Plugins for Real Studio. Or ask us to be added to our shared Dropbox folder.

MBS Xojo / Real Studio Plugins, version 15.2pr4

Wednesday 24 June 2015 at 10:35 pm
New in this prerelease of the 15.2 plugins:
  • Modernized HexStringMBS to use dynamic memory allocations, raise OutOfMemoryException and avoid an overflow bug we had there.
  • Added feature to SQLDatabaseMBS, SQLCommandMBS and SQLConnectionMBS to pass on options from connection/database object into commands. This way you can set PrePreFetchRows option on database/connection and option, so you can use that for SQLSelect calls.
  • Changed CURL class so that the file streaming not just works for PerformMT, but also for Perform.
  • Added old TrackingMode property to NSSegmentedControlMBS now named cellTrackingMode.
  • Added missing functions relativeRadialGradient and relativeLinearGradient to CDAngularMeterMBS class.
  • Changed PortAudioStreamBufferedMBS and PortAudioStreamCallbackMBS to make sure Finished event fires on main thread always.
  • Reduced plugin interdependencies.
  • Fixed UUIDMBS.randomUUID which was not always really random.
  • Changed CURL to set Verbose option on by default. Also we switch on Collect properties if you have no event and no file streaming in use.
  • Updated DynaPDF to version
  • Fixed Merge and HyperLink methods in XLSheetMBS class.
  • Rebuilt with newer Plugin SDK.
  • Optimized ChartDirector Plugin array access and memory usage.
  • Added ProcessMBS.TransformProcessType.
  • Improved exception handling in ChartDirector so it raises OutOfMemoryException in low memory situations..
  • Our plugin now more consistently use FunctionNotFoundException if a library/function isn't available/loaded.
Download: macsw.de/plugin/Prerelease . Or ask us to be added to our shared Dropbox folder.

Xojo 64-bit progress

Wednesday 24 June 2015 at 6:49 pm
You wonder what progress is on 64-bit Plugins for Xojo?

Well, the first thing is that Xojo for 64-bit is in early testing and only available for limited group of people. That group luckily includes the XDC 2015 attendees.

Did you attend the last the conference in Austin, Texas?

Than you should go to Xojo forum and see if you find the postings about the 2015r3 version with 64-bit for testing. Everyone else waits for beta test to start.

For the plug-in, I can say that we should be ready when beta test starts. Not all features work already, but some do and we need to test things over time.

Text data type

Friday 19 June 2015 at 8:40 pm
Since 2015 we do have this new text data type in Xojo. The updated plugin SDKs we got supports this data type, so we can use it in plugins.

Of course we will not change tens of thousands of function declarations, but we can use it in a few points to avoid the implicit conversion from text to string or back. For example we found it useful for those new functions:

SQLValueMBS.setAsText(value as text)
SQLValueReadMBS.asText as Text

If you have more ideas where we could support text and avoid extra data copying/conversion, please let us know.
Especially plugin functions you would call often, e.g. in loops, and pass text to the function.

ChartDirector 6.0 Released

Monday 15 June 2015 at 3:46 pm
ChartDirector 6 arrived. As you may know the MBS ChartDirector Plugin is based on the ChartDirector C library and this one got updated. We actually include the latest library already in the 15.1 release of our plugin. Now the ports for php and java are also done and the package is released.

Advanced Software Engineering is pleased to announce the immediate availability of ChartDirector 6.0.

ChartDirector 6.0 can now output charts as vector graphics in PDF. Comparing to SVG, another vector grapihcs format supported by ChartDirector, users are more familiar with PDF and viewers are widely available. PDF is therefore an ideal format to create soft copies of the charts.

For SVG, many browsers can now display SVG in IMG tags. ChartDirector 6.0 comes with an upgraded Javascript library that can support user interaction features for SVG, such as AJAX chart updates, tooltips, hot spots, programmable track cursors and zooming and scrolling support. Furthermore, the Javascript library now has touch support. The track cursor can track finger movement in addition to the mouse, and zooming and scrolling can be by tapping.

ChartDirector 6.0 comes with a new Viewport Control that supports both desktop and web applications. The Viewport Control lets users visualize and manipulate the viewport, which is a window on the full data range. Users can move the viewport in 2D to scroll the chart both horizontally and vertically, and resize the viewport to zoom in or out the chart.

ChartDirector 6.0 includes built-in support for zooming and scrolling for realtime charts, in which the viewport will be adjusted as the data are updated in realtime.

Meters and guages in ChartDirector have undergone a major upgrade. Linear meters can now uses bars in addition to pointers to represent data values. Color scales can be added at various positions to represent the scales by color gradients with variable thickness. The background, border and pointers styles have also been enhanced.

A list of new features in ChartDirector 6.0 can be found in the release note at advsofteng.com/release60.html

You can already get MBS ChartDirector Plugin in version 15.1 and use the new SVG and PDF features. For the improvements on control handling, we'll soon update our examples.

Exceptions and Private Constructors

Sunday 14 June 2015 at 10:53 pm
Today I added 20 new private constructors to the ChartDirector plugins. Why?

Well, we do have classes which can't really be used alone. If you create an CDAxisMBS with new command in Xojo, you only have an empty object. No internal object reference, so it's just an empty shell. To get such an object, you invoke a plugin function on another class, e.g. a chart. Like this example:

// bad old code, now impossible
dim axis as new CDAxisMBS
axis = chart.yAxis

// better code
dim axis as CDAxisMBS = chart.yAxis

Call new on a class where it's not intended causes trouble. First you have objects were any call to a method or property can cause an exception or a crash. To avoid it, I add private constructors to the classes to mark them being abstract. This effectively disallows you to subclass or instantiate them.

The documentation utility got a few fixes today. First I found over 100 items where text encoding got mixed up so you had strange characters in example code which caused confusion. Should all now be cleaned up. And those abstract classes are now also marked explicit as being abstract.

To make ChartDirector Plugin more safe in low memory situation, the next prerelease will have improvements in exception handling. Functions allocating memory should now raise OutOfMemoryException if they can't allocate memory for the work they do instead of crashing.

MBS Xojo / Real Studio Plugins, version 15.2pr3

Saturday 13 June 2015 at 11:53 pm
New in this prerelease of the 15.2 plugins:
  • Added methods for QTSoundExtractMBS, QTPictureMovieTrackMBS and QTMovieExporterMBS classes taking movie as handle.
  • Fixed a crash in SQLConnectionMBS with accessing an uninitialized lastSQLCommand property.
  • Added new functions to NSButtonMBS and NSSegmentedControlMBS for OS X 10.10.3.
  • Upgraded Xcode to version 6.3.2
  • Added more methods for ImageMagick's Image classes.
Download: macsw.de/plugin/Prerelease . Or ask us to be added to our shared Dropbox folder.

Xojo Meeting in Newcastle upon Tyne, UK

Friday 12 June 2015 at 1:25 pm
For my stay in Newcastle next week I organise a Xojo developer meeting.

Join us in Newcastle, 16th June 2015. If you are not on the list already, please contact me, so we have enough seats.

Exact time and location will be announced, but time will probably evening for dinner in a restaurant.

There is a lot to tell about the recent XDC conference, upcoming 64-bit support, plugins and future Xojo releases.

Paypal example project

Friday 12 June 2015 at 10:11 am
Thanks to Jean-Luc Arnaud, we got a sample project to show how to use Paypal in a Xojo application.
The application opens a window to run the express checkout for purchasing something, e.g. the app license and than checks output. This way you can see if payment succeeded or failed.
For that we use a HTMLViewer to load the paypal website and in background a query using CURL Plugin to initiate the payment.

PS: Will be included in next prerelease.

Features to be removed

Friday 12 June 2015 at 12:13 am
As you may know we keep a lot of features alive long after Apple deprecated them. But it looks like with future updates, we may need to actually start removing some things from MBS Xojo and Real Studio Plugins.
Good candidates are: Please move to CoreText, CoreGraphics, AVFoundation and newer ColorSync classes (e.g. CSProfileMBS). To help you most classes are marked as deprecated in Xojo, so they show when you analyze your projects.

SQLite in memory databases

Thursday 11 June 2015 at 09:31 am
Sometimes you need more than an assoziative array in memory (Dictionary for Xojo and for FileMaker.).

Sometimes you may want to look at a SQLite database in memory. It has the big advantage that you can fill it with data and run SQL queries against it to find records of data.

To create a memory database with sqlite you specify a file path of ":memory:".

In FileMaker you call:

MBS("SQL.Connect"; $Connection; ":memory:"; ""; ""; "SQLite")

In Xojo or Real Studio you call with SQLDatabaseMBS class:

db.DatabaseName = "sqlite::memory:"

In Xojo or Real Studio you call with SQLConnectionMBS class:

con.Connect(":memory:", "", "", SQLConnectionMBS.kSQLiteClient)

All data is lost if not copied elsewhere when the application quits or you close the database.

Handling tab in Listbox

Wednesday 10 June 2015 at 1:45 pm
If you use the Xojo (or Real Studio or REALbasic) Listbox control and you have editable cells, you may want to use the tab key to move inside the listbox.

The code below helps here. I use it in several projects and normally customise it heavily. For example you could add cursor keys to it or other keys beside tab key.
You call it from CellKeyDown event like this:

EventHandler Function CellKeyDown(row as Integer, column as Integer, key as String) As Boolean if HandleTabInList(me, row, column, key) then Return true End EventHandler

Here is the HandleTabInList method which you may want to copy to a module:

Function HandleTabInList(list as listbox, row as integer, column as integer, key as String) As Boolean // Handle tab character in Listbox.CellKeyDown event Select case asc(key) case 9 if Keyboard.AsyncShiftKey then // back // look for column left for i as integer = column-1 downto 0 if list.ColumnType(i) >= list.TypeEditable then list.EditCell(row, i) Return true end if next // not found, so look in row before row = row - 1 if row >= 0 then for i as integer = list.ColumnCount-1 downto 0 if list.ColumnType(i) >= list.TypeEditable then list.EditCell(row, i) Return true end if next end if else // forward // look for column right for i as integer = column+1 to list.ColumnCount-1 if list.ColumnType(i) >= list.TypeEditable then list.EditCell(row, i) Return true end if next // not found, so look in row below row = row + 1 if row < list.ListCount then for i as integer = 0 to list.ColumnCount-1 if list.ColumnType(i) >= list.TypeEditable then list.EditCell(row, i) Return true end if next end if end if end Select End Function

As you see in the code, we handle tab and shift + tab for moving back and forward. Also we wrap to previous/next row if needed. Feel free to extend this to wrap from last to first row or create a new row for editing.

MBS Xojo / Real Studio Plugins, version 15.2pr2

Monday 08 June 2015 at 8:20 pm
New in this prerelease of the 15.2 plugins:
  • Updated DynaPDF to version
  • Added UseInternalSQLiteLibraryMBS function to use internal SQLite library.
  • Added NSTableControlMBS to be the dedicated control for NSTableViewMBS class.
  • Fixed bug in AVAssetWriterInputPixelBufferAdaptorMBS.appendPicture with wrong pixel row alignment in some cases.
  • Added ChromiumCookieMBS and ChromiumCookieManagerMBS classes for using with WebKit on Windows.
Download: macsw.de/plugin/Prerelease . Or ask us to be added to our shared Dropbox folder.

SQL Plugin option to include SQLite Library

Monday 08 June 2015 at 12:07 pm
As you may know our MBS SQL Plugin can talk to various databases, but requires you to bring your own copy of the client libraries for the database or use the one installed on the target operation system.

Now for SQLite we add an option to use a copy of the library provided by MBS and linked into your application.
Our plugin gets a new module called InternalSQLiteLibraryMBS. It offers a few methods to query version details and configuration options, so you can check at runtime what version the plugin offers.

If you call the Use function there, the plugin will install itself to be the SQLite provider for SQL Plugin.
Due to this improvement, all our Sqlite example projects now use the internal version. Mac OS X 10.10.3 comes with SQLite 3.8.5, but our plugin with Coming later today in 15.2pr2.

PS: If you need an option to be set for SQLite, please contact us, so we can make sure all the features you need are enabled.

Microsoft Access?

Saturday 06 June 2015 at 12:55 am
Does MBS Plugin allow to connect to a Microsoft Access database?

Yes, it does.
Use our SQL functions to connect to the database via ODBC on Windows. The Connection string looks like this: "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Users\Christian\Desktop\test.mdb". As you see we specify to use the Microsoft Access driver and include the file path to the database file. You can include an user name and a password if needed.

Once connected you can use SELECT SQL command to query tables for values. You can run DELETE, INSERT or UPDATE commands to modify data.

Works in Real Studio, FileMaker and Xojo in my testing here with 32-bit Windows.

Xojo Meeting in Berlin

Friday 05 June 2015 at 4:18 pm
The Xojo meeting in Berlin was a success. We had over 10 people there and shot in-between a picture:

Beside the fact that at 7pm we where only two, later that evening more people arrived and we talked about a lot of xojo related topics including iOS and 64-bit support, sales over app store vs. direct, use of web target and of course various controls on desktop.
And finally we had a raffle of a Xojo Developer Magazine year book!

Cookies for Chromium in HTMLViewer on Windows

Thursday 04 June 2015 at 5:07 pm
Due a request of one of our clients, we added two new classes for upcoming plugin prerelease:


So if you have an application using HTMLViewer on Windows with WebKit as renderer, you may notice that Xojo does not support persistent storage of cookies. To help here with the plugin we added the cookie manager class. You can use it to query, delete or add cookies. As some functions run on another thread, we need some synchronization and for that reason we got batch functions to set or delete a lot of cookies more efficient.

This way you can on quitting the application store important cookies for websites you need to stay logged in to a SQLite database and later restore them when application loads again.

PS: Available soon in the next prerelease. If you like to try today, email me.

Xojo Developer Meeting in Berlin Germany

Wednesday 03 June 2015 at 9:09 pm
As I am in Berlin currently, I also organize a Xojo meeting here.

Join us in Berlin, 4th June 2015. If you are not on the list already, please contact me, so we have enough seats.

Café Intimes, Boxhagener Str. 107, between U Frankfurter Tor and Samariterstr.
7 pm, but you can of course be there earlier or later.

There is a lot to tell about the recent XDC conference, upcoming 64-bit support, plugins and future Xojo releases.

MBS Xojo / Real Studio Plugins, version 15.2pr1

Monday 01 June 2015 at 6:22 pm
New in this prerelease of the 15.2 plugins:
  • Fixed bug in CURLSMultiMBS class which released CURL object too often.
  • Fixed bug in NotificationMBS. (broken in 15.1)
  • Added App.ArgumentsMBS to get app command line parameters cross platform.
  • Fixed a memory leak in zxingBinaryBitmapMBS class creating picture objects.
  • Added JPEGImporterMBS.HeadersRead event.
  • Added NSWindowMBS methods for auto saving window frame.
  • Fixed bug with setDataSymbol method in ChartDirector with passing picture.
  • Changed GZipFileMBS to raise exception if memory allocation fails.
  • Updated DynaPDF to version
  • Added new modes for JPEGImporterMBS: ModeAuto and ModeAutoByRow to pick mode depending on colorspace.
  • Added NSURLMBS class.
  • Added NSMenuItemMBS.separatorItem function for your convenience.
  • Added Constructors to NSMenuMBS and NSMenuItemMBS taking handles for objects.
  • Changed NSMenuItemMBS to have a working constructor, so you don'T need to call CreateMenuItem.
  • Fixed NSMenuMBS so events run always and not if you have something in EnableMenuItems event.
  • Fixed bug in JPEGImporterMBS class. Did free PictureData Memoryblock in FinishJPEG method. Unless you had your own reference, the data was lost.
  • Marked several obsolete functions in DynaPDFMBS as deprecated.
  • Added LastError and LastErrorMessage to WindowsAddPrintJobMBS class.
  • Updated libXL to version 3.6.2.
Download: macsw.de/plugin/Prerelease . Or ask us to be added to our shared Dropbox folder.


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