From the blog

Customizing SVG appearance

Intro Recently we covered a blog post related to high DPI in combination with SVG in RAD Studio Alexandria. Adding SVG to your application makes you not have to worry for what the future brings in terms of look and feel. The scalable vector graphics will always be crisp independent of the screen resolution or size of the image. Today we are going a step further yet again and want to introduce a couple of QOL changes.  SVG support is available when installing one of the following 2 products. After starting the IDE, SVG is already available. This is not only registered for our products, but also available in default VCL controls. We start by adding VCL.TMSFNCTypes or AdvTypes unit (depending on the installed product). The unit will register the SVG type at runtime. At designtime, the package already registers SVG support. In the latest version of both products, we have added a way to change the tint color, setting the overal fill, stroke and opacity as well as the ability to turn an SVG to a grayscale version. TintColor Adding an SVG image to one of your controls, directly via TPicture or via a TVirtualImageList in combination with TTMSFNCSVGImageCollection enables access to the properties. After loading an SVG via the Data property of the TTMSFNCSVGImageCollection you are able to set one of the new properties. Changing the TintColor will affect the overal appearance, the SVG engine will try to blend the TintColor with the image, creating a different appearance. Original SVG TintColor = gcDarkOrange GrayScale Enabling the property GrayScale, will transform the SVG and convert all colors to grayscale versions. Customizing Opacity, Fill and Stroke The CustomOpacity, CustomFillColor and CustomStrokeColor properties are focused on changing the whole appearance of the SVG. Currently, the CustomFillColor and CustomStrokeColor are designed to be applied on monochrome colors such as complete white or black SVG icons.  CustomOpacity = 0.4 In Code  Each property can be accessed when converting the TGraphic sub-property of a TPicture to TTMSFNCSVGBitmap (or TAdvSVGBitmap). The code to do this is shown below, and based on adding a TPicture on a TImage. (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.GrayScale := True;             Original SVG                                GrayScale    The same applies to all the other properties. Below is a sample changing the opacity in combination with a custom fill color. (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.CustomFillColor := gcRed; (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.CustomOpacity := 0.8;             Original SVG                          Custom Fill/Opacity    Want to know more? More information on SVG, the supported SVG features as well as the enhancements we made to our SVG engine are available in the following blog posts.

Read More

Artificial Intelligence: Expectations vs. Reality

Let’s face it; we humans can be drawn to exaggerate and over-generalize when it comes to modern technology, especially during its early-adoption, nascent phases. This is understandable, many major tech introductions have the potential to change the way the world works or how we execute specific tasks. For that particular reason, the uprise of not-seen-before technologies can create ripples of attention as the start to shake-up the status quo. Moreover, Sci-Fi movies with not-so-accurate technology themes can feed that disquiet, causing the public to create exaggerated notions of what technologies like artificial intelligence would mean for humanity. Time-traveling liquid metal murder robots from the future may seem too far-fetched, but computers which have all the smart answers and can bring about World peace by exposing crimes before they’ve happened? Yes, much more plausible to the average non-technical person even though this would require a coordinated effort from multiple disparate government agencies who are suddenly magically released from the constraints of fiscal budgeting and the regular popularity contest of elections. These plausible possibilities, in turn, increase the need to define what’s real and what isn’t with modern technologies like AI.  There are a lot of misconceptions about artificial intelligence. From intelligent robots eventually turning against and enslaving humans in a dystopian societal apocalypse to AI replacing humans in all areas of life. The AI hype is real. In this article, we’ll be discussing some common AI expectations and defining their underlying reality.  Are we about to face an AI Apocalypse? From The Matrix to The Terminator, almost all AI-related movies portray a future where mankind is overwhelmed by technology which has turned from friend to a foe whose main, single-purposed goal is our annihilation. The AI turns against the human race or tries to take over the world. This isn’t entirely bad, as long as it is all understood to be as fictional as a world populated by dragons and reincarnated dinosaurs. But this is not often the case; the media influence is, tangibly, stronger than ever, and a large percentage of the public translates this easily-consumed fiction into an absolutely likely reality. In other words, such movies add to how the world sees AI innovations. No matter how close to modern times you foray, you’ll find that the narrative remains the same; machine revolting against humans, often with an underlying moral narrative of “well, we got what we deserved”. Almost none portray a world which results from a more probable extension of the various forms of artificial intelligence that actually exist, with fiction being mainly about the human-like type AI.  The Royal Society Report explains the implications of exaggerated expectations and fictional narratives. It reads as follows; “Both fictional and many non-fictional narratives focus on issues that form either a very small subset of contemporary AI research or that are decades if not centuries away from becoming a technological reality. This disconnect between the narratives and the reality of the technology can have several major negative consequences. The prevalence of narratives focused on utopian extremes can create expectations that the technology is not (yet) able to fulfill. This, in turn, can contribute to a hype bubble, with developers and communicators potentially feeding into the bubble through over-promising. If such a bubble bursts because the technology was unable to live up […]

Read More

More no-code in latest WX Pack!

Thanks to the use of components on a visual form designer, Delphi was a pioneer in no-code long before the term started to be used. As our primary job is to develop components, the way our components are architected is instrumental in getting as close to no-code as possible. Many times it is rather low-code than no-code, but now and then, we can assemble the components in such way that a functional application can be created without writing a line of code. Today we have a look at the newest TMS FNC WX Pack release with the new TTMSFNCWXPDFThumbnailList and TTMSFNCWXPDFToolbar that facilitate to create a functional PDF viewer app for 4 frameworks and a myriad of different operating systems without writing a single line of code. The PDF viewer app The TTMSFNCWXPDFToolbar purpose is to allow navigation in a PDF that is opened to view. It contains buttons for going to the next/previous/last/first page, to open a new PDF file or to rotate pages or zoom in & out pages. The TTMSFNCWXPDFThumbnailList is, as the name implies, an either vertically or horizontally scrolling list of thumbnails of pages in the opened PDF file. It interacts with the TTMSFNCWXPDFViewer component to show the clicked page in the thumbnail list. So, to build this application, following steps are needed: 1) Drop TTMSFNCWXPDFToolbar on the form and set alignment to top 2) Drop TTMSFNCWXPDFThumbnailList on the form and set alignment to left 3) Drop TTMSFNCWXPDFViewer on the form and set alignment to client 4) Assign the TMSFNCWXPDFViewer1 to TTMSFNCWXPDFThumbnailList.Viewer 5) Assign the TMSFNCWXPDFViewer1 to TTMSFNCWXPDFToolbar.Viewer Ok, sorry, there is nothing more to do. Compile and run the app. Click the open file button in the toolbar, select a PDF file from the local file system and it will be loaded. This means, the toolbar will get active and will allow you to browse through the PDF file and the thumbnaillist will be loaded with thumbnails of all pages in the PDF. Click a thumbnail in this list and this page will be displayed in the viewer. Targets Just to avoid confusion, these steps can be performed for a VCL Windows application. But the same steps apply for a FireMonkey application that can target Windows, macOS, Linux, iOS and Android. And it does not stop there, you can do exactly the same after creating a new TMS WEB Core web client application, a TMS WEB Core Miletus cross platform desktop application or a TMS WEB Core PWA, including doing this both from the Delphi IDE or from the Visual Studio Code IDE. And finally, also from the free Lazarus IDE, it can be done from Windows, macOS, Linux. In Delphi, no-code is not a prison The power of Object Pascal component based development is that it isn’t limited to no-code or low-code, it is just a start. Where there are a lot of possibilities to create a lot of useful end-user functionality with little to no-code, Delphi still allows to go “down to the metal” and write code that can use every corner of the operating system (and that includes the web browser as operating system when a web client application is created). The WX components contain numerous properties, event handlers and public methods that allow to further programmatically manipulate the components.  What’s […]

