Quantcast
Channel: Latest blog entries - Embarcadero Community
Viewing all 1683 articles
Browse latest View live

LIVE! Monday at 9 AM PST – Podcast Episode on Programming Books

$
0
0

On Monday this week David, Craig, and Jim discuss some of their favorite programming books, both focusing on Delphi and C++ specific ones, and general programming topics.

Live at these corresponding times:

Location Local Time Time Zone UTC Offset
San Jose (USA – California) Monday, February 19, 2018 at 9:00:00 am PST UTC-8 hours
Boise (USA – Idaho) Monday, February 19, 2018 at 10:00:00 am MST UTC-7 hours
Austin (USA – Texas) Monday, February 19, 2018 at 11:00:00 am CST UTC-6 hours
New York (USA – New York) Monday, February 19, 2018 at 12:00:00 noon EST UTC-5 hours
London (United Kingdom – England) Monday, February 19, 2018 at 5:00:00 pm GMT UTC
São Paulo (Brazil – São Paulo) Monday, February 19, 2018 at 2:00:00 pm BRT UTC-3 hours
New Delhi (India – Delhi) Monday, February 19, 2018 at 10:30:00 pm IST UTC+5:30 hours
Tokyo (Japan) Tuesday, February 20, 2018 at 2:00:00 am JST UTC+9 hours
Sydney (Australia – New South Wales) Tuesday, February 20, 2018 at 4:00:00 am AEDT UTC+11 hours
Corresponding UTC (GMT) Monday, February 19, 2018 at 17:00:00

Read More

Tech Tipp #13: ELC unter Windows Server 2016 / ELC 5.33

Todo sobre el CodeRage XII en Español

$
0
0

La semana pasada, jueves y viernes 15 y 16 de febrero, tuvimos la edición en español de CodeRage:

Code-Rage_800x800_Spain.jpg
Con un número récord de asistentes, todas las presentaciones fueron clasificadas como muy útiles por los clientes que estuvieron en línea con nosotros.

A continuación tienes el playlist con todos los videos en nuestro nuevo canal exclusivo para LatAm:

Si quieres compartir estos videos con otra persona, por favor, tenemos una URL corta para usted: http://embt.co/CRXIISpanish-replay

También tenemos todos los ejemplos puestos a disposición por nuestros increíbles presentadores en este repositorio de GitHub: https://github.com/flrizzato/CodeRageXII-Spanish

Además, me gustaría revisar algunas informaciones importantes transmitidas a los asistentes durante el evento:

#1 Tenemos un nuevo Programa Académico, tanto para Universidades y Escuelas Técnicas, públicas y privadas. Por favor, contáctenos para más información: sales at embarcadero dot com

#2 Estamos buscando casos de éxito, si tiene un gran proyecto o producto, ¡por favor háganoslo saber! Envíe su mensaje a fernando.rizzato at embarcadero dot com

#3 ¡Estamos comenzando una nueva serie de episodios en Delphi Academy esta semana! Acceda aquí para suscribirse: http://embt.co/AcademyLA

#4 ¡Tenemos muchas promociones que harán más fácil su actualización a las últimas versiones de Delphi o C ++ Builder! Por favor, mire aquí para más detalles, y asegúrese de contactar a uno de nuestros socios: https://www.embarcadero.com/es/partners/reseller

 

 


Read More

Borland OWL to C++ Builder VCL

$
0
0

Every once in a while, I get a request to help migrate Borland OWL applications to C++ Builder VCL applications.

Background

The Object Windows Library (OWL) is a C++ object-oriented application framework designed to simplify desktop application development for Windows.

OWL was introduced by Borland in 1991 and eventually deprecated in 1997 in favor of their Visual Component Library(VCL). Its primary competitor was the Microsoft Foundation Class Library (MFC). OWLNext, an open-source project driven by the OWL user community, has continued the maintenance of OWL, ensuring that the library and applications that use it work with the latest version of Windows and modern C++ compilers.

For additional OWL history see:  https://en.wikipedia.org/wiki/Object_Windows_Library

In 1997, Borland released C++Builder and deprecated Borland C++. OWL was included on the Companion CD that shipped with C++Builder, but Borland ended maintenance and further development of the library.

In late 1999, Borland stopped selling Borland C++ and OWL.

The current C++Builder IDEs do not have any native support for the OWL. That is to say, the newer Borland C++ Builder (BCB) does not ship with the OWL and does not contain any wizards to create OWL projects.

OWLNext

But, support for OWL has been taken up by a user group named OWLNext. They periodically release patches to the OWL and have a version of OWL that does work with many of the newer C++ Builders (BCB).  Check out their website here: https://owlnext.sourceforge.net

OwlNext can be downloaded from Embarcadero Code Central here.

OWL stands for Object Windows Library. It is a C++ GUI framework for creating Windows applications, developed by Borland.
OWLNext is a free upgrade for OWL, compatible with modern C++ compilers and operating systems.

For more information on OWLNext, see http://www.owlnext.org/

How to compile OWL applications with C++ Builder

There are two basic challenges you must address in getting your OWL application to compile with C++ Builder.

1. Get the OWL installed on the system. This may involve building OWL runtimes or libraries. This depends on OWLNext's installation procedure.  Following the setupbds.html from the OWLNext download, I was easily able to install OwlNext into my C++ Builder 10.2.2 allowing me to build and run OWL applications using C++ Builder 10.2.2:

OWL_CppBuilder

2. Re-create your project file in the newer C++ Builder format. For example, you can open a .bdsproj or a .cbproj project type in the current C++ Builder IDE.  If your project is simply a makefile, you may be able to use the command line compiler, but if you want to compile in the IDE, you will need to create a new project file of the same project type (console and/or VCL) and add your OWL source code to it. You should also make sure your project contains include and library path information for the OWL.

Customers have reported that OWLNext has done a great job in carrying OWL and making sure it is compatible with many different versions of BCB. With a little persistence and patience, your OWL project can be built with BCB.

Converting OWL apps to Visual Component Library (VCL)

