Making Sure Your App Doesn’t Leak like a Sieve

If you have been following the Delphi Roadmap, you know that a Unified Memory model across all supported platforms is coming.  That memory model is Delphi’s standard ownership model coupled with optional interface refcounting.  IOW, it’s completely up to the developer to ensure proper memory management just as it has always been.  Once this is the case, memory management, especially on memory “constrained” mobile devices will be very important. FastMM4 provides memory leak reporting on shutdown, and since everyone has 80% or better unit test coverage using this feature, they probably don’t need have another tool in their toolbox ;-).  Just in case you don’t I would consider adding DeLeaker to your toolbox.  It does far more than just check for memory leaks, and it does so at run-time! DeLeaker comes as both an external EXE and a very similar UI integrated into RAD Studio under it’s own menu.  The documentation is well written and tutorials are available to get you up to speed quickly. One of the things I like most about DeLeaker is the ability for it to monitor resource consumption live.  As you use the application you can see the memory utilization and spot potential leaks as memory consumption grows, confirm them using DeLeaker’s detection and go to the relevant code with a double click. It also supports taking snapshots as the application runs, and comparing them.  Did I mention it monitors not only memory, but also GDI, handles and other resources? You might think I have AQTime included with Delphi, and I would ask where?  It hasn’t been provided with Delphi for a number of releases.  I have used AQTime and it’s a great product, but I recently discovered that the standard edition doesn’t even support 64 bit EXEs.  Smartbear seems more focused on it’s new web product portfolio so perhaps choosing a smaller vendor committed to supporting RAD Studio customers would be prudent.  At $599 USD for AQTime Pro compared with $399 USD for Deleaker it’s a good value equation if you don’t need the additional features of AQTime Pro. I have numerous tools in my toolbox, and I am always looking for new or better ones.  I am now adding DeLeaker to the list.
Read More

Unicode Finder – クールアプリセレクション

今日のクールアプリセレクションは、SAGT3KのUnicode Finderです。その名前が示すように、Unicode Finderは、Unicodeデータベースから、テキスト設定で使用する文字、記号、絵文字を検索します。このツールは、RAD StudioのDelphiおよびマルチデバイスフレームワークのFireMonkeyを使って開発されています。(read more)
Read More

Books about TMS tools

Get in-depth product knowledge and learn how to get more productive at writing better software!
Now that we are at home, we should make the most of our free time! Here is a list of educational books about TMS components.

  1. Introducing Delphi ORM: Object Relational Mapping Using TMS Aurelius

    John Kouraklis has written yet another great book about Delphi: Introducing Delphi ORM: Object Relational Mapping Using TMS Aurelius.

    It’s good news that more and more learning material about TMS Aurelius is being made available to the community.

    With this book you will learn:

    • Gain the fundamentals of ORM frameworks and Aurelius for Delphi
    • Achieve basic tasks, such as connecting to the database and adding, deleting, and updating records, using Aurelius
    • Employ advanced database queries
    • Use the TAureliusDataSet component
    • Integrate with mobile platforms such as Android and iOS
    • Work with the data modeler application
  2. TMS WEB Core: Web Application Development with Delphi

    The content is suitable for both beginners and advanced developers
    interested in creating web applications with TMS WEB Core.

    • Detailed description of the basics, the functionality, and the transpiler
      (based on pas2js)
    • Step-by-step creation of the first web application
    • Progressive Web Applications (PWA) for offline use
    • Electron applications: Cross-platform Desktop applications based on web
      applications
    • Integration of JavaScript classes and controls
    • Creating web services for databases with TMS XData
    • Integration of databases with TDataset controls
    • XData-specific functionality for use in web applications
    • Responsive web design (form designer, HTML, CSS, Bootstrap)
    • The final chapter provides a comprehensive and practical example of server
      and web application with Google Maps and Google Charts

    Knowledge of Delphi (Object Pascal) and the Visual Component Library (VCL)
    is required. To reproduce the numerous examples, you need a current version
    of Delphi and TMS WEB Core. The free Delphi Community Edition is sufficient
    as well as the trial version of TMS WEB Core.

  3. TMS WEB Core: Webanwendungen mit Delphi entwickeln (German Edition)

    Vorausgesetzt werden Kenntnisse in Delphi (Object Pascal) und der Visuellen Komponenten Bibliothek (VCL). Zum Reproduzieren der zahlreichen Beispiele benötigen Sie eine aktuelle Version von Delphi und TMS WEB Core. Die kostenfreie Delphi Community-Edition ist ausreichend sowie die Testversion von TMS WEB Core.

    Die Inhalte:

    • Ausführliche Beschreibung der Grundlagen, der Funktionsweise und des Transpilers (basierend auf pas2js)
    • Schrittweise Erstellung der ersten Webanwendung
    • Progressive Web Applications (PWA) zur Offline-Nutzung
    • Electron Anwendungen: Plattformübergreifende Desktopanwendungen basierend auf Webanwendungen
    • Einbinden von JavaScript und JavaScript-Komponenten
    • Erstellen von Webservices für Datenbanken mit TMS XData
    • Einbinden von Datenbanken mit TDataset-Komponenten
    • XData-spezifische Funktionalität bei der Nutzung in Webanwendungen
    • Responsives Webdesign (Formulardesigner, HTML, CSS, Bootstrap)
    • Abschließendes Kapitel mit umfassendem und praxisnahem Beispiel mit
      Server- und Webanwendung mit Google Maps und Google Charts