Read More

Delphi 11 Alexandria Defines

uses   System.IOUtils;   procedure TForm1.Button1Click(Sender: TObject); begin   case TOSVersion.Platform of     TOSVersion.TPlatform.pfWindows:       PlatformPath := ‘Windows’;     TOSVersion.TPlatform.pfMacOS:       PlatformPath := ‘macOS’;     TOSVersion.TPlatform.pfiOS:       PlatformPath := ‘iOS’;     TOSVersion.TPlatform.pfAndroid:       PlatformPath := ‘Android’;     TOSVersion.TPlatform.pfWinRT:       PlatformPath := ‘WinRT’;     TOSVersion.TPlatform.pfLinux:       PlatformPath := ‘Linux’   else       PlatformPath := ‘Unexpected platform’   end;     Memo1.Lines.Add(‘TPlatform: ‘+PlatformPath);   Memo1.Lines.Add(TOSVersion.ToString);     {$IF DEFINED(IOS)}     Memo1.Lines.Add(‘Defined: IOS’);   {$ENDIF}   {$IF DEFINED(IOS32)}     Memo1.Lines.Add(‘Defined: IOS32’);   {$ENDIF}   {$IF DEFINED(IOS64)}     Memo1.Lines.Add(‘Defined: IOS64’);   {$ENDIF}     {$IF DEFINED(ANDROID)}     Memo1.Lines.Add(‘Defined: ANDROID’);   {$ENDIF}   {$IF DEFINED(ANDROID32)}     Memo1.Lines.Add(‘Defined: ANDROID32’);   {$ENDIF}   {$IF DEFINED(ANDROID64)}     Memo1.Lines.Add(‘Defined: ANDROID64’);   {$ENDIF}     {$IF DEFINED(MACOS)}     Memo1.Lines.Add(‘Defined: MACOS’);   {$ENDIF}   {$IF DEFINED(MACOS64)}     Memo1.Lines.Add(‘Defined: MACOS64’);   {$ENDIF}   {$IF DEFINED(OSX)}     Memo1.Lines.Add(‘Defined: OSX’);   {$ENDIF}   {$IF DEFINED(OSX64)}     Memo1.Lines.Add(‘Defined: OSX64’);   {$ENDIF}     {$IF DEFINED(MSWINDOWS)}     Memo1.Lines.Add(‘Defined: MSWINDOWS’);   {$ENDIF}   {$IF DEFINED(WIN32)}     Memo1.Lines.Add(‘Defined: WIN32’);   {$ENDIF}   {$IF DEFINED(WIN64)}     Memo1.Lines.Add(‘Defined: WIN64’);   {$ENDIF}     {$IF DEFINED(LINUX)}     Memo1.Lines.Add(‘Defined: LINUX’);   {$ENDIF}   {$IF DEFINED(LINUX32)}     Memo1.Lines.Add(‘Defined: LINUX32’);   {$ENDIF}   {$IF DEFINED(LINUX64)}     Memo1.Lines.Add(‘Defined: LINUX64’);   {$ENDIF}       {$IF DEFINED(DCC)}     Memo1.Lines.Add(‘Defined: DCC’);   {$ENDIF}     {$IF DEFINED(CONSOLE)}     Memo1.Lines.Add(‘Defined: CONSOLE’);   {$ENDIF}     {$IF DEFINED(POSIX)}     Memo1.Lines.Add(‘Defined: POSIX’);   {$ENDIF}   {$IF DEFINED(POSIX32)}     Memo1.Lines.Add(‘Defined: POSIX32’);   {$ENDIF}   {$IF DEFINED(POSIX64)}     Memo1.Lines.Add(‘Defined: POSIX64’);   {$ENDIF}     {$IF DEFINED(CPUX86)}     Memo1.Lines.Add(‘Defined: CPUX86’);   {$ENDIF}   {$IF DEFINED(CPUX64)}     Memo1.Lines.Add(‘Defined: CPUX64’);   {$ENDIF}     {$IF DEFINED(CPU32BITS)}     Memo1.Lines.Add(‘Defined: CPU32BITS’);   {$ENDIF}     {$IF DEFINED(CPU64BITS)}     Memo1.Lines.Add(‘Defined: CPU64BITS’);   {$ENDIF}     {$IF DEFINED(CPUARM)}     Memo1.Lines.Add(‘Defined: CPUARM’);   {$ENDIF}   {$IF DEFINED(CPUARM32)}     Memo1.Lines.Add(‘Defined: CPUARM32’);   {$ENDIF}   {$IF DEFINED(CPUARM64)}     Memo1.Lines.Add(‘Defined: CPUARM64’);   {$ENDIF}     {$IFDEF DEBUG}     Memo1.Lines.Add(‘DEBUG is Defined’);   {$ELSE}     Memo1.Lines.Add(‘DEBUG is Not Defined’);   {$ENDIF} end;