Items to consider converting OWL apps to Visual Component Library (VCL) for C++Builder 10.2.2 are mainly on how to handle:

1.    OWL TDC (Device Context).  The TDC to TCanvas conversion is fairly easy.

The VCL’s TCanvas is the device context that is an ensemble of the tools needed to draw lines, shapes, and other graphics. It includes the platform you draw on, the dimensioning of the platform, the orientation and other variations of your drawing, the tools you need to draw on the platform, the colors, and various other accessories that can complete your imagination.

2.    OWL Response Table transition (CEnable, etc).  The response table conversions may require some work.  

The CEnable will also require work, but you may be able to use the TActionList.  The VCL’s TActionList maintains a list of actions that can be used by components and controls such as menu items and buttons.

3.    OWL IDE transition. Depending on how much you rely on the OWL Doc/View architecture this may need to be redesigned?

4.    Graphics/Bitmap APIs.  As far as graphics are concerned you need to consider the platforms you are targeting as the Graphics Device Interface (GDI) seems to be going away.  You would need to consider Direct2D which C++ Builder started supporting in C++ Builder XE2 on Win7.

Additional help, if needed:
1) Embarcadero provides an .IDE project converter that converts the BCx+ projects to BCBx format, which C++ Builder 10.2.2 should be able to read and bring into the present MSBuild file format.

2. Depending on your schedule, you might want to consider going with OWLNext (this is an opensource OWL project that was brought up to date and enhanced for the new Operating Systems and works with current C++ Builder IDEs) and run a VCL conversion of the application in parallel.  The more you can decouple the core functionality from the UI the easier this process will be.

3. No migration tool for OWL to VCL that I know of. OWL is primarily code based, and the VCL is visual - they are much less convertible than even VCL and FireMonkey (FMX).

For example to display a Windows Form from a C++ Builder Console application using OWL with the Form.Caption = My Main Form, the OWL code looks like this:

Owl_MyMainForm

4. Using OWLNext does not solve the problem of migrating off OWL completely.  OWL was already outdated around 1997 when the VCL become available to C++, and uses a very old design style in that it describes and builds UIs in code; OWLNext will get you modern compiler support and new controls, but it won't make the UI any more maintainable or easy to change and design. It's suitable for upgrading to C++ Builder 10.2.2 Tokyo and getting the codebase working, moving to Unicode, etc. So OWLNext is a good step for upgrade and migration, but long term, it’s recommended that you move to the VCL or FMX.  Certainly doing that in two steps, using OWLNext for the first step, would be a great approach.

5. With OWLNext, you might be able to get in touch with the developers via their SourceForge page, and they may have advice for you.

Options for Converting OWL apps to Visual Component Library (VCL)

1. Upgrade to OWLNext and then rebuild the VCL in C++Builder.  First get your projects to compile in current C++ Builder with OWLNext, then move over the app and document classes, and step by step starting with the main window migrate to VCL.

2. OWL TDC (Device Context).  The TDC to TCanvas conversion is fairly easy.

3. OWL Response Table transition (CEnable, etc).  The response table conversions may require some work.  

The CEnable will also require work, but you may be able to use the TActionList.

