Delphi

How To Change Your Background On Windows

unit uMainForm;   interface   uses   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,   FMX.Controls.Presentation, FMX.StdCtrls, Windows, FMX.Objects, System.IOUtils,   FMX.Layouts;   type   TMainForm = class(TForm)     MaterialOxfordBlueSB: TStyleBook;     BackgroundImage: TImage;     Button1: TButton;     GridPanelLayout1: TGridPanelLayout;     Button2: TButton;     Button3: TButton;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     procedure Button3Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }     procedure SetWallpaper(APath: String);   end;   var   MainForm: TMainForm;   implementation   {$R *.fmx}   procedure TMainForm.Button2Click(Sender: TObject); begin   SetWallpaper(TPath.Combine(ExtractFilePath(ParamStr(0)),‘delphinaut.jpg’)); end;   procedure TMainForm.Button3Click(Sender: TObject); begin   SetWallpaper(TPath.Combine(ExtractFilePath(ParamStr(0)),‘cppnaut.jpg’)); end;   procedure TMainForm.SetWallpaper(APath: String); begin   SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(APath), SPIF_SENDCHANGE); end;   procedure TMainForm.Button1Click(Sender: TObject); begin   SetWallpaper(TPath.Combine(ExtractFilePath(ParamStr(0)),‘radnaut.jpg’)); end;   end.

Read More

Join The DelphiCon2021 Referral Program to Win Amazing Prizes, Including a Mac Mini!

DelphiCon is On! The world’s biggest annual online conference on, in and around Delphi is just a week away! DelphiCon 2021 is open, free, and loaded with incredible content and amazing prizes and giveaways. If you want to know just how hot Delphi is right now, this is an unmissable event! Here at Embarcadero we want to make this year’s DelphiCon the biggest ever, and to achieve that we need your help to reach everyone who loves Delphi. To make it easy to reach Delphi fans we’ve created a referral program that can also help you win big prizes! Here’s how it works: Refer And Win Big Prizes! The Prizes: 1. Top Prize: One randomly selected referrer will win a Mac Mini (with the powerful new M1 chip, which Embarcadero’s IDEs now support). 2. Two Runners Up: Two randomly selected referrers will each win a one-year Delphi license (without update subscription). 3. Everyone who successfully refers at least one signup will be granted access to the closed Special Session near the end of DelphiCon 2021. 4. Everyone who attends three or more sessions will win the Ultimate Delphi eBook Bundle, which contains: Alistair Christie’s “Code Faster in Delphi”, Nick Hodges’ “Coding in Delphi”, “More Coding in Delphi” and “Dependency Injection in Delphi”, and Marco Cantu’s “Object Pascal Handbook” (updated specially for DelphiCon 2021). 5. Everyone who signs up for DelphiCon 2021 will get a free version of Marco Cantu’s updated “Object Pascal Handbook”. The Rules: 1. Unique referral codes are used to track referrals. Only successful referrals with unique codes will be valid. 2. Each referral that leads to a signup will count as a “ticket” for the prize draw. The more people you successfully refer who sign up, the higher your chances of winning. 3. The winners will be randomly selected from the pool of referrers. How to Participate 1. Use your unique referral code to refer friends, colleagues and anyone you know who may be interested.  2. If you haven’t signed up for DelphiCon, do so here. You will be automatically redirected to a page where you can see your unique referral code and start referring. 3. If you’ve signed up already visit this page to get your unique referral code and check your activity. Note: If the DelphiCon 2021 referral program is a success, we will be introducing an ongoing referral program that will help our subscribers win incredible prizes, giveaways, discounts and more every month! Help us make this a reality! Good luck! More About DelphiCon More than 10,000 developers will be gathering together from November 16th to 18th for panel discussions and webinars on Delphi. Speakers DelphiCon has a top-tier lineup of speakers, including Marco Cantù, David Millington, Ray Konopka, Holger Flick, Nick Hodges, Alistair Christie, David Intersimone, Jim McKeeth. Find the complete list of speakers here. Themes Our speakers and guests will be discussing the future of development with Delphi, multi-platform app development, desktop UX, Rapid App Development, developer productivity, multi-threaded programming on multiple platforms, gaming, low-code and no-code, extending Delphi’s reach with C++Builder, Telegram bots, ethereum blockchain, connecting with REST, Windows 11, and IntraWeb apps. For a complete schedule of panel discussions click here.    See you there!

