C++ Builder

High-Performance Remote Cloud Logger For Cross-Platform Delphi/C++Builder Application

Developing Cross-Platform Multi-device Application is made easy with Delphi/C++ Builder. It’s a challenging task to diagnose run-time issues with our application running on various platforms. That too to examine the run time state of our application running on iOS and Android devices are very difficult using the debugger or mobile platform-specific logging. Not to worry. GrijjyCloudLogger solves these challenges and provides remote logging features for Windows, iOS,macOS, Android. GrijjyCloudLogger – Allows you to send log messages over the Intranet or Internet from Windows, Linux, iOS, Android, and macOS devices to a viewer running on Windows. Provides a unified, run-time debug related capabilities like memory and object tracking from these respective platforms. Features: Custom live watches, remote live views of objects, tracking live memory usage, object allocations, growth leaks, and more. Built upon our ZeroMQ Majordomo implementation that allows you to create powerful, lightweight, distributed applications that can route messages over any network, including the Internet.It is extremely fast over the network and can handle numerous connected developers simultaneously. It also uses our Google Protocol Buffers implementation that allows us to encapsulate extensible and arbitrary data and transport the data using efficient payloads. How to use GrijjyCloudLogger : Go to Tools menu in Your IDE-> Getit Package Manager and Type Grijjy and install, it will install all Modules and samples. After installation, Two Icons in Desktop, GrijjyLogBroker, GrijjyLogViewer – includes examples for the console, fire monkey. GrijjyLogBroker: Routes log messages between senders and viewers. By default, the Broker is configured to listen on tcp://localhost:7337. When you use Grijjy.CloudLogging it in your project you need to call the GrijjyLog.Connect() method and provide the address of the Broker. GrijjyLogViewer: The GrijjyLogViewer displays messages that are sent from your app. The Service name in the Connection Settings of the GrijjyLogViewer should match the same Service name you provided to the Grijjy.CloudLogger when calling the Connect() method. Using this technique, all developers in your organization can share the same GrijjyLogBroker. 3. Navigate to the ExampleLogClient.FMX under GrijjyLogViewer samples folder and run the application. Mention the Broker URL and Service Name and send different data that can be viewed in your GrijjyLogViewer. Check the video for GrijjyCloudLogger demonstration here.

Read More

Learn About Powerful WebSockets Solutions For Delphi

The WebSocket is a communication protocol, that makes it possible to open a two-way interactive communication session between the user’s browser and a server. With this, you can send messages to a server and receive event-driven responses without having to poll the server for a reply. Applications that require Real-time data streaming, Synchronization uses WebSocket primarily. Most browsers support the protocol, including Google Chrome, Microsoft Edge, Internet Explorer, Firefox, Safari, and Opera. The WebSocket protocol specification defines ws (WebSocket) and wss (WebSocket Secure) as two new uniform resource identifier (URI) schemes that are used for unencrypted and encrypted connections, respectively. Web Socket Server: A WebSocket server is nothing more than an application listening on any port of a TCP server that follows a specific protocol. The task of creating a custom server tends to scare people; however, it can be straightforward to implement a simple WebSocket server on your platform of choice. In Delphi, we can create our own server directly inheriting from Indy TIdCustomTCPServer. WebSocket servers are often separate and specialized servers (for load-balancing or other practical reasons), so you will often use a reverse proxy (such as a regular HTTP server) to detect WebSocket handshakes, pre-process them, and send those clients to a real WebSocket server. Web Socket Handshake: The server must listen for incoming socket connections using a standard TCP socket. Depending on your platform, this may be handled for you automatically. For example, let’s assume that your server is listening on example.com, port 8000, and your socket server responds to GET requests at example.com/chat. Client HandShake: Even though you’re building a server, a client still has to start the WebSocket handshake process by contacting the server and requesting a WebSocket connection. So, you must know how to interpret the client’s request. The client will send a pretty standard HTTP request with headers that looks like this (the HTTP version must be 1.1 or greater, and the method must be GET): GET /chat HTTP/1.1 Host: example.com:8000 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 GET /chat HTTP/1.1 Host: example.com:8000 strong>Upgrade: websocket/strong> strong>Connection: Upgrade/strong> Sec–WebSocket–Key: dGhlIHNhbXBsZSBub25jZQ== Sec–WebSocket–Version: 13 When the server receives the handshake request, it should send back a special response that indicates that the protocol will be changing from HTTP to WebSocket. That header looks something like the following (remember each header line ends with rn and put an extra rn after the last one to indicate the end of the header): HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= strong>HTTP/1.1 101 Switching Protocols/strong> Upgrade: websocket Connection: Upgrade strong>Sec–WebSocket–Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= /strong> Exchanging Data formats : Message is Exchanged in certain formats Between client and server called “Frames”. For more information check here. Existing Solutions Available : Check the video for creating web sockets server and client implementation in Delphi below. WebSocket And Delphi