4.  OWL IDE transition. Depending on how much you rely on the Doc/View architecture this may need to be redesigned?  With both this and the OWL application and document classes, you can write new classes keeping the same interface, i.e. same methods (of all the methods in the classes, there may be a lot but most likely you aren't using all of them.)  This will give you stub classes, i.e. completely empty methods, but allow you to compile.  Create your singleton instance of your replacement-OWL application where the main TApplication is created, too, so it has the same lifetime.

5. Next, start implementing the classes.  CEnable should be straightforward and you can code something so it gets updated in OnIdle, or possibly hooked into an action list's events. 

6. Document and Application should also be straightforward and often quite small code. 

7. The biggest thing may be reworking the UI, and redo the main window in VCL.  Here you will need to recreate menus, toolbars, and using actions and action lists.  This will let you eliminate a lot of CEnable objects, though many may remain for other windows, e.g. child windows.  Also can code a CEnable -> action layer too, which allows actions to be created but the code to still use a CEnable API, or events, or something. 

8. Dialogs for a while were still OWL (you can call them, parented, since you can access the Handle) and ported bit by bit.  It's a reasonable amount of work, but straightforward.  The goal is to get the app to compile in C++ Builder 10.2.2, then iteratively replace code, as needed.  Do not be fearful to comment out large sections of code, have many empty stub methods, etc., and come back and uncomment or rewrite that code over time.  It'll be considerably easier if the UI and logic are separated, but often this isn't the case.

9. C++ Builder has SDI and MDI wizard projects if needed.  SDI is a single-document interface, is an application primarily made of a form equipped with a menu. An example is Notepad.  In some cases, an SDI can also have a toolbar and/or a status bar. An example is a Microsoft Works Spreadsheet.

MDI is a multiple-document interface, is an application that primarily has a form and a menu. Some, if not most MDIs also have one or more toolbars and/or a status bar.  Like a normal application, to use an MDI, the user must launch it. In some cases, when the application starts, it is empty; that is, no document is created and the title bar displays a caption, usually the name of the application.  Usually, there are steps the user must follow to create a document. In some other cases, when the application is launched, it automatically creates a document. A document resides inside the parent frame of the application. That is, a child document can use only the area reserved for it. The child document has its own system icon, its own title bar, and its system buttons (Minimize, Maximize/Restore, and Close).

For SDI and MDI details and examples see:  http://www.functionx.com/cppbuilder/topics/sdimdi.htm

6. Graphics/Bitmap APIs.  As far as graphics are concerned you need to consider the platforms you are targeting as the Graphics Device Interface (GDI) seems to be going away.  You would need to consider Direct2D which we support in XE2 on Win7.

I'd suggest this as a second step.  Get your OWL app working first, then consider things like upgrading graphics APIs.

And remember Embarcadero is here to help!

[DownloadButton Product='Cbuilder' Caption='To get started migration your Borland OWL applications to the current C++ Builder VCL, please download the C++ Builder 10.2.2 Trial '] 

and OwlNext can be downloaded from Embarcadero Code Central here and install OWLNext into your C++ Builder 10.2.2 IDE. 

 


Read More

LIVE! Episode on Delphi Games and Graphics Engines

Updated build of Boost for C++Builder 10.2 addressing a RTL linking issue

$
0
0

C++Builder supports Boost, a common and useful C++ library.  Through the GetIt package manager, you can install a build of v1.55 for our Clang compilers, or if you are using the classic compiler, an older version of Boost, v1.39.

The version available on GetIt for 10.2 had an issue for non-header-only Boost libraries.  Most of Boost is available through headers, but some libraries, like system and filesystem, require .cpp files and so build and are linked against our RTL.  The download linked these against the 10.1 version of our RTL.  It is always a bad idea to try to link files built with two different versions against each other (never do this!) and we've made significant improvements in our RTL since 10.1 in some low-level areas and this meant the files would not link at all.

We have an updated build of Boost available now.

  • Make sure you are running 10.2.2 build 2004 (check this in the About box, including that it is build 2004.)
  • Go to GetIt, and find Boost
  • If you mouse over it to show the info text, you will see it is updated this month, Feb 2018.
  • Install it


Read More

RTLリンクの問題に対応するC++Builder 10.2向けBoostアップデートビルド

$
0
0

C++Builder は、便利な標準のC++ライブラリである Boost をサポートしています。GetItパッケージマネージャを使えば、エンバカデロのClangコンパイラ向けに v1.55 ビルドをインストールできます(クラシックコンパイラを使っている方は、従来バージョンの Boost v 1.39 を使用できます)。

 

 

 

10.2 向けの GetIt で入手できるバージョンでは、ヘッダなし(non-header-only)Boost ライブラリで問題がありました。Boost の多くは、ヘッダとともに提供されてますが、いくつかについて、例えば、system、filesystemなどでは、.cpp ファイルを必要とし、RTLに対してリンクされます。このダウンロードは、バージョン 10.1 の RTL に対してリンクしていました。それぞれが2つの異なるバージョンにリンクしようとするのは、よい考えではありません(これは行うべきではありません!)。また、10.1 以降、低レベルの領域で RTL に対して多くの改善を加えており、つまりは、すべてがリンクされないということを意味します。 

 

Boostのアップデートされたビルドが今すぐ利用可能です。

  • 10.2.2 build 2004を実行していることを確認してください(メニューのバージョン情報で確認してください)。
  • GetItに行き、Boostで検索
  • 情報テキストを表示するためにその上にマウスを置くと、「2 2018」更新されています。
  • その後インストール作業を行ってください。

 


Read More

Neue Webinare: Delphi und die Blockchain / ELC - Enterprise License Center

$
0
0

Für die nächsten Wochen habe ich zwei weitere Webinare geplant:

Webinar: Die Blockchain (und Kryptowährungen) verstehen

Dieses Webinar gibt einen Überblick über die Möglichkeiten der Blockchain mit kleinen Beispielen in Delphi.

Eine Einführung in

  • Kryptographie
  • Kryptowährungen
  • Bitcoins, Ethereum & PascalCoin
  • Digitale Beträge / Smart Contracts
  • Bitcoin Preisüberwachung
  • Mining
  • Proof of work
  • Blockchain Übersicht
  • Blockchain Chat

und weitere Einsatzmöglichkeiten der Blockchain

Mit praktischen Beispielen in und mit Delphi.

Mittwoch, 7. März 2018
10:00 - 11:00 CEST

Anmeldung: http://forms.embarcadero.com/blockchain

 

Webinar: Lizenzverwaltung in der eigenen Hand mit dem Lizenzserver von Embarcadero 

Das Enterprise License Center ist die ideale Weise, wie Sie das komplette Lizenzmanagement von Embarcadero-Produkten im Hause managen können. Sie sind nicht mehr darauf angewiesen Produkte zu "aktivieren" oder Lizenzen über den Support zu transferieren. Alles ist in Ihrer Hand.

Dieses Webinar gibt einen Überblick über die Möglichkeiten des Enterprise License Center.

Zielgruppe: Lizenzadministratoren und solche, die es werden wollen / Unternehmen mit vielen Lizenzen / Unternehmen mit wechselnder Belegschaft.

Mittwoch, 14. März 2018
10:00 - 11:00 CEST

Anmeldung: http://forms.embarcadero.com/LicenseServer


Read More

Running a Delphi Linux Application on Google Cloud Shell

$
0
0

Google has made available to all its Gmail users a Linux Shell to interact with their Cloud Services, called Google Cloud Shell. This shell is a free Debian 7 shell with 5Gb of storage. It is not a VM that keeps running while you are disconnected, but it is a shell allowing you to perform task on a Linux box. Every time the session expires and you reconnect, a new machine is created for you. The 5GB of storage is persistent, though.

You access to this shell via browser at:

https://console.cloud.google.com/home/dashboard?cloudshell=true

It is an online Linux machine you can use... also for running Delphi Linux applications. So, as an experiment, I've written a console app that downloads some RSS feeds data (via TIdHTTP) and dumps it in a local file. The file name is a timestamp:

SaveToFile (FormatDateTime ('yymmdd_hhnnss', Now) + '.txt');

I've pushed it to a web site, opened the shell, used wget (plus the URL) to download it, chmod u+x to mark it as an executable for the user, and could simply invoke it in the local folder, as in the image below:

Now the power of this shell comes from integrating with other Google Cloud services, but it certainly nice to have a Linux shell at hand, for free, for running any application including those you build with Delphi Tokyo for Linux.


Read More

Delphi PodCast – Favorite Coding Books

$
0
0

As many of you may already be aware, I am now a regular guest on Jim McKeeth’s Delphi podcast along side David Millington.
The pod-casts recently became video streamed, and have adopted a more structured “Themed Episode” format.

Catch us Live on Tuesdays at noon CST.

In case you missed it, here’s the Feb 19th 2018 episode on our Favorite Coding Books:

 


Read More

Delphi PodCast – Delphi Game Engines

$
0
0

In case you missed it, here’s the Delphi podcast for Feb 27th 2018 – Delphi Game Engines

(skip to about 9:30 to spare yourself the technical difficulties with the stream)


Read More

Atanas Popov: Modernisieren Sie Ihre Apps

$
0
0

Hier in einer Deutschen Übersetzung / Original: https://community.embarcadero.com/article/16606-modernize-your-apps


 

Die Modernisierung ihrer Apps ist für viele unserer Kunden nach wie vor eines der wichtigsten Themen. Delphi gibt es nun schon seit geraumer Zeit und so gibt es auch noch viele großartige "ältere" Apps, die teilweise schon mit Delphi 7 entwickelt wurden. Auf der einen Seite ist dies natürlich ein Beweis für die herausragende Qualität unserer Entwicklungsframeworks, auf der anderen Seite sind zehn Jahre alte Apps in vielen Bereichen, naja einfach zu alt… Die Mitglieder unserer Entwicklergemeinde ziehen daher um auf die neuesten Versionen, damit sie ihren Kunden moderne, ansprechende Produkte anbieten können. Auch wir haben intern mit RAD Studio eine lange Reise gemacht und auch wenn es nicht immer der einfachste Weg ist, ist es die Mühe wert. Ich denke, dass wir letztendlich große Fortschritte machen, daher möchte ich einige Erfahrungen mit Ihnen teilen, die Sie vielleicht unterstützen, um Ihren eigenen Weg für die Modernisierung Ihrer Apps zu planen.

Modernisieren Sie die Benutzeroberfläche

Ich denke, der schwierigste Teil eines Modernisierungsprozesses ist es, überzeugende Argumente für eine Aktualisierung der Benutzeroberfläche zu finden. Viele Leute meinen, wenn etwas funktioniert, interessiert sich niemand mehr dafür, ob ein Icon alt aussieht oder nicht. Auch fällt es Entwicklern oft schwer, sich leidenschaftlich für ein neues Outfit zu engagieren, da sie sich häufig gar nicht so sehr um den "Look-and-Feel" kümmern. Dennoch kann sich ein modernes Erscheinungsbild vergleichsweise als GEWALTIG erweisen. Wir haben in den letzten zwei Jahren schrittweise viele Aktualisierungen in RAD Studio vorgenommen und noch einige mehr sind in Planung. In Umfragen wird selten das "Look-and-Feel" priorisiert. Kunden mit Unternehmenssoftware geben auch selten zu, dass sie eine Softwarelösung zu kaufen, weil "sie hübsch aussieht". Sobald jedoch Verbesserungen an der Benutzeroberfläche vorgenommen werden, stellt sich der Einfluss als überraschend stark heraus, vor allem bei älteren Delphi-Apps. Es ist ein Kampf, den es zu kämpfen lohnt und glücklicherweise erleichtern einige der aktuellen VCL- und FMX-Tools die Implementierung. Nehmen Sie sich die Zeit und machen  Sie es richtig. Es lohnt sich auf jeden Fall, professionelle Hilfe von Designern in Anspruch zu nehmen (wieder etwas, was viele Entwickler nicht tun). Unterschätzen Sie die Wirkung von schönen, qualitativ hochwertigen Icons nicht. In der Grafik sehen Sie einige Beispiele von Symbolen, die wir für die Version 10.2.2 verwendet haben. Es gibt so viele Möglichkeiten, die sehr preiswert sind. Ich schätze zum Beispiel die Icons von www.icons8.com.

Mobile Apps

Einer der großen Vorzüge von Delphi ist FMX, denn mit der zunehmenden Verbreitung von Smartphones (~ 70% bis 2018) gewinnt FMX zunehmend an Bedeutung. Wenn Sie die VCL kennen, wird Ihnen auch die Entwicklung mit FMX nicht schwer fallen. Natürlich gibt es einige spezifische Styling- und Verhaltensmerkmale. Und zugegebenermaßen müssen wir den Workflow in RAD Studio noch verbessern, aber die Produktivität ist auch jetzt schon einfach beeindruckend. Die meisten anderen Lösungsansätze erfordern ein separates Team und eigene Investitionen. Früher wurden mobile Apps als separates Projekt ausgelagert. Mit FMX ist das Vergangenheit. FMX ermöglicht es Ihrem Delphi-Team, mobile Apps selbst zu erstellen. Vorhandene Apps müssen nicht neu entwickelt werden. Dennoch sind natürlich einige sinnvolle mobile Erweiterungen ein Muss. Ihre Apps werden sehr erfolgreich sein und die dahinter stehende Delphi-Technologie wird man zu Recht als fortschrittlich anerkennen. Auch können Sie Ihr Team unterstützen. Es gibt eine Menge an Trainingshilfen, um den Einstieg zu erleichtern. Ich persönlich bevorzuge die Delphi Styles, die einige sehr raffinierte Custom Looks liefern (in der Grafik sehen Sie ein paar tolle FMX Style Templates von  www.delphistyles.com).

Machen Sie Ihre Anwendung "mehrschichtig"

Architektur ist kein Kinderspiel. Auch sehr gute, erfahrene Entwickler können nicht in allen Bereichen alle erforderlichen Kenntnisse haben, ganz einfach wegen der großen Bandbreite an Themen in der Softwareentwicklung. Manchmal ist es einfach so, dass Änderungen an der Architektur, z. B. die Weiterentwicklung von einer Desktop-App zu einer mehrschichtigen Anwendung, selbst für die erfahrensten Entwickler mit einer neuen Lernerfahrung einhergehen. Es ist immer eine Bereicherung, zu lernen oder Unterstützung von außen zu bekommen. Unser Ziel ist es daher, Änderungen in der Architektur zu vereinfachen, z. B. mit RAD Server, der mit hervorragenden Funktionen für die Unterstützung von mehrschichtigen Architekturen ausgestattet ist. Es ist keine unmögliche Aufgabe, eine alte App in eine mehrschichtige Version zu bringen, dennoch gibt es keine Garantien (der Erfolg ist davon abhängig, wie sie erstellt wurde). Ich habe mit vielen Entwicklern gesprochen, die zunächst recht skeptisch waren. Als sie sich aber mit dem Thema auseinandersetzten, stellte sich heraus, dass die Mühen viel geringer ausfielen als erwartet. Mit Sicherheit ist es sehr viel günstiger als der Umstieg auf eine andere Plattform mit einer anderen Sprache wie Java. Ein einfacher Ansatz besteht darin, klein zu beginnen und so viel wie möglich zu modularisieren. Verwerfen Sie den VCL-Client nicht zu schnell. Die Geschwindigkeit, die er liefern kann, insbesondere in sensiblen Umgebungen, in denen Sekunden wichtig sind, sind einzigartig. Ich weiß von einigen Versuchen, mit Java ein Rebuild zu erstellen und damit eine VCL-App zu ersetzen, die mehrere Millionen Dollar kosteten. Die Benutzer haben sie im Endeffekt einfach nicht angenommenen …  eine unglaubliche Verschwendung.

"Webify"

Kein Wort, das Sie in einem Wörterbuch finden werden, aber die Bedeutung liegt auf der Hand. Es gibt mittlerweile zahlreiche Ansätze, mit Delphi Applikationen für das Web zu erstellen. Im Idealfall entwickeln Sie eine mehrstufige App und einen unabhängigen Web-Client dazu.

Natürlich empfehlen wir Ext JS, da es jetzt Teil der Familie ist, aber es gibt noch viele andere gute Client-Web-Technologien. 

Ein anderer, vielleicht schnellerer Ansatz ist, ein Tool wie UniGui, das einen VCL-ähnlichen Ansatz verfolgt und Ext JS zum Aufbau eines Web-Clients nutzt. Damit lassen sich nicht alle Vorhaben umsetzen, aber es ist sehr schnell und produktiv. Auf jeden Fall können Sie in kürzester Zeit ein Modul Ihrer App erstellen und damit beweisen, dass Delphi gut und schnell mit dem Web funktioniert. Heutzutage werden viele Web-Interfaces zu Delphi-Anwendungen mit .NET erstellt wegen der übernommenen Windows-Verbindung. Das funktioniert natürlich, aber basierend auf unseren neuesten Erfahrungen und den neuen JS-Technologien sind die Geschwindigkeit und Flexibilität, die Sie mit JS erreichen können, unschlagbar.

Integration

RAD Studio verfügt über einige der besten Frameworks und Komponenten zur Integration. Integration gilt bei anderen Technologien normalerweise als einer der schwierigen Aspekte. Wir lösen das sehr gut und schnell. Unsere aktuelle Produktumfrage zeigt, dass ein großer Prozentsatz unserer Kunden FireDAC für sich angenommen hat und das ist fantastisch. Sie werden sehen, wie Ihre moderne App besser integriert werden kann. Wäre es interessant für Sie, Inventar aus einem ERP-System anzuzeigen oder in das ERP-System einzugeben? Unsere Enterprise Connectors basieren auf dem FireDAC Framework und funktionieren sehr gut. Wir verwenden sie auch intern, um ein ExtJS-Portal für unsere SFDC-Instanz zu erstellen (Abbildung unten). Es ist eine "Wow!" -Entwicklungserfahrung.

Innovation

Delphi unterstützt viele neue Funktionen, darunter Push-Benachrichtigungen, Beacons und den mobilen Woll 2 Woll Editor (www.woll2woll.com/beam). Es überrascht mich, wie wenig Kunden neue Windows 10-Funktionen nutzen. Eine meiner liebsten, leider zu wenig eingesetzten Technologien sind Beacons. Diese ist jetzt kostenlos in der RAD Studio Enterprise Edition enthalten. Der mobile Editor kann die mit dieser Technologie entwickelten mobilen Apps dramatisch beschleunigen. Wenn man bedenkt, wie viele interne Delphi-Apps mit der Erfassung von Standortdaten arbeiten, sollte diese so einfache und nützliche Funktion integriert werden. Und das Beste an Delphi ist, dass Innovation nicht Hunderttausende von Dollars kosten muss.

Überwinden Sie das Legacy-Argument

Dieser Punkt ist natürlich für unsere Arbeit an RAD Studio nicht relevant, aber es ist eine Hürde, die jeder Kunde überwinden muss. Die Auffassung, dass Delphi ein altes System ist, ist immer noch in dem Köpfen von vielen, trotz starker Bemühungen, diese Ansicht aus der Welt zu schaffen. Ich wähle neuerdings einen etwas anderen Erklärungsansatz, den ich recht erfolgreich finde. Anstatt ausschweifend die vielen Verdienste von Delphi aufzuzählen, nenne ich nur ein paar Fakten und höre dann auf. Das klappt! Delphi ist heute eines der größeren kommerziellen Ökosysteme - viele Open-Source-Projekte haben an Dynamik verloren, da sich die Wirtschaftslage verschlechtert hat und ihre Unterstützung rückläufig ist. Ganz zu schweigen von der Tatsache, dass Delphi das schnellste, am einfachsten zu bedienende und funktionsreichste Entwicklungswerkzeug ist (ein bisschen subjektiv, aber wahr). Unser VCL-Framework für die Windows-Entwicklung bietet nach wie vor die beste native Unterstützung für MS Windows und nichts schlägt es. FMX bietet bessere native Cross-Plattform-Unterstützung als Xamarin und seine Popularität, insbesondere in der Android-Entwicklung, wächst schnell. Ich denke, dass Delphi und die VCL für jedes Unternehmen, das mit technologischen Risiken umgehen muss, eine weitaus sicherere Entscheidung ist als selbst die angesagtesten Technologien und Frameworks. Fragen Sie nur jemanden, der die verschiedenen Iterationen von Angular durchlaufen hat oder eine Java-Migration durchführen musste. Die Eigenschaften einer hochproduktiven Sprache, die wiederverwendbar ist und mit flexiblen Front- und Back-Ends arbeiten kann, machen Delphi zu einem starken Mitbewerber auf dem Technologiesektor.

Nun, mein Exkurs wurde etwas länger als beabsichtigt, aber es gibt noch einen Punkt bei der Modernisierung, der wahrscheinlich die größte Hürde darstellt. Es hat auch wieder mehr mit Wahrnehmung als mit der Technologie selbst zu tun. Kunden beschweren sich nach wie vor über die mangelnde Verfügbarkeit von geschulten Delphi-Entwicklern. Leider ist es tatsächlich immer noch so, dass es, im Vergleich zu anderen gängigen Technologien, weniger erfahrene Delphi-Entwickler gibt. Outsourcer sind besonders negativ eingestellt gegenüber unseren Tools, da deren Produktivität tendenziell direkt gegen ihr Geschäftsmodell gerichtet ist. Warum sollte ich Ihnen 5 Delphi-Entwickler verkaufen, wenn ich Ihnen 50 Java-Entwickler verkaufen kann. Aber das ist auch das überzeugende Argument: Sie brauchen nicht so viele Delphi-Entwickler - denn Delphi ist so gut. Und damit Sie Ihre Skills auffrischen oder ein neues Team ausbilden können, werden wir die Embarcadero Academy mit mehr Inhalten und Kursoptionen weiterentwickeln. Unserer Erfahrung nach kann ein Senior-Entwickler Delphi superschnell erlernen. Lassen Sie uns die Skeptiker mit erstaunlich modern aussehenden Apps überzeugen!


Read More

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

$
0
0

Next week I'll be presenting at an event in London organized by our partner Grey Matter. You can find more information and the link to sign up on http://www.greymatter.com/corporate/events/to-delphinity-and-beyond-free-delphi-workshop/ 

Titled "To Delphinity and Beyond" the event is focused on a general update of where the product is today and where it is heading in the near future. There will be specific focus on what's new in the latest Delphi (including the coming version 10.2.3) a long session focused on Windows 10 support and VCL applications modernization, but also Linux, mobile, parallel library, RAD Server, and more.

I'll be around for most of the day, even before and after the event, so feel free to join and have an extra chat, but also ping me over email to reserve some time up front. See you soon.


Read More

Delphi Blogs of the Month #58

$
0
0

The last few months have been really a bit hectic, and I failed to find the time for my regular "notable Delphi blog posts" summary. I've also done very few blog posts in general. Here is one, with key entries only (or I'd be way too long).