Read More

How To Get The DelphiCon 2021 Desktop Wallpaper

DelphiCon 2021 is coming up soon and in order to get in the spirit we created this desktop wallpaper that captures the essence of DelphiCon. DelphiCon 2021 is the best way to learn all about your favorite programming language. Sessions are planned around the latest features, as well as general best practices, and emerging technologies that apply to all versions. There are also sessions on integrations with other languages (C++, Python, etc.) and platforms. Where can I get the DelphiCon 2021 desktop wallpaper? What better way to apply your new DelphiCon 2021 desktop wallpaper than we a Delphi Win32 API call? This works in both VCL and FMX as long as you have the Winapi.Windows unit in your uses clause. For this API call we can use SystemParametersInfo() with SPI_SETDESKWALLPAPER as the first parameter. Download the DelphiCon 2021 desktop wallpaper now! What online sessions are available at DelphiCon 2021? Here are some of the sessions you will find at DelphiCon! Keynote – Beyond 10x – The Future of Development with Delphi Convert your VCL Database Application to Mobile and Multiplatform Entity Component Systems: A Different Approach to Coding How Tab Controls Can Ruin Desktop UX Effectively Using FMX List Controls Thriller: A Delphi Web App in 5 Work Days Move Your UI to the 23rd Century – Building a Data Dashboard with Delphi and Skia. Engage! Why Does the Cloud Matter for a Delphi Developer? Maximize Your Delphi Productivity Multi-Threaded Programming on Apple’s Mac M1 vs Mac Core i7 vs Windows Core i7 Developing Applications for the Raspberry Pi with Delphi 11 Castle Game Engine – Coming to Delphi! Delphi Does Low-Code: Cross-Platform REST Client in – 30 Minutes! Smartwatch Android Meets Delphi – Controlling Devices Multi-Platform Explorations using Delphi, FMX, Feeds, REST and More Control Arduino Manipulator with Delphi and Visuino over WiFi or Bluetooth Things That You Don’t Know About JSON in Delphi Leaving Delphi 7 – A Success Migration Case Using C++Builder to Extend the Reach of Delphi Invoice Generation via Telegram Bot Using FastReport VCL and Delphi FireDAC: Combining Power and Speed in Cross Platform Database Access (Live Panel) Fintech on the Ethereum Blockchain with Delphi Delphi Best Practices: The Top Seven Things you Should be Doing Building a Web Crawler with Delphi and Python APILayer: Features and Connecting with REST Check out the full list of sessions at DelphiCon 2021! Who is presenting at DelphiCon 2021? Who are these people in bright red Greek helmets? They’re the Delphi superheroes you’ll be running into at DelphiCon 2021! And which Delphi superpowers will they be talking about at DelphiCon? Find out on the Schedule & Talks page on the DelphiCon website. Sign Up Now! Who is sponsoring DelphiCon 2021? DelphiCon 2021 is has a huge number of sponsors this year and here are some of them: How can I sign up for DelphiCon 2021? Head over to the DelphiCon 2021 website and get your free ticket today!

Read More

How To Build a Digit Classifier In Tensorflow