Read More

Quickly Build C++ Builder Application And Connect To Microsoft Excel Using ADO

Connecting and Read/Write to Microsoft Excel becomes a common need among many Applications. How to do with ADO connection in your C++ Builder Application? This Post guide will you to do that and its very simple steps. Assume you need to create a application, Read data from excel and populate into a Grid, and need to write data to the excel. To do this four components required, TADOConnection: TADOConnection encapsulates the ADO connection object. Use TADOConnection for connecting to ADO data stores(e.g Excel). The connection provided by a single TADOConnection component can be shared by multiple ADO command and dataset components through their Connection properties. TADOConnection allows you to control the attributes and conditions of a connection to a data store. TADOQuery: To access one or more tables( In Excel, it is sheet) in a data store using SQL statements. Retrieve data from tables in an ADO data store using SELECT statements. Perform actions on tables and other metadata objects in an ADO data store with statements like INSERT, DELETE, UPDATE, ALTER TABLE, and CREATE TABLE. Execute stored procedures.   TDataSource: To provide a conduit between a dataset and data-aware controls on a form that enable display, navigation, and editing of the data underlying the dataset.  TDBGrid: Displays and manipulates records from a dataset in a tabular grid. Applications can use the data grid to insert, delete, or edit data in the database, or simply to display it. Steps to connect to Excel using ADO Connection: Create a new Windows VCL C++ Application. Add these components TADOconnection, TADOQuery, TDataSource, TDBGrid, TCombox, and TButton. Set the ADOquery and DBGrid Datasource property with TDatasource instance. Assign the TADOConnection.Connectionstring with “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:YourExcel.xls;Extended Properties=”Excel 8.0”; Populate the tables(sheet list) into the combobox from TADOconnection.GetTableNames(StringList). On Button click set TADOQuery SQL string with “select * from ” and open the TADOQuery. Check the video for demonstration.

Read More

Learn How Easy It Is To Connect To Microsoft SQL Server Using FireDAC In RAD Studio

Connecting to Multiple Enterprise Databases is no more a time consuming task in making connections and login to databases. FireDAC is a Universal Data Access library for developing applications for multiple devices, connected to enterprise databases. With its powerful universal architecture, FireDAC enables native high-speed direct access from Delphi and C++Builder to InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, DataSnap, and more, including the NoSQL Database MongoDB. How To Connect With Microsoft SQL Server using FireDAC. Prerequisites : Ensure Native Microsoft SQL server latest driver is installed and a Microsoft SQL Server installed machine (local or Remote) to connect database. Open RAD Studio 10.4.1 -> Navigate to Data Explorer -> Expand FireDAC -> Select Microsoft SQL Server. Right Click Add New Connection. Enter the name of the Connection e.g) NorthWind. FireDac Conenction editor is opened with DriverID ‘MSSQL’ Provide the Server, Database, Username, Password to connect. Click the Test Button to check the connection. FireDAC login window with details will be shown. Click Ok. Connection Successful message will be popped up. Lot of other options available for your connection establisment. Check out the documentation here. Once Successful connection is made, Expand the database which is connected e.g Northwind, you can Expand Tables, Views. Create a new Windows VCL Application. Drag and Drop the Table e.g Employee. Select the Table and in Object Inspector set the property Active to true. Right Click Bind Visually, Which opens the LiveBindings Designer with the TableName. Select * in the Table Row. RightClick Link to new Control… Select TStringGrid. That’s all, Table data is populated to String Grid in the Form. These 10 Simple steps is enough to make your connection with Microsoft SQL Server. Check out the Demonstration here. Universal FireDAC Connectivity Architecture: FireDAC Architecture. FireDAC Features : Data Access Engine : Lightweight, effective and flexible engine can be used directly in applications and serves as a powerful foundation to the datasets API.  Unified API : FireDAC provides a range of features that help abstract the differences between database systems, making it easy to write code that does not have to be concerned about different DBMS dialects or other subtle differences between DBMSs. High- Performance Data Access : Database access is optimized using many different techniques often found only in database-specific components, which let you get faster data access out of the box. To get started with FireDAC and benefits it offers for developers Check here.

Read More

Learn How to Build High-Performance Real-Time Apps With Delphi And SignalR

In this CodeRage session, we’ll create a simple real-time multi-platform chat application in RAD Studio using the Devart SecureBridge component called TScHubConnection, which implements the functionality of a SignalR client. What can you do with SignalR? While chat is often used as an example, you can do a whole lot more. Any time a user refreshes a web page to see new data, or the page implements Ajax long polling to retrieve new data, it’s a nominee for using SignalR. SignalR also enables completely new types of applications that require high-frequency updates from the server, such as real-time gaming. SignalR library has been implemented in many languages already and the solution by Devart is a great option.  Be sure to watch the CodeRage session where you can learn how you can implement such functionalities in your Delphi applications.  Here you can learn more about the SecureBridge component at Devart.