Embarcadero Updates

Exciting RAD Studio Developments in 2018 by Sarina at https://community.embarcadero.com/blogs/entry/exciting-rad-studio-developments-in-2018 with new plans and the announcement of a 10.2.3 release.

Upgrade SKU to be Discontinued by March 31st at https://community.embarcadero.com/article/articles-support/16598-upgrade-sku-to-be-discontinued-in-q4. This means you have only 2 weeks to update from recent versions (in case you don't have Update Subscription, of course). With Update Subscription as standard approach, updates from the previous release make little sense, so they are being discontinued.

Modernize Your Apps by Atanas at https://community.embarcadero.com/article/16606-modernize-your-apps

Blog Posts

I didn't know you could do this with Record Helpers by Dave at http://www.davidghoyle.co.uk/WordPress/?p=1867

Creating custom TEdit styles with the FireMonkey Style Designer by Sarina at https://community.embarcadero.com/blogs/entry/creating-custom-tedit-styles-with-the-firemonkey-style-designer

Optimizing ARC the hard way by Dalija at https://dalijap.blogspot.it/2018/01/optimizing-arc-hard-way.html

Strings too slow outside WIN32? by Rudy at http://rvelthuis.blogspot.it/2018/01/strings-on-other-platforms-than-32-bit.html