What’s next:

If this crisis allows us, our next planned book will also be TMS WEB Core related!
In addition, we also listen to you! Indicate in the comments section below, what the subject of our next book should be!

Hopefully we meet in a Delphi meeting/ conference very soon! Till then stay connected with use via email, forum, blogs and of course our social media!

Stay safe and healthy!

Read More

Read More

CamSextant – クールアプリセレクション

今日のクールアプリセレクションは、Omar Reis氏のCamSextantです。CamSextantは、リアルタイムで天体識別と追跡を可能にするアプリケーションです。クールアプリセレクションで、拡張現実アプリケーションを採り上げるのは初めてのことで、とてもワクワクしますね。CamSextantは、Delphiとマルチデバイス開発に対応しているFireMonkeyによって作られています。(read more)
Read More

When times are hard, tmssoftware makes developing easy

First of all we still hope everyone is well and safe in these uncertain times.


We at tmssoftware are doing the best we can to give you our best support and new features while we are all working from home. As Billy Ocean sang so wisely: “When the going gets tough, the tough get going”. And we keep going, we have a new product TMS FNC Maps.
Today I will show you an example of what you can create with some teamwork between TMS FNC Cloud Pack and TMS FNC Maps. TMS FNC Maps is already available for you as a BETA, if you are an active ALL-ACCESS user.

In case you don’t have an ALL-ACCESS subscription, we’ve created a similar web demo on which you can have an initial look.

Our new product: TMS FNC Maps

Experience the power of dynamically switching between various mapping services with this out of the box, worry free experience that provides mapping, directions and geocoding in one big library that works on 4 frameworks and a lot more operating systems.
In case you’ve missed our announcement, you can find that blogpost here/.

TMS FNC Cloud Pack

TMS FNC Cloud Pack contains components that offer integration with several cloud services.
With one source code base to use on multiple frameworks (FMX, VCL, WEB and LCL), this is the best cross-framework option to use your most used REST based services. In case your specific service isn’t implemented in the available components, you can easily create your own REST service client components built on top of the TMS FNC Cloud Pack Core.

Easy to develop with

To stay informed is one of the most important things right now, so we wanted to give you a useful project. We will wrap an API, that was built by developer Kyle Redelinghuys, which works with the COVID-19 information sourced from Johns Hopkins CSSE. We combine this with TMS FNC Maps to retrieve the geo location from the countries and draw a circle with a radius in relation to the unfortunate deaths in that country. (Note: This image is from the seventh of April.)

API Wrapper

To start, we will create our own class so we can personalize the object to our preferences.
We start from the TTMSFNCSimpleCloudOAuth class and we add a TObjectList Countries that will contain the data for each country.

TTMSFNCCovidAPI = class(TTMSFNCSimpleCloudOAuth)
  private
    FCountries: TTMSFNCCloudCovidCountries;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Countries: TTMSFNCCloudCovidCountries read FCountries;
  end;

We will use the GET Summary call to retrieve the data from all the countries.
In the API documentation we can see that we need to send the request to: ‘https://api.covid19api.com/summary’. So we will create our API object and make the call.

  covid := TTMSFNCCovidAPI.Create(Self);
  covid.Request.Host := 'https://api.covid19api.com';
  covid.Request.Path := '/summary';
  covid.ExecuteRequest( (*the anonymous method will be explained later*));