Read More

What Is It Like To Be A Developer David Cornelius?

Hello. This article is part of a series where we speak with professional software developers, ask them what it’s like to write code for a living, and perhaps gain a few insights into the software development industry along the way. Our guest today is a Delphi MVP and author David Cornelius. David describes himself as “a programmer through-and-through”. He runs a small software development business from his home office and seems to have his priorities right when he says “I love family, music, strategy board games, and the great outdoors”. Living, as he does, half-way between the Pacific Ocean and the Cascade Mountains David says means he is offered a wide variety of places to explore—either on a motorcycle or by hiking from a campground. Hi David, thank you for talking to me today Well, it’s very nice to meet you, Ian!! 😁 David, in his “auditioning for James Bond” pose Which Embarcadero product(s) do you use a) the most b) regularly? a & b: Delphi XE, 10.4, 11. Every day. How and/or why did you become a developer? When I was in grade school, my favorite subject was math. I got a programmable TI (Texas Instruments) calculator and would compete with my grandfather on the most complex calculations we could come up with in its limited 32 steps. The small high school I attended had a TRS-80 with a cassette “drive” for storage but I got impatient waiting for it to load/save and with its many retries and errors so lost interest. But later, when the school set up its first computer lab with three Apple IIs, I spent all available time teaching myself AppleSoft BASIC. When I got to the end of the tutorial book and realized a friend of mine was writing games that could not have been done in BASIC alone, I knew there was so much more to learn—I was hooked on programming by that point! Majoring in Computer Science in college was the obvious next step and the rest, as they say, is history. Do you think you will ever stop being a developer? If so, what would be next? No—I have too many ideas to ever stop, even if I sell my house and travel the country in an RV, I’d still be programming part of the time. What made you start using Delphi/C++ Builder? College exposed me to several different programming languages. I studied assembly on three different processors, enjoyed the structure of FORTRAN, got bored with COBOL and dropped the class, looked at some niche languages like SNOBOL, and taught myself C using Mark William’s Let’s C. But the most useful class was one that taught general programming concepts using an inexpensive tool that allowed us to edit, compile, and debug all in one IDE, a new concept in the mid-80s. It was Turbo Pascal. Later at my first long-term programming job, I was given the opportunity to start a brand-new application and I could choose whatever programming tool I wanted. I went with Turbo Pascal, then at version 4, because I already knew how to use it, I could drop to assembly if I needed to (which I actually did occasionally), and it was starting to get popular—it was the logical place to start. As the application grew over the […]