procedure TForm1.Button2Click(Sender: TObject); var   i, X, Y: DWORD;     fLibrary: HMODULE;   fModel: Pointer;   fInterpreterOptions: Pointer;   fInterpreter: Pointer;   fStatus: TfLiteStatus;   fInputTensorCount, fOutputTensorCount, fNumDims: Int32;   fInputTensor, fOutputTensor: Pointer;   fInputDims: Integer;   fTensorName: PAnsiChar;   fTensorType: TfLiteType;   fTensorByteSize: SIZE_T;     // 28×28 pixel image as input   fInput: array [0 .. 28 * 28 – 1] of Float32;     // output 0 to 9   fOutput: array [0 .. 10 – 1] of Float32;     fValue: Extended; begin   fLibrary := LoadLibrary(LibraryName);     if fLibrary = 0 then   begin     ShowMessage(‘Error: Load tensorflow lite library ‘ + LibraryName + ‘ – ‘ +       SysErrorMessage(GetLastError));     Exit;   end;     try     fModel := TfLiteModelCreateFromFile(PAnsiChar(AnsiString(Edit1.Text)));       if fModel = nil then     begin       ShowMessage(‘Error: Create model from file – ‘ +         SysErrorMessage(GetLastError));       Exit;     end;       fInterpreterOptions := TfLiteInterpreterOptionsCreate;       if fInterpreterOptions > nil then     begin       TfLiteInterpreterOptionsSetNumThreads(fInterpreterOptions, 2);         fInterpreter := TfLiteInterpreterCreate(fModel, fInterpreterOptions);         // parameters / model can be removed immediately after the interpreter is created       TfLiteInterpreterOptionsDelete(fInterpreterOptions);       TfLiteModelDelete(fModel);         if fInterpreter > nil then       begin         fStatus := TfLiteInterpreterAllocateTensors(fInterpreter);           fInputTensorCount := TfLiteInterpreterGetInputTensorCount(fInterpreter);         fOutputTensorCount := TfLiteInterpreterGetOutputTensorCount           (fInterpreter);           // fLiteTensor* TfLiteInterpreterGetInputTensor(const TfLiteInterpreter* interpreter, int32_t input_index);         // returned structure TfLiteTensor         // an example is simple, there is no need to translate everything from the         // in general, the source of the: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/c         { typedef struct TfLiteTensor {           TfLiteType type;           TfLitePtrUnion data;           TfLiteIntArray* dims;           TfLiteQuantizationParams params;           TfLiteAllocationType allocation_type;           size_t bytes;           const void* allocation;           const char* name;           struct TfLiteDelegate* delegate;           TfLiteBufferHandle buffer_handle;           bool data_is_stale;           bool is_variable;           TfLiteQuantization quantization;           TfLiteSparsity* sparsity;           const TfLiteIntArray* dims_signature; }         fInputTensor := TfLiteInterpreterGetInputTensor(fInterpreter, 0);         fOutputTensor := TfLiteInterpreterGetOutputTensor(fInterpreter, 0);           if fInputTensor > nil then         begin           // info about tensor           // fNumDims := TfLiteTensorNumDims(fInputTensor);           // fTensorName := TfLiteTensorName(fInputTensor);           // fTensorType := TfLiteTensorType(fInputTensor);           fTensorByteSize := TfLiteTensorByteSize(fInputTensor);             // writing pixels to fInput, top to bottom, left to right           for Y := 0 to Image1.Picture.Bitmap.Height – 1 do           begin             for X := 0 to Image1.Picture.Bitmap.Width – 1 do             begin               if (Image1.Canvas.Pixels[X, Y] > 0) then                 fInput[X + (Y * Image1.Picture.Bitmap.Width)] := 1               else                 fInput[X + (Y * Image1.Picture.Bitmap.Width)] := 0;             end;           end;             // fTensorByteSize = Length(fInput) * SizeOf(Float32)           fStatus := TfLiteTensorCopyFromBuffer(fInputTensor, @fInput,             fTensorByteSize);             fStatus := TfLiteInterpreterInvoke(fInterpreter);             if fStatus = kTfLiteOk then           begin             for i := 0 to High(fOutput) do               fOutput[i] := 0;               fOutputTensor := TfLiteInterpreterGetOutputTensor(fInterpreter, 0);               // info about tensor             // fNumDims := TfLiteTensorNumDims(fOutputTensor);             // fTensorName := TfLiteTensorName(fOutputTensor);             // fTensorType := TfLiteTensorType(fOutputTensor);             fTensorByteSize := TfLiteTensorByteSize(fOutputTensor);               if fOutputTensor > nil then             begin               // fTensorByteSize = Length(fOutput) * SizeOf(Float32)               fStatus := TfLiteTensorCopyToBuffer(fOutputTensor, @fOutput,                 fTensorByteSize);                 if fStatus = kTfLiteOk then               begin                 ListView1.Items.Clear;                   for i := 0 to Length(fOutput) – 1 do                 begin                   // ingenious solution, coolest conversion                   fValue := StrToFloat(Copy(FloatToStr(fOutput[i]), 1, 17));                     if fValue = 1 then                   begin                     with ListView1.Items.Add do                     begin                       Caption := FloatToStrF(fValue, ffNumber, 17, 17);                       SubItems.Add(IntToStr(i));                     end;                   end;                 end;                   ListView1.AlphaSort;                   Beep;               end;             end;           end;         end;       end;     end;   finally     FreeLibrary(fLibrary);   end; end;

Read More

Everything You Need To Know About Blockchain