To make the code a little more workable, we will put the data from the API in a class and have a separate parsing function.
The data that we receive is formatted in the following way:

{
  "Countries": [
    {
      "Country": "Afghanistan",
      "CountrySlug": "afghanistan",
      "NewConfirmed": 2,
      "TotalConfirmed": 24,
      "NewDeaths": 0,
      "TotalDeaths": 0,
      "NewRecovered": 0,
      "TotalRecovered": 1
    },
    {
      "Country": "Albania",
      "CountrySlug": "albania",
      "NewConfirmed": 6,
      "TotalConfirmed": 70,
      "NewDeaths": 0,
      "TotalDeaths": 2,
      "NewRecovered": 0,
      "TotalRecovered": 0
    }
  ]
}

So this is what our class will look like:

TTMSFNCCloudCovidCountry = class
  private
    FCovidAPI: TTMSFNCCovidAPI;
    FTotalConfirmed: integer;
    FNewConfirmed: integer;
    FSlug: string;
    FTotalDeaths: integer;
    FNewDeaths: integer;
    FCountry: string;
    FTotalRecovered: integer;
    FNewRecovered: integer;
    FCoordinate: TTMSFNCMapsCoordinateRec;
  public
    constructor CreateCountry(ACovidAPI: TTMSFNCCovidAPI);
    destructor Destroy; override;
    property Country: string read FCountry;
    property Slug: string read FSlug;
    property NewConfirmed: integer read FNewConfirmed;
    property TotalConfirmed: integer read FTotalConfirmed;
    property NewDeaths: integer read FNewDeaths;
    property TotalDeaths: integer read FTotalDeaths;
    property NewRecovered: integer read FNewRecovered;
    property TotalRecovered: integer read FTotalRecovered;
    property Coordinate: TTMSFNCMapsCoordinateRec read FCoordinate;
  end;

  {$IFDEF WEBLIB}
  TTMSFNCCloudCovidCountries = class(TObjectList)
  private
    function GetItem(Index: Integer): TTMSFNCCloudCovidCountry;
    procedure SetItem(Index: Integer; const Value: TTMSFNCCloudCovidCountry);
  public
    property Items[Index: Integer]: TTMSFNCCloudCovidCountry read GetItem write SetItem; default;
  end;
  {$ELSE}
  TTMSFNCCloudCovidCountries = class(TObjectList<TTMSFNCCloudCovidCountry>);
  {$ENDIF}

As you might notice in the code, we will put these different TTMSFNCCloudCovidCountry items in an TObjectList TTMSFNCCloudCovidCountries . As generics aren’t available yet in TMS WEB Core (but being worked on as we speak), we have a small workaround to use them for our cause.

Another thing that might stand out is TTMSFNCMapsCoordinateRec, we will get to that in the TMS FNC Maps part of the demo, but first we will finish our TTMSFNCCovidAPI.

In previous versions we had to parse all of the data ourselves as shown in the following code.
But with the new features of TMS FNC Core, this isn’t necessary anymore.

procedure TTMSFNCCloudCovidCountry.ParseCountryJSON(AJSON: TJSONValue);
var
  jvv: TJSONValue;
begin
  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'Country');
  if Assigned(jvv) then
    FCountry := Trim(TTMSFNCUtils.GetJSONProp(AJSON, 'Country'));

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'Slug');
  if Assigned(jvv) then
    FSlug := Trim(TTMSFNCUtils.GetJSONProp(AJSON, 'Slug'));

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'NewConfirmed');
  if Assigned(jvv) then
    FNewConfirmed := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'NewConfirmed');

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'TotalConfirmed');
  if Assigned(jvv) then
    FTotalConfirmed := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'TotalConfirmed');

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'NewDeaths');
  if Assigned(jvv) then
    FNewDeaths := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'NewDeaths');

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'TotalDeaths');
  if Assigned(jvv) then
    FTotalDeaths := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'TotalDeaths');

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'NewRecovered');
  if Assigned(jvv) then
    FNewRecovered := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'NewRecovered');

  jvv := TTMSFNCUtils.GetJSONValue(AJSON, 'TotalRecovered');
  if Assigned(jvv) then
    FTotalRecovered := TTMSFNCUtils.GetJSONIntegerValue(AJSON, 'TotalRecovered');