Read More

Learn How To Take Your Cross-Platform Development To The Next Level With Delphi FireUI

With the all-new FireUI Multi-Device Designer, design user interfaces across multiple devices using a master form to share all user interface code, then optimize derived views for each target platform and device. The existing native Desktop styles have been extended to cover the same UI elements as mobile styles, providing a 1:1 match with universal styling support across all platforms, giving the native look and feel on each supported platform. FireUI Multi-Device Designer provides a set of predefined views, including Windows Desktop, Surface Pro Tablet, Mac Desktop, iPhone, iPad, Android Tablets, and Smart Phones, and wearables like Smart Watches. FireUI: Revolutionary Multi-Device Development Devices are everywhere and users’ expectations are higher than they have ever been. Customers expect to be able to use an application on their smartphone while on the go and then switch to their tablet or Desktop computer while in their office or at home. Optimizing user interfaces for each of these device form factors can be challenging and costly, efficiently building multiple separate form views for each device. Multi-Device development is radically simplified with the FireUI design paradigm, tools, and components, delivering more productivity than ever before.

Read More

Quickly Learn About The Ultimate Open Tools APIs For Decorating Your Delphi/C++ Builder IDE

Though RAD Studio IDE supports a lot of features to boost productivity sometimes as a Delphi/C++ Builder Developer and as an end-user we may think to modify/extend the IDE capabilities for our own custom needs. Don’t know where to start with? Don’t worry! Delphi/C++ Builder has the Flexibility to extend the IDE capabilities using the Open Tools API. Using this Developers can extend some text, graphics, and installs to the IDE. Open Tools API (OTA) The Open Tools API (OTA) is a set of interfaces that allow developers to add features to the BDS, Delphi, and C++Builder IDEs. These additions are called wizards or experts. Wizards can use the OTA interfaces to modify the IDE, obtain information about the IDE’s state, and receive notification of important events. Check some useful FAQs here How to decorate your Editor using OTA: e.g) Need to do visualization of code coverage in the Delphi Source editor with some Text and Graphics representation. How to decorate your IDE with symbols and graphics to the Source editor? How to make sure that these decorations are in sync when editing the content? In ToolsAPI.pas, a lot of interfaces available to Modify IDE, information about IDE’s state, etc. For Visualizing code coverage in the Source editor, use the INTAEditViewNotifier interface PaintLine procedure. Create the Canvas state and draw the graphics required in the implementation of the procedure. procedure PaintLine(const View: IOTAEditView; LineNumber: Integer; const LineText: PAnsiChar; const TextWidth: Word; const LineAttributes: TOTAAttributeArray; const Canvas: TCanvas; const TextRect: TRect; const LineRect: TRect; const CellSize: TSize); procedure PaintLine(const View: IOTAEditView; LineNumber: Integer; const LineText: PAnsiChar; const TextWidth: Word; const LineAttributes: TOTAAttributeArray; const Canvas: TCanvas; const TextRect: TRect; const LineRect: TRect; const CellSize: TSize); BeginPaint is called before the code editor is repainted, and use the EndPaint procedure to clean up any data structures that have been maintained over the course ofpainting lines. Check the below Video Demonstration for decorating the Source Editor. https://www.youtube.com/watch?v=wlH4IVrhqRQ

Read More

Building a C++ VCL Customer/Sales Master/Detail/Charting Application with 1 Line of Code