Three parts on MVVM, the last being MVVM Starter Kit (Part 3 of 3) by Erik of Grijjy at https://blog.grijjy.com/2018/01/26/mvvm-starter-kit-part-3-of-3/. Very nice series, recommended read.

Meltdown, Spectre and Delphi by Danny at http://dannywind.nl/delphi/meltdown-spectre-and-delphi/

The Exit Procedure by TMS at https://www.tmssoftware.com/site/blog.asp?post=432

Lockless Multi-Threading in Delphi by Craig at http://chapmanworld.com/2018/02/09/lockless-multi-threading-in-delphi/

Data-driven Multithreading by Primoz at http://www.thedelphigeek.com/2018/02/data-driven-multithreading.html

TIP: Typing long strings in the editor using Enter to auto-continue to the next line by Kyle at https://plus.google.com/u/0/+KyleMiller/posts/Ctoy5VS5HM7?cfem=1 (you always learn something new in Delphi ;-)

Debugging Delphi applications inside a Windows Docker container by Juan at https://yeiei.net/en/debugging-delphi-applications-inside-a-windows-docker-container/. This is a very interesting post, as Docker is growing even on Windows. Thanks for sharing.

JavaScripting with Duktape for Delphi by Erik at https://blog.grijjy.com/2018/02/28/javascripting-with-duktape-for-delphi/