end;

All of the previous code can be replaced with the ToJSON function. Ths is another example of how tmssoftware keeps on making things easier for you.

Now all we need is the rest of our ExecuteRequest and all of the data is handled. The complete function looks like this:

covid.ExecuteRequest(
  procedure(const AResult: TTMSFNCCloudBaseRequestResult)
  var
    I: Integer;
  begin
    o := TTMSFNCUtils.ParseJSON(AResult.ResultString);
    if Assigned(o) then
    begin
      try
        jv := TTMSFNCUtils.GetJSONValue(o, 'Countries');
        if Assigned(jv) then
        begin
          ja := TTMSFNCUtils.GetJSONValue(o, 'Countries') as TJSONArray;

          for I := 0 to TTMSFNCUtils.GetJSONArraySize(ja) - 1 do
          begin
            fo := TTMSFNCUtils.GetJSONArrayItem(ja, i);
            if Assigned(TTMSFNCUtils.GetJSONValue(fo, 'Country')) and (TTMSFNCUtils.GetJSONProp(fo, 'Country')  '') then
            begin
              country := TTMSFNCCloudCovidCountry.CreateCountry(covid);
              
              country.JSON := fo.ToJSON;

              covid.FCountries.Add(country);

              if country.TotalDeaths > 0 then
              begin
                g.GetGeocoding(country.Country,
                procedure(const ARequest: TTMSFNCGeocodingRequest; const ARequestResult: TTMSFNCCloudBaseRequestResult)
                var
                  c: TTMSFNCCloudCovidCountry;
                begin
                  c := TTMSFNCCloudCovidCountry(ARequest.DataPointer);
                  c.FCoordinate := ARequest.Items[0].Coordinate.ToRec;
                end, '', country);
              end;
            end;
          end;
        end;
      finally
        o.Free
      end;
    end;
  end
  );

This might look like a lot, but I will explain the code bit by bit. First of all we define our Anonymous method that will handle the request result, which we parse to JSON.
Then we check if the response has the value ‘Countries’, otherwise something went wrong with our request. As this is an array of all of the different countries, we will go over them one by one. The check to see if the JSON property for Country is different from an empty string is because we noticed that there was an empty object in the response. But if the Country has a name, then we create a new Country object.

We parse the information in the object and add it to the object list.

A first hand on TMSFNCMaps

For the last part we will move over to TMS FNC Maps. ‘g’ is an instance of the type TTMSFNCGeocoding. We create this in the FormCreate and add an event to OnRequestsComplete.
TTMSFNCGeocoding is a component to perform geocoding of an address or reverse geocoding of a coordinate by using an existing REST API service.

g := TTMSFNCGeocoding.Create(Self);
g.OnRequestsComplete := DoRequestsComplete;
g.APIKey := TMSFNCMaps1.APIKey;

We created the TMSFNCMaps control in design-time, where you can also set the API key. Or this can be done in the code with the property TMSFNCMaps1.APIKey.

To get back to the Geocoding in our API response. The call for geocoding is as followed:

TTMSFNCCustomGeocoding.GetGeocoding(AAddress: string; ACallback: TTMSFNCGeocodingGetGeocodingCallBack = nil; AID: string = ”; ADataPointer: Pointer = nil);

AAddress: is the country name which we placed in the string Country.country.
ACallback: is the anonymous method that we use to store the coordinates in c.FCoordinate.
AID: is an empty string as we don’t use it.
ADataPointer: is the country that we just added and that we convert to c.

That is how we retrieve the coordinates for the countries by their name.

Lets add some things to the map as we would like to have a visible indication to show the impact of the virus, therefor we draw circles on the locations and color them.
This is extremely simple in TTMSFNCMaps with the AddCircle method where you just need to give the circle center and the radius.

We do this in the DoRequestsComplete event that is triggered when our geo location is done.

procedure TForm1.DoRequestsComplete(Sender: TObject);
var
  I: Integer;
  cl: TTMSFNCGraphicsColor;