object MasterDetailForm: TMasterDetailForm   Left = 0   Top = 0   Caption = ‘Customer and Orders Master Detail Using Live Bindings (C++ VCL)’   ClientHeight = 509   ClientWidth = 736   Color = clBtnFace   Font.Charset = DEFAULT_CHARSET   Font.Color = clWindowText   Font.Height = –11   Font.Name = ‘Tahoma’   Font.Style = []   OldCreateOrder = False   OnShow = FormShow   PixelsPerInch = 96   TextHeight = 13   object Splitter1: TSplitter     Left = 0     Top = 161     Width = 736     Height = 3     Cursor = crVSplit     Align = alTop     ExplicitLeft = 24     ExplicitTop = 210     ExplicitWidth = 159   end   object Panel1: TPanel     Left = 0     Top = 0     Width = 736     Height = 33     Align = alTop     TabOrder = 0     object DBNavigator1: TDBNavigator       Left = 159       Top = 4       Width = 225       Height = 23       DataSource = CustomerDataSource       VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbRefresh]       TabOrder = 0     end     object DatabaseActiveCheckBox: TCheckBox       Left = 24       Top = 9       Width = 97       Height = 17       Caption = ‘Database Active’       TabOrder = 1     end   end   object CustomerDBGrid: TDBGrid     Left = 0     Top = 33     Width = 736     Height = 128     Align = alTop     DataSource = CustomerDataSource     TabOrder = 1     TitleFont.Charset = DEFAULT_CHARSET     TitleFont.Color = clWindowText     TitleFont.Height = –11     TitleFont.Name = ‘Tahoma’     TitleFont.Style = []   end   object Panel2: TPanel     Left = 0     Top = 164     Width = 736     Height = 345     Align = alClient     TabOrder = 2     object Splitter2: TSplitter       Left = 305       Top = 1       Height = 343       ExplicitLeft = 208       ExplicitTop = 120       ExplicitHeight = 100     end     object SalesDBGrid: TDBGrid       Left = 1       Top = 1       Width = 304       Height = 343       Align = alLeft       DataSource = SalesDataSource       TabOrder = 0       TitleFont.Charset = DEFAULT_CHARSET       TitleFont.Color = clWindowText       TitleFont.Height = –11       TitleFont.Name = ‘Tahoma’       TitleFont.Style = []     end     object DBChart1: TDBChart       Left = 308       Top = 1       Width = 427       Height = 343       Title.Text.Strings = (         ‘Sales by Item Type for Customer’)       View3DOptions.Elevation = 315       View3DOptions.Orthogonal = False       View3DOptions.Perspective = 0       View3DOptions.Rotation = 360       Align = alClient       TabOrder = 1       DefaultCanvas = ‘TGDIPlusCanvas’       ColorPaletteIndex = 13       object Series1: TPieSeries         DataSource = SalesByItemTypeForCustomerQuery         XLabelsSource = ‘ITEM_TYPE’         XValues.Order = loAscending         YValues.Name = ‘Pie’         YValues.Order = loNone         YValues.ValueSource = ‘SUM’         Frame.InnerBrush.BackColor = clRed         Frame.InnerBrush.Gradient.EndColor = clGray         Frame.InnerBrush.Gradient.MidColor = clWhite         Frame.InnerBrush.Gradient.StartColor = 4210752         Frame.InnerBrush.Gradient.Visible = True         Frame.MiddleBrush.BackColor = clYellow         Frame.MiddleBrush.Gradient.EndColor = 8553090         Frame.MiddleBrush.Gradient.MidColor = clWhite         Frame.MiddleBrush.Gradient.StartColor = clGray         Frame.MiddleBrush.Gradient.Visible = True         Frame.OuterBrush.BackColor = clGreen         Frame.OuterBrush.Gradient.EndColor = 4210752         Frame.OuterBrush.Gradient.MidColor = clWhite         Frame.OuterBrush.Gradient.StartColor = clSilver         Frame.OuterBrush.Gradient.Visible = True         Frame.Width = 4         OtherSlice.Legend.Visible = False       end     end   end   object DatabaseConnection: TFDConnection     Params.Strings = (                ‘Database=C:UsersPublicDocumentsEmbarcaderoStudio21.0Sampl’ +         ‘esDataEMPLOYEE.GDB’       ‘ConnectionDef=EMPLOYEE’)     Connected = True     LoginPrompt = False     Left = 104     Top = 64   end   object CustomerQuery: TFDQuery     AfterScroll = CustomerQueryAfterScroll     Connection = DatabaseConnection     SQL.Strings = (       ‘select * from customer’)     Left = 240     Top = 72     object CustomerQueryCUST_NO: TFDAutoIncField       FieldName = ‘CUST_NO’       Origin = ‘CUST_NO’       ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]       IdentityInsert = True     end     object CustomerQueryCUSTOMER: TStringField       FieldName = ‘CUSTOMER’       Origin = ‘CUSTOMER’       Required = True       Size = 25     end     object CustomerQueryCITY: TStringField       FieldName = ‘CITY’       Origin = ‘CITY’       Size = 25     end     object CustomerQuerySTATE_PROVINCE: TStringField       FieldName = ‘STATE_PROVINCE’       Origin = ‘STATE_PROVINCE’       Size = 15     end     object CustomerQueryCOUNTRY: TStringField       FieldName = ‘COUNTRY’       Origin = ‘COUNTRY’       Size = 15     end     object CustomerQueryPOSTAL_CODE: TStringField       FieldName = ‘POSTAL_CODE’       Origin = ‘POSTAL_CODE’       Size = 12     end     object CustomerQueryON_HOLD: TStringField       AutoGenerateValue = arDefault       FieldName = ‘ON_HOLD’       Origin […]

Read More