Blockchain is a term utilized to represent distributed ledger technology. Blockchain is used to build a storage system for data in a distributed and immutable mode. So there are key features we need to mention. Immutability – this means that once data is written to a blockchain data storage or ledger, it cannot be changed – so it’s there forever. For instance, in a relational database, no matter how much security you have, the data can be accessed and modified on the system. A blockchain system guarantees that if one bit of data is altered it says it is in an invalid state, and since the data is distributed on various systems, the verified data with a justified state can be retrieved. Distribution – is the key to trust. As long as the data you see is in the blockchain and it’s in a valid state you can trust the data to be accurate. This trust is the key and this trust is achieved in a blockchain system by replicating the datastore on several hosts on the internet. For instance, as long as the peers accept that bit of data is valid, so you can completely trust that data that is stored on that system. In Blockchain the trust is requisite. Immutability – Trust Distribution – valid/invalid For many industries trust is a problem. The automobile industry is one of those where trust, or lack of it, causes problems. People order used cars from other countries which do not easily share tracking information and this can mean that faking data about the car’s prevenance and history is easier. For instance, odometer fraud is one of the problems that you can seriously impact the value of a vehicle. Representing a vehicle as having been used 5,000 miles instead of 50,000 miles can mean a huge difference in perceived value and potential usable life span of the car or truck. In many countries car service records are largely kept on paper which can of course very easy to be fake.  So, let’s imagine that pushing all service providers to a blockchain and all the readings kept on the blockchain. The integrity and immutability of the blockchain data means that a modification of the records would be detectable. Moreover, agencies such as insurance companies can also contribute by appending accident details of a car giving a much more complete picture of the vehicle’s history in a way which is very difficult or even impossible for dishonest vendors to fake. Transferring money from one country to another takes your time and can be expensive because of the need to comply with multiple different regulations and policies, but eventually, another person receives the money. Your bank updates its records and sends them to the main clearing bank in your country where they are passed through a number of systems where it analyzes them to prevent money laundering and to comply with various trade embargoes. Assuming your transaction passes the checks, the funds are then sent them to another country’s clearing bank. They again update the record and send it to the receiver’s bank account. Even in these highly automated times, it can take several days for the money to arrive in the destination account. This is where Bitcoin can offer an alternative to the traditional brocks and […]

Read More

RADoween: Full-Stack Web App Development with Delphi and TMS

Up and running from concept to launch in just five days On October 14, Atanas emailed Bruno with an idea for a TMS WEB Core-powered web app to run our internal partner Halloween costume contest. The goal was for a simple web page where team members could submit pictures of their Halloween costumes, and then everyone could vote on their favorites. Oh, and we needed it ASAP so we would have time to use it. The idea is simple, but as any experienced programmer can tell you, there are a lot of technical questions and requirements to satisfy: Can you take pictures from the web app or just upload them? Setting up the back end to store the data Communication from the front end to the back end Preventing spam votes An administrative interface for everything Especially in web development, it is common to divide developers into two categories: front-end and back-end. The reason for this is that, most often, two completely different programming languages are required. The front end runs on JavaScript (with WebAssembly still gathering momentum), while the back end runs on various languages: PHP, C#, Java, Python, Perl, etc. The running joke in software development is that the front end looks impressive, but the back end is scary. From a conceptual point of view, a front-end developer builds the part the user sees, making UI and design esthetics important. In contrast, the back-end developer-only creates the part that other developers see. Ideally, both parts are well designed, but now I’m off in the weeds and forgot the purpose of this blog post. When you take all the software and tools used to build an application, that is referred to as the stack. The most common web stack is LAMP, an acronym that initially stood for Linux, Apache, MySQL, PHP, but this is incomplete as it assumes JavaScript is the only solution for the in-browser. One of the reasons Node.js was so popular is that it allowed developers to use JavaScript on the back end as well as the front-end. This made the concept of a full-stack more popular: No longer would two different skill sets and programming languages be needed: Everyone can just use JavaScript everywhere! Well, JavaScript isn’t the only full-stack programming language. In my mind, Delphi conceptualized full-stack development with its client-server architectures. Instead of using PHP or Java (both released the same year as Delphi) for the back end, and then something else for the front end, Delphi did everything in the same IDE with the same programming language. In 1995 most web applications were just static HTML (Cascading Style Sheets didn’t even appear until 1996, and they took a while to catch on). And while JavaScript was born in 1995 along with Delphi, PHP, Java, and many other modern programming languages, it still hadn’t seen widespread adoption. Today, most web pages make heavy use of JavaScript. Sometimes there is more JavaScript code than the rest of the HTML, CSS, and images combined. Okay, that was an interesting dive into stacks, front ends, back ends, and the history of web development, but what does all of that have to do with Halloween? Glad you asked—Delphi is still a fabulously productive full-stack development tool for web application development thanks to the power of TMS WEB Core front-end and TMS XData back end, and […]