begin
  TMSFNCMaps1.BeginUpdate;
  for I := 0 to covid.Countries.Count - 1 do
  begin
    with TMSFNCMaps1.AddCircle(covid.Countries[I].Coordinate, Max(50000, 25 * covid.Countries[I].TotalDeaths)) do
    begin
      DataPointer := covid.Countries[I];
      cl := gcSeagreen;
      if covid.Countries[I].TotalDeaths > 500 then
        cl := gcOrange;
      if covid.Countries[I].TotalDeaths > 1000 then
        cl := gcRed;

      FillColor := cl;
      Strokecolor := cl;
      FillOpacity := 0.5;
    end;
  end;

  TMSFNCMaps1.EndUpdate;
end;


The last thing we will add in this example are some events of TTMSFNCMaps. To be more precise we will show a pop-up when we hover the circles that will show the total numbers we retrieved from the API.
We do this in the event OnPolyElementMouseEnter.

With the country that was set as datapointer in DoRequestsComplete, we can easily get the different data in the event.

We just call the ShowPopUp method with the location and the text we want to show and as you can see in the example we can use HTML for this as well.

procedure TForm1.TMSFNCMaps1PolyElementMouseEnter(Sender: TObject;
  AEventData: TTMSFNCMapsEventData);
var
  c: TTMSFNCCloudCovidCountry;