Read More

Free extra components for TMS WEB Core for Visual Studio Code

Earlier this year, we introduced support for installing packages in TMS WEB Core for Visual Studio Code. With packages, TMS WEB Core for Visual Studio Code became easily extensible with lots more components for creating web applications. Together with this introduction, we have also make packages for installing the TMS FNC component family in TMS WEB Core for Visual Studio Code. All FNC components can now be installed & used in TMS WEB Core for Visual Studio Code applications. And this applies both to the trial version as for the full source code based registered version.  Today, we are pleased to inform that also the set of free components offered for TMS WEB Core can also be directly used from TMS WEB Core for Visual Studio Code via new package files included in the component distribution. This includes a component to open .XLSX files, generate vCalendar files, handle ZIP file, generate a QR code or to use WebRTC libraries OpenTok or Jitsi. In addition, it includes a package to install the jQWidgets Smart HTML elements component set or the Vaadin mobile UI component set and use it from TMS WEB Core for Visual Studio Code. Learn everything about free components you can now install with packages in this video by Dr. Holger Flick: If you are a TMS WEB Core enthusiast who already developed custom components, have a look at the TMS WEB Core partner program. Join the program, publish your components and get free TMS WEB Core licenses!  

Read More

New WX Pack component: The OCR helper!

Making your own OCR application has never been easier! Introduced in version 1.1.0.0 of WX pack is the new OCR Helper component, which simplifies the use of the OCR component even further. Creating & loading templates, selecting parts of an image and even getting visual feedback after the OCR process are possible with this component. Basic usage To use the component, you simply drag it on the form, load an image and assign the OCR component. From there, you can start selecting parts of an image on which you want to start the OCR process. If needed you can even save these parts as a template, which you can re-use on other images. This is something you can commonly use on standard document types from where you always want to extract specific content. With the AutoStart option, you can have the OCR process start immediately on every part you select, or you can select multiple parts and start them all at the same time. This will allocate all available OCR workers and enqueue the rest of the parts. Every time a worker is finished and becomes available, the next part will start. Processing these parts will return feedback if enabled. This will highlight the words that do not meet the confidence limits set by the user with optionally 3 different colors for 3 different confidence levels. Learn everything you need to know to get started watching the video below. In this blog article, you can read & see what more the WX component technology offers!

