A Startup Weekend competition was held in Southern California where teams competed to build a startup in 54 hours. I participated on one of the teams and built this app prototype using Delphi FireMonkey. Our team won first place in the competition. We had about 21 actual hours to work on the project (read more about it here). Some other teams were using XCode and the time savings that Delphi provided was real. Time was limited so I built all of the screens (20+) in a graphics program and then exported them to PNG files. I based the look and feel of the app on the Emerald Crystal FireMonkey premium style because I knew I would be able to quickly transition from a prototype to a real app using the style. The app runs on Android, IOS, OSX, and Windows with a single codebase and single UI. For the competition we only deployed the app to Android and Windows. I used a TTabControl with one screen in a TImage on each TTabItem. It is a prototype so I just used a TRectangle that is set to transparent above each button to catch the clicks and navigate through the screens. Here is the code from each transparent button:

// // procedure TForm1.Rectangle10Click(Sender: TObject); begin TB.SetActiveTabWithTransition(AllergiesTab,TTabTransition.Slide); end; 1 2 3 4 5 6 // // procedure TForm1 . Rectangle10Click ( Sender : TObject ) ; begin TB . SetActiveTabWithTransition ( AllergiesTab , TTabTransition . Slide ) ; end ;

What was interesting about the build is that I thought it would work across screen sizes but I should have used a TScaledLayout to handle the changing button sizes. Instead I found that my buttons didn’t line up with the image buttons between a Phone and a Tablet screen size (so I ended up making 1 app for each size because of the time limit). If I had used TScaledLayout I think it would have handled the two screen sizes correctly. The other functionality I built into the prototype was making a phone call within the app. One of the screens allows a medical professional to contact a patient and that code was simple in Delphi so I included it. Here is that code (requires FMX.Platform and FMX.PhoneDialer in the uses clause):

// // procedure TForm1.Rectangle40Click(Sender: TObject); var PhoneDialerService: IFMXPhoneDialerService; begin { test whether the PhoneDialer services are supported } if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then begin { if the Telephone Number is entered in the edit box then make the call, else display an error message } PhoneDialerService.Call('1234567890'); end; end; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // // procedure TForm1 . Rectangle40Click ( Sender : TObject ) ; var PhoneDialerService : IFMXPhoneDialerService ; begin { test whether the PhoneDialer services are supported } if TPlatformServices . Current . SupportsPlatformService ( IFMXPhoneDialerService , IInterface ( PhoneDialerService ) ) then begin { if the Telephone Number is entered in the edit box then make the call , else display an error message } PhoneDialerService . Call ( '1234567890' ) ; end ; end ;

Some other functionality which the solution needs but I wasn’t able to include due to the time limit was QR code scanning. QR code scanning is really simple in Delphi as there are a number of third party components available to drop in and go. One such library for that is the OBR library from Winsoft. Another functionality of the enterprise solution in the project was a QR code printer and there is also a third party solution from Winsoft for that as well.

Check out the full source code for the prototype built in Delphi FireMonkey for Windows and Android.

A full run down of the capabilities behind the enterprise prototype is available in the video below.