Supporting In-App Purchase Subscriptions for iOS and Android Firemonkey Apps by Chris at https://delphitoptips.blogspot.it/2018/03/supporting-in-app-purchase.html. Extremely detailed and well documented. Very handy.

Feeding a HTML report dashboard from a Delphi application by Craig at http://chapmanworld.com/2018/01/29/feeding-a-html-report-dashboard-from-a-delphi-application/

Accessing private methods of another class by Rudy at http://rvelthuis.blogspot.it/2018/01/accessing-private-methods-of-another.html

Delphi Videos 

I suggest you keep an eye to Kassebaum Development YouTube channel, very nice stuff: https://www.youtube.com/channel/UCWks7yQYY3yRgHZBHn3LKxg

Jim, David and Craig have started a weekly live video podecast. See for example https://www.youtube.com/watch?v=dqho4FjP3po

Other Programming Blog Posts

Borland OWL to C++ Builder VCL by Al at https://community.embarcadero.com/blogs/entry/borland-owl-to-c-builder-vcl. Having written one of the few published books on OWL in the early 90ies, I can only be surprise by the fact someone is keeping that fantastic library (so mush superior to MFC) alive...

Clang is now used to build Chrome for Windows by Nico at http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chrome-for.html. Very interesting to see the growing adoption of Clang and LLVM, the same direction Delphi and C++Builder have been heading.

