Improve Android and iOS debug compilation speed – grijjy blog – Set the Debug information option to Limited Debug information

If you develop mobile apps with Delphi, you know it: compiling for Android and iOS is sloooooooooooooow, especially for debug builds. This little tip makes compiling Debug builds much faster…… Set the Debug information option to Limited Debug information When I read a thing like that, I always think “how come I never thought about that before?” Well done Erik! [WayBack] Improve Android and iOS debug compilation speed – grijjy blog via: [WayBack] Here’s a quick tip to improve the compilation speed of debug builds for iOS and Android… – Erik van Bilsen – Google+ –jeroen
Read More

BEAM is Embarcadero’s March Cool App Winner

Woll2Woll’s BEAM (Beacon External Advanced Mapper) is the missing feature for RAD Server’s BeaconFence technology and the March 2018 Winner of our Cool App contest. With RAD Server and BeaconFence it is easy to create an application that accurately tracks indoor location. Using the IDE map layout editor you place beacons on your floor plan, and then your app can accurately track its location through the map.

                                                                       

That is where Woll2Woll’s BEAM technology comes in. It makes it easy to let your end users edit and create their own maps for use with your BeaconFence app. This flexibility makes your apps so much more flexible and powerful. You can build your app around BeaconFence without concern about the specifics of the location where it will be used. Then with BEAM it can be updated to based on beacon placement and the floor plan.

Beyond BeaconFence and FireMonkey BEAM also makes use of Woll2Woll’s amazing FirePower components to round out its user interface. According to Roy Wall of Woll2Woll software, “BEAM uses RAD Studio’s FireMonkey so it is a universal application that shines in both usability and performance . . . with a common codebase it is trivial to add advanced features with a single development team.” The great thing is BEAM is available on iOS, macOS, Windows, and Android, supporting touch input as well as keyboard and mouse. It is in all the major App stores.

 

  

 

BEAM was developed by Roy Woll of Woll2Woll software. You can find more information on Woll2Woll’s website and while you are there check out some of Woll2Woll’s other great products like FirePower.

Watch BEAM in action:

[YoutubeButton url=’https://youtu.be/1C5VLJ3EIm8′]

 

Interested in submitting for the Embarcadero’s Cool App contest? It’s open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel. For more information on the contest and a link to the submission form, click here.

Read More

Read More

Disable the Delphi clipboard history; originally by Attila Kovacs at https://plus.google.com/u/0/108426155215159556558/posts/6MBZuMYDTCD

[WayBack] Castalia had a Clipboard History for Delphi since a long time and since the acquisition of it around Delphi XE8, that was [Archive.is] integrated into the IDE for everyone to use as the [WayBack] “Delphi Clipboard History” Some people object to the history viewer, for instance: stability reasons security issues Even though used by a […] … Read More

Read More

2018 ADUG Symposium

2018 Symposium Event Update The Australian Delphi Users Group are hosting the 2018 ADUG Symposium in May Perth – Wednesday 23rd May 2018 Melbourne – Friday 25th May 2018 Click here for Full Details and Registration Presentations Herman Schoenfeld – Sphere 10 Software PascalCoin – an Object Pascal based crypto currency Dave Nottage – Hard Won Battle Scars from Mobile App Development Peter Thönell – OO in Delphi From the ground up.… Continue reading ›
Read More

Upgrade SKU Extended to April 30th

Hello Embarcadero Developer Community!  As you all may know, we made a business decision to "end of life" our Upgrade SKU's on March 31st in an effort to simplify the purchasing process.  The demand to extend this was frankly unexpectedly high.  We listened and decided to extend the Upgrade SKU availability through April 30th.  You do not have to rush and can enjoy the entire Holiday weekend.  We know that with 10.2.3 out, and FMX now part of PRO, many will rush anyway. I personally can't wait to get many, many more Cool Apps...   It is a good time to be a Delphi developer!
Read More

Two Small RAD Studio 10.2.3 Patches

Embarcadero has releases a couple of small and focused patches for the recent RAD Studio, Delphi, and C++Builder 10.2.3 update. The first is an Android Push Notification Patch available as https://cc.embarcadero.com/item/30831. This patch resolves an issue with push notifications on Android due to missing jar files. It fixes the publicly reported issue RSP-20137. The second is fix for RAD Studio 10.2.3 RAD Server (EMS) Package Wizard Patch (and as such it is applicable only to Enterprise customers), available at https://cc.embarcadero.com/item/30832. In 10.2.2 a new RAD Server (EMS) project didn't have support for the Linux and the Win64 platforms by default. While adding it, the new wizard in 10.2.3 automatically adds the Linux target platform to both Delphi and C++Builder projects, even when not installed or not supported (C++Builder), and this causes the IDE to crash when using the wizard. In this case the readme has an incorrect reference to the issue addressed, as it lists the earlier bug resolved in 10.2.3, not the follow up problem addressed by the patch.
Read More

Database and FireDAC Enhancements in RAD Studio 10.2.3

I already blogged about RAD Server changes and RTL fixes in the Delphi, C++ Builder and RAD Studio 10.2.3 update. Another area that has received attention is the database support in general, and FireDAC in particular. Below is a list with some of the most notable improvements, with the Quality Portal entry, if available. FireDAC Improvements FireDAC work was mostly focused at better handling of corner case scenarios, like the management of Null vs. Empty values for ftMemo fields (RSP-19938), a reduction of CPU consumption for idle applications (RSP-19881), a query OpenOrExecute method updating RowsAffected (RSP-19385), better Login Dialog scaling for HiDPI (RSP-16776). The dev team also addressed specific database issues including an issue with Oracle queries with parameters over 1000 characters long (RSP-20057), some general issues in identifying parameters (RSP-19744), issues on DirectExecute with PostreSQL (RSP-19701), a MongoDB access from a Linux Apache Module (RSP-19908), and a MySQL "Data too large for variable" exception on certain string params. A set of improvements relate with FireDAC's BatchMove architecture, including TFDBatchMoveSQLWriter support of NULL value (RSP-19746), OnWriteValue with text BLOBs (RSP-19733) and TFDBatchMoveDataSetWriter with the same data type (RSP-19732), but also RSP-19660 for dmAppendUpdate, reading CVS files on Android and iOS (RSP-19637) DataSnap Fixes Contrary to rumors, we are still actively involved in fixing issues in DataSnap and cleaning up some of the related infrastructure. This release adds the ability for a Datasnap server method on Apache to takes a TJSONObject parameter even if the method name does not start with "update", addresses memory leaks in WebModule.Response.SendResponse (RSP-20063), lack of OnError event on TDSServer (RSP-19661), C++ DataSnap wizard issues (RSP-19444), proxy server problems (RSP-18760), resolved a memory leak in TCP Datasnap server when OnCreateInstance and OnDestroyInstance event are handled and some more. ReFind Update This is a search replace tool helping in code migration, we fixed issues with {$IF CompilerVersion} claused (RSP-20025). The tools is available in our binaries and scripts are in the database section of the demos folder. Conclusion This is all for the database side of things in 10.2.3. Not a lot of feature work, but some good quality improvements, along with the feature work on RAD Server.
Read More

WhereontheMap Honored as Embarcadero Cool App for February

If you’re a parent like I am, you understand the feeling of comfort in knowing where your children are at all times and that they are safe. Modern smartphone technologies have provided parents, spouses and others to track the whereabouts of loved ones, but our Cool App for February, WhereontheMap, has taken that capability to the next level.

WhereontheMap — based on Delphi — is a simple, intuitive Android app that helps you keep an eye on your kids or helps companies support their fleet management systems. One of the cool things the developers of this app did was to use a mix of techniques to reduce power consumption so it doesn’t drain your phone battery like so many apps that run in the background. They utilize the accelerometers sensor which uses the least amount of current to detect motion of the device, and only when it detects motion the app turns on the more accurate localization sensor.

WhereontheMap is a great example of how you can combine some of the turn-key features of Delphi to create a useful app. Click here to download the app on Google Play.

 

                             

This video shows Whereonthemap in action:

[YoutubeButton url=’https://www.youtube.com/watch?v=UM0xjZ7dfeg’]

Interested in submitting for the Embarcadero’s Cool App contest? It’s open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel. For more information on the contest and a link to the submission form, click here.

Read More

Read More

TMS RADical WEB, custom controls using HTML elements

In a previous blog, it was demonstrated how custom controls for TMS WEB Core could be created using the FNC framework and how easy it was to use FNC code that was written for VCL, FMX or LCL applications also for web applications.
In this article, we want to cover custom controls from an entirely different angle. That means custom controls that are built from a hierarchy of HTML elements. The example via which we want to explain building such custom controls is about a commonly used UI concept in web development, i.e. a login panel. This is where the user enters his username & password to authenticate. So, in this article, we’ll show the details how to make a TMS WEB Core custom UI control that represents such reusable login panel.

In terms of HTML, the login panel consists of an outer DIV element. In this DIV, we put different DIV elements to hold label text to indicate where the username HTML INPUT element is and where the password HTML input element is. Finally, there is a HTML BUTTON used to confirm the actual entry and do a login.

From a TMS WEB Core custom control perspective, this means we will create a Pascal class descending from TCustomControl and we’ll override the CreateElement virtual method. This CreateElement virtual method is what is responsible for returning the hierarchy of HTML elements representing the UI control. In this case, the code for CreateElement is:

function TLoginPanel.CreateElement: TJSElement;
var
  br: TJSElement;
begin
  Result := document.createElement('SPAN');
  FCaption := TJSHTMLElement(document.createElement('DIV'));
  FUserInput := TJSHTMLElement(document.createElement('INPUT'));
  FPasswordInput := TJSHTMLElement(document.createElement('INPUT'));
  FPasswordInput.setAttribute('type','password');
  FUserLabelSpan := TJSHTMLElement(document.createElement('DIV'));
  FPasswordLabelSpan := TJSHTMLElement(document.createElement('DIV'));
  Result.appendChild(FCaption);
  Result.appendChild(FUserLabelSpan);
  Result.appendChild(FUserInput);
  Result.appendChild(FPasswordLabelSpan);
  Result.appendChild(FPasswordInput);
  br := document.createElement('BR');
  Result.appendChild(br);
  FButton := TJSHTMLElement(document.createElement('BUTTON'));
  Result.appendChild(FButton);
  FButton.addEventListener('click', @HandleLoginClick);
end;

Here FCaption, FUserLabelSpan, FUserInput, FPasswordLabelSpan, FPasswordInput and FButton are Pascal references to the HTML elements SPAN, INPUT and BUTTON used in the control.
You can see that the HTML elements are created with document.createElement(). This is almost as if one would do this in Javascript, but via the Pascal to Javascript compiler, you can see the DOM object document can be used as Pascal object.

One more note about the CreateElement method, you can see that the purpose of the last line in the method:
FButton.addEventListener(‘click’, @HandleLoginClick);
is to attach a TLoginPanel method HandleLoginClick to the HTML element ‘onclick’ event handler.
The HandleLoginClick method is declared as

function HandleLoginClick(Event: TJSMouseEvent): Boolean; virtual;

To see how this HTML element event handler is eventually hooked up to trigger the TLoginPanel.OnLogin event, see this code snippet from the TLoginPanel class:

TLoginPanel = class(TCustomControl)
private
    FOnLogin: TNotifyEvent;
    function HandleLoginClick(Event: TJSMouseEvent): Boolean; virtual;
protected
   procedure DoLogin; virtual;
published
    property OnLogin: TNotifyEvent read FOnLogin write FOnLogin;
end;

function TLoginPanel.HandleLoginClick(Event: TJSMouseEvent): Boolean;
begin
  DoLogin;
end;
procedure TLoginPanel.DoLogin;
begin
  if Assigned(OnLogin) then
    OnLogin(Self);
end;

To interface our Pascal class with the HTML elements two more virtual method overrides are important. There is the UpdateElementVisual method and the UpdateElementData method. The purpose of the UpdateElementVisual method is to do changes to HTML element properties that affect the UI control visually. The UpdateElementData method is to do changes with respect to data contained in the HTML elements.
For this TLoginPanel control, we expose a few properties to set captions for labels in the UI control as well as the values of the HTML INPUT elements for username and password.

The properties of the TLoginPanel used for the login panel data are:

TLoginPanel = class(TCustomControl)
published
    property CaptionLabel: string read FCaptionLabel write SetCaptionLabel;
    property LoginLabel: string read FLoginLabel write FLoginLabel;
    property Password: string read GetPassword write SetPassword;
    property PasswordLabel: string read FPasswordLabel write SetPasswordLabel;
    property User: string read GetUser write SetUser;
    property UserLabel: string read FUserLabel write SetUserLabel;
end;

The UpdateElementData method is:

procedure TLoginPanel.UpdateElementData;
begin
  inherited;
  FUserLabelSpan.innerHTML := FUserLabel;
  FPasswordLabelSpan.innerHTML := FPasswordLabel;
  FButton.innerHTML := FLoginLabel;
  FCaption.innerHTML := FCaptionLabel;
  (FUserInput as TJSHTMLInputElement).value := FUser;
  (FPasswordInput as TJSHTMLInputElement).value := FPassword;
end;

To customize the look and feel of the login panel, there is a dual approach. The first and classic Pascal like approach is the basic properties are defined to set the background & border color of the panel and the padding and margin of the controls within the panel. The second approach is that the CSS class can be set for the HTML elements used and that also via CSS full customization of look and feel is possible. This leaves the choice to either stick to classical Delphi style RAD development and do all from the form designer or work with separate CSS and perhaps leave the styling to a graphic designer instead of letting the developer do everything.

The visual properties exposed for the TLoginPanel class are:

TLoginPanel = class(TCustomControl)
published
    property BorderColor: TColor read FBorderColor write SetBorderColor;
    property Color: TColor read FColor write SetColor;
    property ElementClassName: string read FElementClassName write SetElementClassName;
    property ElementCaptionClassName: string read FElementCaptionClassName write SetElementCaptionClassName;
    property ElementInputClassName: string read FElementInputClassName write SetElementInputClassName;
    property ElementButtonClassName: string read FElementButtonClassName write SetElementButtonClassName;
    property ElementLabelClassName: string read FElementLabelClassName write SetElementLabelClassName;
    property Margin: integer read FMargin write SetMargin;
    property Padding: integer read FPadding write SetPadding;
end;

The Element*ClassName properties allow to set CSS class names for the control itself (outer DIV), the SPAN elements for the labels associated with the INPUT elements and of course of also for the HTML INPUT and BUTTON elements.

The UpdateElementVisual override becomes:
procedure TLoginPanel.UpdateElementVisual;
var
  strpadding,strmargin: string;
begin
  inherited;
  if Assigned(ElementHandle) then
  begin
    strpadding := IntToStr(Padding)+'px';
    strmargin := IntToStr(Margin)+'px';
    ElementHandle.setAttribute('class',ElementClassName);
    if (ElementClassName = '') then
    begin
      ElementHandle.style.setProperty('background-Color',ColorToHTML(Color));
      ElementHandle.style.setProperty('border', 'solid 1px '+ColorToHTML(BorderColor));
      ElementHandle.style.setProperty('padding',strPadding);
    end;
    ElementHandle.style.setProperty('display','table');
    FCaption.setAttribute('class',ElementCaptionClassName);
    if (ElementCaptionClassName = '') then
    begin
      FCaption.style.setProperty('margin-top',strMargin);
      FCaption.style.setProperty('margin-bottom',strMargin);
      FCaption.style.setProperty('font-weight','bold');
    end;
    FUserInput.setAttribute('class',ElementInputClassName);
    FPasswordInput.setAttribute('class',ElementInputClassName);
    if (ElementInputClassName = '') then
    begin
      FUserInput.style.setProperty('margin-top',strMargin);
      FUserInput.style.setProperty('margin-bottom',strMargin);
      FPasswordInput.style.setProperty('margin-top',strMargin);
      FPasswordInput.style.setProperty('margin-bottom',strMargin);
    end;
    FUserInput.style.setProperty('width','100%');
    FUserInput.style.setProperty('display','table-cell');
    FPasswordInput.style.setProperty('width','100%');
    FPasswordInput.style.setProperty('display','table-cell');
    FUserLabelSpan.setAttribute('class',ElementLabelClassName);
    FPasswordLabelSpan.setAttribute('class',ElementLabelClassName);
    if (ElementLabelClassName = '') then
    begin
      FUserLabelSpan.style.setProperty('margin-top',strMargin);
      FUserLabelSpan.style.setProperty('margin-bottom',strMargin);
      FPasswordLabelSpan.style.setProperty('margin-top',strMargin);
      FPasswordLabelSpan.style.setProperty('margin-bottom',strMargin);
    end;
    FButton.setAttribute('class',ElementButtonClassName);
    if (ElementButtonClassname = '') then
    begin
      FButton.style.setProperty('margin-top',strMargin);
      FButton.style.setProperty('margin-bottom',strMargin);
    end;
    FButton.style.setProperty('float','right');
  end;
end;

Notice how the properties are set when no CSS class is specified for HTML elements or otherwise the look and feel will be determined by the CSS.

The result becomes:

This is the basic look and feel without CSS.

Now, let’s bring bootstrap CSS and some custom CSS in the game and see the new look and feel.

Bootstrap is introduced with adding

<link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>

to the project HTML file and in addition we add CSS in the project HTML file <STYLE> section to control the LoginPanel look & feel:

<style>
    .labelcenter {
      text-align: center;
    }
    .loginpanel {
      padding: 15px;
    }
    .loginpanelelement {
      margin-top: 2px;
      margin-bottom: 2px;
    }
</style>

Now the appearance of the panel becomes:

We have only scratched the surface here of the many possibilities to enrich the TMS WEB Core framework with custom UI controls but we hope we have generated interest and enthusiasm.

Get started today: Technical previews of TMS WEB Core, TMS FNC UI web-enabled controls, web-enabled TMS XData, the first parts under the TMS RADical WEB umbrella are exclusively available now for all active TMS-ALL-ACCESS customers.

Read More

Read More

Speaking in London About Delphi Tokyo on Thursday, March 15th

Next week I'll be presenting at an event in London organized by our partner Grey Matter. You can find more information and the link to sign up on http://www.greymatter.com/corporate/events/to-delphinity-and-beyond-free-delphi-workshop/  Titled "To Delphinity and Beyond" the event is focused on a general update of where the product is today and where it is heading in the near future. There will be specific focus on what's new in the latest Delphi (including the coming version 10.2.3) a long session focused on Windows 10 support and VCL applications modernization, but also Linux, mobile, parallel library, RAD Server, and more. I'll be around for most of the day, even before and after the event, so feel free to join and have an extra chat, but also ping me over email to reserve some time up front. See you soon.
Read More

TMS RADical WEB, technology preview update

We’ve been overwhelmed by the enthusiasm of many users about the news of TMS WEB Core and also the many reactions, feedback, comments of users who immediately got their hands wet with the technology preview.

From all feedback received combined with our internal planning, we’re pleased to inform that there is now a technology preview update available that brings not only many small improvements but also some exciting new features!

The highlight of the technology preview update is the introduction of the jQWidgets jQxGrid UI control. This control can now be easily used from your Pascal code from a TMS WEB Core application. jQxGrid is a high performance jQuery grid with paging, sorting, grouping, editing & filtering capabilities. It also features different column types.

If you get TMS WEB Core 0.9.2 you can start playing with the new grid right-away or you can explore the grid via the online demo.

Second new big feature is that now data-modules, i.e. the TWebDataModule, are also available. The same easy-to-use centralized place for databinding & business logic that we are used to in Delphi VCL or FMX applications is now also available in TMS WEB Core applications.

Also new is a Twitter feed display component. Showing your personal or company Twitter feed integrated in your web application is now as easy as dropping a component and setting your feed name.

We’ve also made it easier to use cookies and query parameters directly from your Pascal code. Getting or settings cookie values is now very easy. You can use code like:

Cookies.Add(‘CompanyNameCookie’,’tmssoftware’, Now + 5000);
Cookies.Add(‘UserNameCookie’,’Bruno Fierens’, Now + 5000);
Cookies.SetCookies;

And there is more!
The IDE integration was also improved with built-in automatic listing of CSS style classnames or HTML element IDs, so you can pick directly from the Object Inspector what CSS style from your HTML template you want to assign to a control or to what HTML element you want to link a control.

Other than this there are numerous smaller improvements in aligning, splitter, Google Maps geolocation, Google maps route display, …

We’ll keep you posted with more updates as we continue to execute the planning and we look forward to hear all your feedback!

Get started today: Technical previews of TMS WEB Core, TMS FNC UI web-enabled controls, web-enabled TMS XData, the first parts under the TMS RADical WEB umbrella are exclusively available now for all active TMS-ALL-ACCESS customers.

Read More

Read More

Packet Sender is a good tool when debugging protocols: free utility to send & receive network packets. TCP, UDP, SSL

It was fitting to bump into [WayBack] Packet Sender is a good tool when debugging protocols…” Written by Dan Nagle… – Lars Fosdal – Google+ on the day presenting [WayBack] Conferences/Network-Protocol-Security.rst at master · jpluimers/Conferences · GitHub It also means that libssh2-delphi is getting a bit more love soon and will move to github as well after a conversion from mercurial. Some of the things I learned or got confirmed teaching the session (I love learning by teaching): If you manage many domains, which might be troublesome to the default “certbot client”, so you might want to look into different [WayBack] ACME Client Implementations – Let’s Encrypt – Free SSL/TLS Certificates Automate the heck out of your job and new work finds you There is great integration for [WayBack] Bot Users | Slack which can hugely help you in status monitoring Here is some more info: Blurb: “[a] free utility to send & receive network packets. TCP, UDP, SSL.” [WayBack] Packet Sender – Free utility to for sending / receiving of network packets. TCP, UDP, SSL. [WayBack] The latest Tweets from Dan Nagle (@NagleCode). Principal SW Engineer @HARMAN_Pro. Speaker. Author packetsender.com, paydowncalc.com, cryptoknife.com, github.com/dannagle . Huntsville, AL, [WayBack] Packet Sender – Send / Receive TCP / UDP – Android Apps on Google Play [WayBack] dannagle (Dan Nagle) · GitHub dannagle has 23 repositories available. Follow their code on GitHub. –jeroen Tweets by NagleCode    
Read More