Read More

What Is It Like To Be A Developer Serge Pilko?

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. Today we have a very popular member of the Delphi and RAD Studio developer community, Serge Pilko. Serge and I have collaborated behind the scenes on a few things in the last couple of years for Embarcadero and he’s one of those truly positive people who just oozes developer talent. Serge is CEO of Embarcadero Tech Partner, Softacom, a company based in Minsk, Belarus with customers from all around the world including the United States, Denmark, Belgium, Germany, Netherlands and more than 15 others. Hi, Serge. We’ve been crossed paths as developers for several years but I think this is the first time you’ve given an interview for Embarcadero. Could you tell us a bit about yourself and your professional journey from a Delphi developer to CEO of a Delphi software development company? Hi Ian, thank you for inviting me for this interview. My name is Serge Pilko and I am the CEO of Softacom, a Delphi software development company. Remembering my youth I wouldn’t say that I fell in love with technologies. In high school,  when we were studying C ++ and Visual Basic, I hated them. I had scores from 2 to 3 in the programming. So the choice of a software developer career was made under the influence of my parents. At the university, I got quite excited with programming because I was lucky to have a great teacher comparing to high school where I was unlucky 😁. At the university I started studying Delphi 3 (at that time it was the latest Delphi version) and decided to explore it deeper. Looking ahead I should mention that later this interest in Delphi has guided me to becoming a Delphi Evangelist and the first Embarcadero MVP in Belarus. But let’s come back to the chronology of the events. During and after my graduation, I worked as a developer for around 10 years and in 2008 I decided to start a new chapter of my career. I created my own company Softacom that today unites the best Delphi experts in Belarus. Though we offer a wide range of software development services, we focus on the modernization and migration of legacy software and work with local and foreign companies of different sizes. Today, our company is an official consulting and training partner of Embarcadero and acts as a certified consulting partner of TMS Software. The Softacom Website Do you remember your first projects that inspired you to follow a career in development? I think that those short projects I had during the first 2-3 years at the university did the job. They made me think that I got excited experimenting with some student databases, text editors and, of course, a calculator. I think that every Delphi developer started with a calculator. That was in the late 90ss. It was really inspired to create a GUI app easily, when instead of a console app you can have an amazing app with a rich user interface. Btw, I have a funny story about that. We (students) were young and had an inquisitive […]

Read More

All You Need To Know About Using Low Code REST

REST is a type of software architecture that was designed to ensure interoperability between different Internet computer systems. Basically the idea is that services that comply with REST architecture can more easily communicate with one another. REST stands for representational state transfer and it was proposed by computer scientist Roy Fielding’s 2000 PhD thesis, Architectural Styles and the Design of Network-based Software Architectures, in which he introduced and described REST. What is REST and why should I learn more about it? The goal of REST is to increase performance, scalability, simplicity, modifiability, visibility, portability, and reliability. This is achieved through following REST principles such as a client–server architecture, statelessness, cacheability, use of a layered system, support for code on demand, and using a uniform interface. You can have access to the complete original Roy Fielding’s 2000 PhD thesis here: https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm Who is Roy Fielding? Dr. Fielding was deeply involved in the web’s early development and standardization, he began working at and for the World Wide Web Consortium in 1994 and co-authored the HTTP 1.0 specification. Later he was the main author behind the HTTP 1.1 and URI specs also co-founded the Apache web server project. The name “Representational State Transfer” is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through the application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use. Fielding’s approach was to make sure that the REST architectural style emphasises the scalability of interactions between components, uniform interfaces, independent deployment of components, and the creation of a layered architecture to facilitate caching components to reduce user-perceived latency, enforce security, and encapsulate legacy systems. Are there rules on how to implement REST? REST does not enforce any rule regarding how it should be implemented at lower level, it just put high level design guidelines and leaves you to think of your own implementation. What we do have is the definition of 6 architectural constraints which make any web service – a true RESTful API. Client–server: By separating the user interface concerns from the data storage concerns, we improve the portability of the user interface across multiple platforms and improve scalability by simplifying the server components. Stateless: Each request from client to server must contain all of the information necessary to understand the request, and cannot take advantage of any stored context on the server. Session state is therefore kept entirely on the client. Cacheable: Cache constraints require that the data within a response to a request be implicitly or explicitly labeled as cacheable or non-cacheable. If a response is cacheable, then a client cache is given the right to reuse that response data for later, equivalent requests. Uniform interface: By applying the software engineering principle of generality to the component interface, the overall system architecture is simplified and the visibility of interactions is improved. In order to obtain a uniform interface, multiple architectural constraints are needed to guide the behavior of components. REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state. Layered system: The layered system style allows […]