Conclusion

This was a long list of links, but it is also the first of these summary posts I do this year. Again, hoping to get back to a more regular pace.


Read More

Asking Questions to Get Answers

$
0
0

Asking development and troubleshooting questions is a mix of art and science. Sites like Stack Overflow and other developer community forums will often reject questions that do not meet their standards. Even when you are sending a support request to our premium update subscription support you can save a lot of time by providing all the necessary information in your first message. There are a few guides to asking questions that get answers, so I thought I would combine the best tips from them here in a useful reference (see the list of sources at the end).

IDERA Rubber Duck

One of the themes I’ve seen in a lot of these guides is that many times in the process of asking a well-researched question you will discover the answer on your own. This is the ideal solution as I believe you learn the most in this situation. More than once I’ve posted the answer to my question immediately after asking it for this very reason. One tip to do this is called Rubber Duck Problem Solving which even has a Wikipedia page describing it. If you have an IDERA Rubber Duck handy you can put it to work for you! 

Here are my tips for asking good questions to get good answers:

  1. Be Specific - What are you trying to accomplish specifically? Or what were you expecting to happen? Just saying something doesn’t work, or asking for an example of FireDAC isn’t really enough to go off of. Also be specific about what version you are using, target operating system, 3rd party components, etc.

  2. Use a Descriptive Title or Subject Line - Especially when posting on peer-support, people are scanning the list of questions to see what they feel comfortable answering. If you have a good title they are more likely to click on it to answer it. But if your title is vague then they probably won’t bother.

  3. What Have you Tried? You don’t want the first few answers to be things you’ve already tried in troubleshooting the issue. And if you haven’t tried anything then you should do that first (a little research saves you a lot of work).

  4. Include the Minimal Code - Create the simplest possible program that demonstrates the problem or what you are trying to do. Don’t include the DCU or anything that isn’t necessary. Often times the process of creating a small app that reproduces the issue you discover the cause of it.

  5. Include Links - Likewise, if there is a link to the documentation that describes what you are trying to do that can help too. This goes with the What Have you Tried part too. You don’t want the first response to be a link to the page you just finished reading.

  6. Include the Errors - If you are getting an error include the exact error. The full text of the error and not just a screenshot. If the screenshot ads something you can include it too.

  7. Is it reproducible? What are the dependencies? If possible try reproducing it on a different version or different install. Maybe disable any IDE plugins or turn runtime packages off. Does debug vs. release make a difference? Have you tried it with your virus scanner disabled?

I’d also add one more tip to be sure and post to the correct place. Here are a few places you might find answers

  • Embarcadero Community is a good place for peer support for questions specific to our products.

  • If you are using a 3rd party component check to see if they have their own support forums or channels.

  • Use the Quality Portal if you are reporting an actual bug or making a feature request.

  • Stack Overflow is a good venue to get answers, especially if they involve broader technology like consuming the Facebook API.

  • We have a special support channel for Installation and Registration issues

  • If you want some dedicated assistance then take advantage of our support team. Your update subscription includes three annual support incidents and you can get more

For further reading, I pulled from these sources:

 What do you find is a great way to get good answers to your questions?


Read More

Earlier this week’s episode on Cool Apps

Delphi Xlib headers

$
0
0

Back in November for CodeRage-12, I demonstrated a partial translation of the Xlib headers for X11. At that time I explained that I’d not completed the headers, but would notify on my blog when I had.

Well, I’ve just done a major update to those headers for the sake of my game engine development project DarkGlass.
I would still not quite call these headers complete, because there are about 12 functions that I did not translate, and several of the macros remain un-translated. I would also point out that I’ve only really done the translation, I’ve not tested the header in any degree.

All that said, I now believe they are quite usable and so I’d like to share the update with you.
You can get the headers by checking out a copy of the DarkGlass source code on GitHub and this is the best way to get them, as you’ll also get the dynlib package on which they depend, and any updates done to them as I start working with them.

You’ll find the files under src\Packages\Platform\Implementation\Linux named:

dg.platform.linux.binding.x.pas dg.platform.linux.binding.xlib.pas

I hope you find them useful!

 


Read More

Media file meta-data on Android in Delphi.

$
0
0

One of my customers emailed me with an interesting problem this morning.
“I need to be able to peek into a video file, specifically a .mp4 file, and determine if it’s PAL or NTSC.”
This seemed like a fun challenge, so I thought I’d write a helper class to solve it..

The Problem.

Ultimately, what determines if an image or video conforms to PAL or NTSC is a combination of the frame rate and the image resolution.

PAL has a frame rate of 25 per second, and a vertical resolution of 625 scan lines. NTSC has a frame rate of 30 per second, and a vertical resolution of 512 scan lines.

(As an aside, NTSC is actually 29.9 frames per second due to a technical restriction in broadcast frequencies, but I digress…)
So what we need to do is get the resolution and frame rate information of a video track within an mp4 file.

The Solution.

Android offers a class named “MediaExtractor” to extract data from a media file within it’s API.
So we need to create an instance of this class and extract the data from it.

There’s a bug to watch for in the Android API, in my first attempt I created an instance of MediaExtractor like this…

var Extractor: JMediaExtractor; begin Extractor := TJMediaExtractor.JavaClass.init; Extractor.setDataSource(filename);

Unfortunately, the android API appears to have a bug which means that the overload of setDataSource() which takes simply a filename does not work, and raises an exception. The solution to this problem is to open the file manually using the ‘File’ android API class, connect an input stream to it using the ‘FileInputStream’ API class, and then get a descriptor for the file using the ‘FileDescriptor’ class, finally pass the file descriptor to the setDataSource() method. This can be seen in the ExtractMeta() method of my source below…