Read More

5 Of The Top Reasons Why You Should Use APIs

An Application Programmable Interface or API allows two applications to interact with each other using the API as a bridge or intermediary. If you are not familiar with how to integrate an API then you may be spending a lot of time unnecessarily writing a lot of code from scratch. In other words you may be working too hard! Are you wasting time by writing a lot of code from scratch? This is the main reason you need to start considering integrating APIs into your software. So, we will talk about how to avoid reinventing the wheel every time you design an application. It’s not just the time expended coding things that could have been handled by the API; writing lots of additional code also means you open yourself up to the possibility that you inadvertently introduce errors – bugs – or unintended behavior. Your new code doesn’t benefit from the ‘wisdom of crowds’ which APIs can bring. A professional API from a specialist source often has many thousands of users/consumers who have used the API before and that means any problems and kinks have probably been caught and rectified before you even begin. Letting someone else do the work is always the hard work is always the smart choice, isn’t it? Is it hard to use an API? When I got my first programming internship 4 years ago, in my first whole month, I spent my time integrating different APIs into the web app. I found integrating hard, but after integrating one API, it all become so easy and fun. All I had to do was pay attention to the documentation of the APIs. Using RAD Studio Delphi we also get some additional help to supercharge our skills. RAD Studio has tools such as the REST Debugger and the marvelously powerful REST components do all the hard work for us and help promulgate low code from us and maximum power from our apps. By the end of this tutorial, you will learn how to employ these kinds of useful yet easy to use tools to easily and quickly integrate one of the market-leading APIs into your cross-platform Delphi application. This is the best-kept secret about Delphi that users of other computer languages often overlook – the “RAD” in RAD Studio stands for “rapid application development” and it’s not some kind of tricksy marketing trope; RAD Studio brings your apps from ideas into reality as fast as possible with that legendary rock-solid Delphi application stability means they keep on working too long after many competing technologies have fallen out of fashion or simply become obsolete due to their reliance on runtime support which atrophies over time. What does this article teach me about using APIs in my desktop and mobile apps? I hope that this tutorial will help you start your API Integrator career. We will cover: Explore various APIs and see what they can do for our desktop and mobile applications Look and at how to integrate APIs for use in our own apps Code a demo cross-platform app using Delphi that integrates API The only thing you need is a copy of RAD Studio and basic knowledge of the Delphi programming language! Are you using automation to connect to an API? We have dozens of tutorials on building a […]

Read More

Embarcadero Black Friday 2021 Promo