Read More

Gain A Python Performance Revolution With Delphi

According to TIOBE Python has overtaken Java and is most likely to overtake C in the near future. Python is the most searched language according to PYPL Index. There are some advantages to using Python for this popularity. Here are some advantages: Python is easy to read, learn and write. Improved productivity due to its simplicity. Effectively executes the code sequentially line by line which can make it easier to debug than event-driven code. Automatically assigns the data type during execution. Free and Open-Source. Huge standard library of read-made functions and features. Code once and run on many platforms. Why is the source code of a typical Python program so short? This brevity comes about because Python has a huge standard library allowing many activities and functionality to be expressed with smaller and more succinct program statements compared to many other languages. There is a test in Github to prove this code-brevity hypothesis. It is called Raytracer benchmarks and it’s based on examples from Typescript. Python got second place with just 275 lines of code. You can check that here. https://github.com/edin/raytracer How can I run Python scripts in Delphi? It’s great if we can take the advantage of Python’s advantages in our Delphi application, combing the best of both worlds. Let’s see how we can run a Python script inside a Delphi application. The easiest way to do that is by using Python for Delphi (P4D). Python for Delphi (P4D) is an open-source project by pyscripter. You can find the source code of Python for Delphi (P4D) from this link. https://github.com/pyscripter/python4delphi You can clone the source and install components by using the packages in the packages folder. Then add the source path to the library and you are ready to go. Are there any demo applications of using Python in Delphi programs? There are many Demo applications you can run out of the box. There are two components we use often. TPythonEngine: We use this component to execute Python scripts. TPythonGUIInputOutput: We use this component to get output to a UI component (Eg: TMemo). By using those components, we can execute a Python script and get the result with just a single line of code. procedure TForm1.Button1Click(Sender: TObject); begin PythonEngine1.ExecStrings( Memo1.Lines ); end; procedure TForm1.Button1Click(Sender: TObject); begin    PythonEngine1.ExecStrings( Memo1.Lines ); end; You can run the Demo projects and get results from a Python script at runtime. Did you know you can run Python programs with Delphi? These two languages combined together make a remarkably comprehensive solution to almost any software problem you can imagine. Why not download a free trial of RAD Studio Delphi and try out the power of Delphi and Python combined today?

Read More

Get To Know This Industry-Leading Mobile Lighting Delphi App

MyInterface is the deceptively simple yet powerful client application for the industry-leading LightFactory system from New Zealand developer Dream Solutions Limited. The MyInterface app, which is written using the excellent cross-platform features of the RAD Studio Delphi Firemonkey FMX framework, runs on iOS and Android devices. Dream Solutions say, “This app connects to LightFactory or NEO systems and displays the interfaces build using the Mobile Interface Builder. When started the app will show a list of available interfaces that are being served by the system. Using this tool, you can click and drag buttons, sliders, images, text and switches onto a custom mobile form. You can save as many layouts as you want that are then served to the mobile device from LightFactory. Open the MyInterface app on your iOS or Android device and a list of available layouts is shown. When selected the layout you created will show and can be used to control your LightFactory system.” The Lightfactory Website Dream Solutions have a number of other apps in the Android Play and Apple App Stores. We’ve written about one or two of them before here: https://blogs.embarcadero.com/lframote-a-gorgeous-light-remote-android-mobile-app-integration/ Thanks to Dream Solutions for choosing the power of RAD Studio to make their solutions available. App Website MyInterface Apple Store MyInterface Google Play MyInterface Screenshot Gallery

Read More