This is the source for a class which extracts the required information from a media file…

unit uMediaMeta; interface uses system.generics.collections; type /// <summary> /// This record is used to store information about the video tracks /// discovered in the target file. /// </summary> TVideoTrackInfo = record FrameRate: int32; xRes: int32; yRes: int32; end; /// <summary> /// This class provides array-style access to the video track information /// discovered in the target media file. /// </summary> TMediaMeta = class private fVideoTracks: TList<TVideoTrackInfo>; fFilename: string; fFilepath: string; private procedure ExtractMeta; function getVideoTrackCount: uint32; function getVideoTrackInfo(idx: uint32): TVideoTrackInfo; public constructor Create( Filepath: string; Filename: string ); reintroduce; destructor Destroy; override; public property VideoTrackCount: uint32 read getVideoTrackCount; property VideoTrackInfo[ idx: uint32 ]: TVideoTrackInfo read getVideoTrackInfo; end; implementation uses AndroidAPI.JNIBridge, AndroidAPI.JNI.JavaTypes, AndroidAPI.JNI.Media, AndroidAPI.Helpers; { TMediaMeta } constructor TMediaMeta.Create(Filepath, Filename: string); begin inherited Create; fFilePath := FilePath; fFilename := Filename; fVideoTracks := TList<TVideoTrackInfo>.Create; ExtractMeta; end; destructor TMediaMeta.Destroy; begin fVideoTracks.DisposeOf; inherited; end; procedure TMediaMeta.ExtractMeta; var f: JFile; fis: JFileInputStream; fd: JFileDescriptor; Extractor: JMediaExtractor; Format: JMediaFormat; FormatClass: JMediaFormatClass; numTracks: int32; counter: int32; idx: int32; mime: JString; ARecord: TVideoTrackInfo; begin f := TJFile.JavaClass.init(StringToJString(fFilepath),StringToJString(fFilename)); fis := TJFileInputStream.JavaClass.init(f); fd := fis.getFD; Extractor := TJMediaExtractor.JavaClass.init; Extractor.setDataSource(fd); numTracks := extractor.getTrackCount; counter := 0; for idx := 0 to pred(numTracks) do begin format := extractor.getTrackFormat(idx); mime := format.getString( TJMediaFormat.JavaClass.KEY_MIME ); if mime.startsWith(StringToJString('video/')) then begin if format.containsKey(TJMediaFormat.JavaClass.KEY_FRAME_RATE) then begin ARecord.FrameRate := format.getInteger(TJMediaFormat.JavaClass.KEY_FRAME_RATE); ARecord.xRes := format.getInteger(TJMediaFormat.JavaClass.KEY_WIDTH); ARecord.yRes := format.getInteger(TJMediaFormat.JavaClass.KEY_HEIGHT); fVideoTracks.Add(ARecord); end; end; end; end; function TMediaMeta.getVideoTrackCount: uint32; begin Result := fVideoTracks.Count; end; function TMediaMeta.getVideoTrackInfo(idx: uint32): TVideoTrackInfo; begin Result := fVideoTracks.Items[idx]; end; end.

In order to use this class, we first need to build an application and deploy a media file with it to examine.
With your project open, go to “Project / Deployment” and add your media file, in my case, I added small.mp4.
Be sure to set the remote path field to “assets\internal”..

Drop in the uMediaMeta unit (the source I posted above), and add it to your forms uses list.
Add a button and a memo to the form, and name the memo  “mmoData”

For the button handler, add this code..

procedure TForm2.btnGetDataClick(Sender: TObject); var MediaMeta: TMediaMeta; idx: int32; begin MediaMeta := TMediaMeta.Create( TPath.GetHomePath, 'small.mp4' ); try //- Check there are video tracks. if MediaMeta.VideoTrackCount=0 then begin mmoData.Lines.Add('No video tracks found in file.'); exit; end; //- Loop them for idx := 0 to pred(MediaMeta.VideoTrackCount) do begin mmoData.Lines.Add( 'Track '+ IntToStr(idx)+' = '+ IntToStr(MediaMeta.VideoTrackInfo[idx].xRes)+'x'+ IntToStr(MediaMeta.VideoTrackInfo[idx].yRes)+'@'+ IntToStr(MediaMeta.VideoTrackInfo[idx].FrameRate)+'fps'); end; finally MediaMeta.DisposeOf; end; end;

When you deploy and run this application to an android device, and click on the button, you should see something like this:

Mission accomplished – you can use the resolution and fps data to determine if the file contains a PAL or NTSC track, or both, or neither.

Conclusion

This was a fun little side project for me this morning, and here’s the source code: MediaExtractor 
I hope you find it useful, and…

Thanks for Reading!

 


Read More

Announcing the Release of RAD Studio 10.2.3

RAD Studio/Delphi/C++Builder 10.2 Tokyo Release 3 verfügbar!

$
0
0

Download hier:
https://cc.embarcadero.com/reg/delphi

Änderungen:
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/10.2_Tokyo_-_Release_3

Bugfix List:
http://edn.embarcadero.com/article/44774

Einige wichtige Neuerung:

  • Verbesserungen bei der Darstellung im visuellen Framework auf Basis von VCL und FireMonkey. Einschliesslich HighDPI Unterstützung
  • Neue Möglichkeiten für den C++Builder: Unterstützung von CMake und Rename Refactoring
  • Verbesserung im RAD Server für eine bessere Unterstützung von Senchas ExtJS
  • Mobile Add-On für iOS und Android ist ab sofort Bestandteil der Professional Edition (Delphi und C++Builder). Kunden mit aktiver Update Subscription können dieses Add-On kostenfrei anfordern(!!)

Auch als Video (englisch)


[YoutubeButton url='https://www.youtube.com/watch?v=4n5AZdRx788']

Read More
Viewing all 1683 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>