BLACK FRIDAY Găsiți acum produsele potrivite pentru business-ul Dvs. la prețuri de Black Friday! Și anul acesta profităm de ocazia perioadei promoțiilor mari pentru a Vă oferi soluțiile Dvs. preferate la un preț incredibil. De Black Friday și Cyber Monday procurați ediția Professional a soluțiilor Delphi 11, C++Builder 11, și RAD Studio 11 Alexandria cu un discount de 10%! Iar edițiile Enterprise și Architect ale soluțiilor Delphi 11, C++Builder 11, și RAD Studio 11 Alexandria – cu un discount de 15% ! Contactați echipa noastră pentru informații suplimentare și prețuri promoționale la IDE Delphi și C++ Builder! Tel: +40 771 098 621 sau vanzari@d-data Solicitare Ofertă Completați formularul de mai jos pentru o ofertă personalizată. Terms & Conditions: Oferta valabilă în perioada 26 Noiembrie 2021 – 03 Decembrie2021. Oferta disponibilă doar la achiziția soluțiilor RAD Studio, Delphi și C++ Builder 11 Alexandria (All Editions). Tipuri de licențe incluse în promoție – ESD, Network Named, Concurrent. Academic licenses și maintenance renewals,nu fac parte din aceasta ofertă. Embarcadero își rezervă dreptul de a modifica, anula sau amâna oricând prezenta ofertă Prezenta ofertă nu este aplicabilă daca contravine legislației locale. Se pot aplica restricții adiționale. Cum beneficiați de ofertă: Solicitați o ofertă partenerului local Embarcadero și plasați comanda înainte de data de încheiere a promoți

Read More

What Is It Like To Be A Developer Stephane Jordi?

Hello. This article is part of a series where we speak with professional software developers, ask them what it’s like to write code for a living, and perhaps gain a few insights into the software development industry along the way. Our guest today is a Delphi and C++ Builder developer who has an amazingly impressive set of pictures of him smiling nonchalantly on the slopes of some absolutely stunning volcanoes at various locations dotted around the world. Stephane Jordi, also known as Steve, is a Swiss geophysicist who made the move from computer geek to computing applied to real-life needs. He specialized in monitoring solutions, first for volcanic activities, then for nuclear power plant seismic surveillance, and enjoys porting all tools to most known platforms. Hi Steve thanks so much for taking the time out to speak with us today – I think you just came off a long flight? Yes after this I am off to bed. I woke up 26 hours ago and am jetlagged 🙂 Which Embarcadero product(s) do you use a) the most b) regularly? I would say Delphi for my current cross-platform developments and C++Builder for scientific software. Since I’m involved in data acquisition, I need very low level access to digital boards and things like that. C++ is more inclined to do so as it is compatible with a very wide 3rd party tools environment. How and/or why did you become a developer? A little bit by chance. Back in 1980 (started very early), I bought a handheld calculator in New York and discovered overnight on the flight back to Switzerland that it was programmable. I had no clue what that meant. The idea that you could let it record and play back sequences of instructions was like magic. It was an HP-33C with 49 lines (keystrokes) that could be recorded. Then my High School was offering optional classes like cooking, theatre and also computing. That world was still very closed and not accessible. Believe it or not, but I came to software development using punch cards doing Fortran IV on big mainframes. I got hooked. Steve has incredible photos which look like they were designed to be desktop wallpapers Do you think you will ever stop being a developer? If so, what would be next? No. Impossible. Once you get this into your DNA, you just want more. I love everything that comes with development: understand a problem or a need, break it into small pieces, imagine what and how they would perform operations, write the code, swear a lot, and eventually see that it works. The road from complexity to delivery is marvelous. What made you start using Delphi/C++ Builder? I was hired for summer job by a company that had only TurboC v2 at the time. That’s how I discovered the C language and the Borland product line, from Prolog to C and Pascal. Then Delphi was released and I really did enjoy the RAD aspect of it. I did know Pascal so it was an easy jump. Then I used all flavors of Turbo C/C++, Borland C++ and then C++Builder which was a natural evolution to follow Delphi. I used Turbo C++ 3 to write my first volcano monitoring software in… Guatemala. I designed the full GUI framework under DOS […]

Read More