begin
  if Assigned(AEventData) then
  begin
    c := AEventData.PolyElement.DataPointer;
    TMSFNCMaps1.ShowPopup((AEventData.PolyElement as TTMSFNCMapsCircle).Center.ToRec,
'
' + c.Country + '

Contaminations: ' + c.TotalConfirmed.ToString + '
Deaths: ' + c.TotalDeaths.ToString + '
Recovered: ' + c.TotalRecovered.ToString + '
', 0, 0); end; end; procedure TForm1.TMSFNCMaps1PolyElementMouseLeave(Sender: TObject; AEventData: TTMSFNCMapsEventData); begin TMSFNCMaps1.CloseAllPopups; end;

And that’s all folks, in less than 250 lines of code, we’ve created a very appealing application that retrieves data from an API and shows different things on a map.

We didn’t use the most valuable feature of TMSFNCMaps, but in case Google Maps is down, we can easily change for another service like Bing, Azure, Here, TomTom, MapBox or OpenLayers to keep the application up-and-running.

This example shows how easy it is to use two very powerful TMS FNC products. And we will go on and try to amaze you with new products and features that are very user-friendly.

Stay safe and remember: “When the going gets rough, the tough get rough”.

Read More

Read More

Never get lost again with TMS FNC Maps!

Intro

After all our experience with TMS FMX/VCL WebGMaps & WebOSMaps, and the latest and greatest technologies we’ve been working on in FNC & WEB, we thought by ourselves what would be the next logical step? We wanted to feel the power of dynamically switching between various mapping services on mobile. We wanted to have access to step-by-step directions in a browser. We wanted to have an out of the box, worry free experience to provide mapping, directions and geocoding in one big library/component set that works on 4 frameworks and a lot more operating systems.

We wanted to create a component where you are not tied to a fixed mapping service provider but make it as easy as changing a property to switch to another provider. When a provider raises prices, reduces functionality or when another provider starts providing better routing, change one property setting in your application and you are up & running with another mapping service provider.

Cross-framework, cross-platform, cross-service

Introducing for the first time ever: TMS FNC Maps! You all know how the saying goes:

“A picture says more than a thousand words”




And as a cherry on the cake, we’ve created a video that shows a quick overview of what TMS FNC Maps has to offer and which features are supported.

Supported services & features

Below is a list of features and services that TMS FNC Maps supports. As said in the video, with these features we aim for 1.0, but 1.0 is just the beginning, and many more features and map services will be added in the future. Please let us know if you have a service or feature of a specific service that you want to see available in TMS FNC Maps.

List of services for mapping, directions and geocoding

  • Google
  • Here
  • Microsoft Azure
  • Microsoft Bing
  • TomTom
  • MapBox
  • OpenLayers

List of features

  • Directions/Routing (TTMSFNCDirections)
  • Options for configuring alternative routes, step by step directions, …
  • Geocoding (normal, reverse) (TTMSFNCGeocoding)
  • Getting current location (TTMSFNCLocation)
  • Maps (TTMSFNCMaps)
    • Polylines
    • Polygons
    • Markers
    • Circles
    • Rectangles
    • Zooming, centering
    • Loading GPX, GeoJSON
    • Various Events
  • Google Maps (TTMSFNCGoogleMaps)
    • Inherits from TTMSFNCMaps
    • Load KML
    • Editing of polylines, polygons, circles and rectangles
    • Dragging of markers
    • Traffic
    • Themes (Night, …)

FNC

Please remember, TMS FNC Maps will be part of the FNC family and FNC is a cross-platform / cross-framework component library. Write your code once and target multiple operating systems!

Breaking changes!

To get the best out of TMS FNC Maps and make all of this work together we’ve introduced breaking changes and moved the TMSFNCCloudBase unit from TMS FNC Cloud Pack to TMS FNC Core. This means that each FNC product will have access to this unit and this allows you to consume your own REST service, download/upload files without the need for TMS FNC Cloud Pack.

Stay tuned!

More is coming in the next days, weeks and we are currently hard at work to make a 1.0 available as a BETA to all TMS ALL-ACCESS users, so stay tuned!, and again, feedback is highly appreciated so don’t hold back!

Read More

Read More

Mariscos – クールアプリセレクション

今日のクールアプリセレクションは、Daniel Rodríguez Hernández氏のMariscosです。Mariscosは、レストラン向け管理ツールで、スタッフとマネージャの双方が、注文、支払い、レシートの管理とトラッキングをサポートします。Delphiによって構築されており、Androidデバイスで利用できます。(read more)
Read More

Work@Home with Slack in the latest TMS FNC Cloud Pack update!

Stay Safe!

First of all, the TMS team wishes you a good health during these difficult times. Not only privately but also for the business you are running / working for. We at TMS are currently working from home and are doing our best to provide you with the highest care at software level and support that we can provide in the current circumstances. Even working at home doesn’t stop us from releasing new and exciting stuff!

Work @Home

With the latest release (v1.2.0.0) of the TMS FNC Cloud Pack we are introducing Slack. One of the most productive collaboration service out there and we have created a component for you that allows you to connect, share, update, upload and download content on the various channels under your work project. Below is a list of features the TTMSFNCCloudSlack component is supporting.

  • Retrieve all the users in your Slack team
  • Retrieve the information and profile for a specific Slack user
  • Download the profile picture of a user
  • Retrieve all conversations in your Slack team or get a specific type as public channels, direct messages, …
  • You can also get all the conversations that a specific user has access to

  • Retrieve the posted messages from a specific conversation
  • Retrieve the replies to a message.
  • Download the files that were posted in a message
  • Post your message in a conversation or a reply to a specific message
  • Upload a file to a specific conversation

TMS FNC Cloud Pack

The TMS FNC Cloud Pack was released in April, 2019 (https://tmssoftware.com/site/blog.asp?post=538), and has gotten a lot of improvements on the existing services. We have now added a new service (TTMSFNCCloudSlack) and are continuing our search for more services. If you have an idea for new services, suggestion for enhancing existing services or missing a service that is not yet implemented, please do not hesitate to ask us.

Please remember, TMS FNC Cloud Pack is part of the FNC family and FNC is a cross-platform / cross-framework component library. Write your code once and target multiple operating systems!

Read More

Read More

Delphi – SQLite Sample Projects

I've been exploring SQLite within Delphi. There are several sample SQLite applications that come with Delphi if you selected to install the samples during setup. I've put together the list of SQLite samples that are available.The common samples file path is located here:..\Studio\20.0\Samples\Object Pascal\Database\FireDAC\Samples\FireDAC.SQLiteIniFile Demo Sample This sample uses FireDAC to connect to an SQLite database that emulates the structure and the operations of an INI File.AddOn\SQLiteIniFile\Demo\SQLiteIniDemo.dprojFireDAC.TFDLocalSQL MegaFMX Sample The sample shows different TFDLocalSQL applications.Comp Layer\TFDLocalSQL\MegaFMX\LSQLMega.dprojFireDAC.SQLite Encryption Sample This sample demonstrates how to encrypt/decrypt an SQLite database.DBMS Specific\SQLite\Encryption\SQLite_Encrypt.dprojControlling Database Access Rights The SQLite is an embedded DBMS. This implies that it is a single user DBMS and does not need such concepts as a user, access rights, and so on. Still, some application can benefit from an access right control, for example: An application can restrict rights depending on an end-user license. A demo license means less possibilities, a full license provides all possibilities. Multi-tier data access frameworks can use their own user concept and control data access rights using some generic approach.  Again, SQLite provides a unique feature allowing you to authorize or not SQL commands. To work with this API, a Delphi application should set the OnAutorize event handler of the TSQLiteDatabase object, which is a database connection wrapping object. Hook this event after a database connection is opened.DBMS Specific\SQLite\OnAuthorize\SQLite_OnAuthorize.dprojHooking Database Updates SQLite provides an unique API allowing you to monitor all updates to a database. This feature can be used, for example, to log all updates to a DB. To work with this API, a Delphi application should set the OnUpdate event handler of the TSQLiteDatabase object, which is a database connection wrapping object. Hook this event after a database connection is opened.DBMS Specific\SQLite\OnUpdate\SQLite_OnUpdate.dprojCustom Collations SQLite stores and handles all character data either in UTF8 or UTF16, depending on the OpenMode connection parameter. When SQLite needs to compare or sort a character data, it has to know what rules to use for this. The rules are known as a collation.DBMS Specific\SQLite\UserCollation\SQLite_UserColl.dprojCustom Functions SQLite does not support the stored procedure or function concept, as it allows you to use the host language environment to extend the engine functionality. SQLite allows you to register host language functions in the SQLite engine and use them in the SQL commands. FireDAC simplifies this by introducing the TFDSQLiteFunction component.DBMS Specific\SQLite\UserFunc\SQLite_UserFunc.dprojThe SQLite R*Tree Module An R-Tree is a special index that is designed for doing range queries. R-Trees are most commonly used in geospatial systems where each entry is a rectangle with minimum and maximum X and Y coordinates. Given a query rectangle, an R-Tree is able to quickly find all entries that are contained within the query rectangle or which overlap the query rectangle.This idea is easily extended to three dimensions for use in CAD systems. R-Trees also find use in time-domain range look-ups. For example, suppose a database records the starting and ending times for a large number of events. A R-Tree is able to quickly find all events that were active at any time during a given time interval, or all events that started during a particular time interval, or all events that both started and ended within a given time interval. And so forth.  DBMS Specific\SQLite\UserRTree\SQLite_UserRTree.dprojTitle: SQLite Brief Description: This snippet shows you how to populate a listbox from a SQLite database using FireDAC and LiveBindings. See the section called "Accessing a Database" in the Mobile Tuturials topic in the documentation for more information and licensing requirements.Platforms supported: iOS, Android..\Mobile Snippets\FireDACSQLite\FireDAC_SQLite.dprojEnjoySemper Fi,Gunny Mike
Read More

Get Ready for 10.4 Beta

In a blog post by Sarina DuPont, Embarcadero has announced the plans for 10.4: https://community.idera.com/developer-tools/b/blog/posts/get-ready-for-the-10-4-beta-with-update-subscription The article includes the plans for the beta, which will be made available to all active Update Subscription customers of Delphi. RAD Studio, and C++Builder. It also highlights the key features we are expecting (no promise, of course) to deliver. Specific to Delphi are: - Language Server Protocol for Delphi - Language Enhancements: Managed Records  - Unified memory management across all platforms  - VCL High DPI Styles Support  - VCL Per Control Styling - New VCL Components - GetIt Package Manager Enhancements   - Unified Installer for Online & Offline installations - Metal 2 GPU driver support (macOS/iOS) - Apple API Updates - Windows API Updates  - LiveBindings Performance Enhancements There will also be a large number of bugs and issues addressed, along with many smaller by relevant features. The Update Subscription customers beta hasn't started yet, but remember that it will be available only if your update subscription is active.
Read More

C++Builderで視覚的、かつ魅力的に強力なアプリケーションを迅速に構築しましょう!

EmbarcaderoのC++Builderは、強力なテクノロジーを活用でき、C++の機能を利用して美しいデスクトップやモバイルアプリを迅速に構築することが可能な非常に汎用性の高いアプリケーション開発ツールです。 C++Builderは、WindowsやiOSなどのプラットフォーム、JSON/BSON、Bluetooth、REST、Unicode、DirectX12などのテクノロジー、そしてSQL Server、MySQL、SQLiteのようなデータベースのサポートが組み込まれています。C++Builder IDEでは、強力なビジュアルデザインツールを使用してフル機能のC++アプリケーションを簡単に構築でき、LiveBindingなどのテクノロジーを使用してデータにすばやく統合できます。(read more)
Read More