is Delphi still the same (still run with no installed libraries)? - delphi

Back when I used Delphi (win32), programs made with it would run on windows, with no need to install any runtime libraries like .NET or Java(?). Is this still the case? If not, which language can do that?

Delphi executables don't have any external dependency.
It's true since Delphi 1 up to Delphi XE.
I just wrote a post on my blog about this fact I like very much in Delphi.
http://blog.synopse.info/post/2010/09/20/Dll-hell%2C-WinSXS-directory-and-Delphi-paradise
No dll hell with Delphi applications!
Deploying a Delphi application is very easy.
If you need some database access, you could need some additional components, like the BDE, or the ODBC drivers, or whatever...
But there are a lot of stand-alone frameworks, with no external dependency, available for Delphi. We provide one Client/Server Open Source solution, using SQLite3 as database storage. And one of great feature of SQLite3 is that it doesn't need to install any client software. Our framework provide the Client/Server features, in pure Delphi.

Both the language and the IDE had some serious improvements from Delphi 1.
To name a few extentions for the language:
Support for interfaces
Records with methods
Record and class helper functions
Annonymous functions
Generics
Hinting directives
There are also some IDE improvements.
Unicode support
More integrated tools
Usage of identifiers (2011).
There are still some things missing:
64 bit support
generics still have some bugs.

It is still the case for the "normal" Delphi, i.e. Delphi for Win32. There is also Delphi Prism which targets .NET for which it is obviously not the case.

Currently there's Delphi for Win32 available, which doesn't require any runtimes and Delphi Prism (for .NET application development). Delphi for 64-bit native Windows development is promised next year.

Well, Lazarus obviously :-)
Seriously, Delphi is fine, but before you buy a recent one, if you need win9x support, check thoroughly. (since the unicode versions might no longer support that)

Related

Feasible to get WebView2 working in old Delphi versions and Lazarus?

I have taken a look at these URLs:
check if runtime installed
https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution
some sample code assuming newer Delphi
Using WebView (EdgeHTML) in Delphi / C++ Builder
some sample code assuming newer Delphi
WebView2 (TEdgeBrowser) updated Delphi interface (e.g. ICoreWebView2Controller2)
Yet even those seem to assume a newer Delphi version than I use (XE4) ... and preferably I would like Lazarus support as well. At the same time I really love being able to use "newest available patched system browser" which is why I am not jumping on https://github.com/salvadordf/CEF4Delphi albeit it may end up being the final solution.
Is there anyone else who has begun the undertaking of implementing webview2 on older versions or is this simply impractical due to type libraries not being importable etc? (i.e. major headache in converting, implementing and testing everything, furthermore on old Delphi versions)
I recently published WebView4Delphi at GitHub with an MIT license.
WebView4Delphi uses the WebView2 runtime to embed Chromium based browsers in Delphi and Lazarus applications.
It was developed in Delphi 11 but it also works with Delphi XE3.

Upgrade Delphi XE to newer version

I have to update a Delphi XE installation for a project to a newer version of Delphi but I don't have much experience with Delphi, the problem is there are plenty of old packages and components in there.
When I install a new version did I have to install all components again (if it possible to install it in this new version) or is it something like an update to my old installation and all installed stuff is now in the new version also?
Updating a Delphi XE application to a newer Delphi is usually quite easy. The only serious issue could be third party components which you must install in the newer Delphi version. Check with each component vendor that a version exists for your target Delphi version.
I always strongly recommand to NOT use any third party component that has no source available. Also don't buy any third party component using a DLL, OCX or other external binary object.
When you buy a third party component, always buy the source code with it. Then throw away any pre-build package or dcu and recompile everything before any serious use. That way you'll be sure to have all required source code and work with that source code.
Once you have the source code, it becomes much easier to port to the next Delphi version. Usually there is just nothing to change (There was only one notable exception in the past between Delphi 2007 and Delphi 2010 when Unicode string were introduced).
When there is something to change, it is usually only the name of a "used" unit. Somtimes Embarcadero move one class from a unit to another one. Sometimes, you have to change a $IFDEF which specify a Delphi version. Look at {$IFDEF VER180} and similar to adapt to you current version (See the online help for such symbol).
And if you still have issues, then ask here...
Upgrading to newer version of Delphi might not be a trivial task.
First problem you will run into are Thid Party Components.
If you don't own the souce code for them it means that they come with precompiled packages and these packages unfortunately arent compatible between different Delphi versions.
If you do have source code for them you might be able to recompile them on newer Delphi versions but this might require you to do some code changes.
So I strongly recomend you first check to see if there are updated versions of these components available that support the Delphi version to which you are planning to upgrade.
For instance if your application relies on BDE (Borland Database Engine) that shipped with older versions of Delphi you Will be forced to do Quite some changes to properly set up the FireDac database framework that ships with newer delphi versions.

unit testing tool for delphi XE4

what is the options for unit testing in delphi XE4? i'm trying to use DUnit but it seems didn't have any official version for XE4 and source didn't compile
Delphi has for a long time, and XE4 is no different, shipped with DUnit. You need to make sure that you select it in the install options.
The version that is shipped with Delphi is already updated to work with the version of Delphi that it ships with. Looking at the DUnit sourceforge project, it seems rather moribund. The last commit to the SVN archive that mentions Delphi versions is for Delphi 2009. So it seems clear to me that you are best sticking with the version that ships with Delphi.
You may be interested with the unit testing features available within our mORMot Open Source framework. See this StackOverflow answer.
In addition with unit testing with classes, just like DUnit, you have at hand a whole mocking/stubbing framework.
Using interfaces, in a SOLID context, is therefore more integrated within this framework than with DUnit. For instance, interface mocking directly links to a test case, so is able to be integrated within the unit test suit.
It is perfectly working with Delphi XE4, in both 32 bit and 64 bit Windows platforms.
There is a new project called DUnitX. It is intended to take advantage of newer features in the language and framework and works with Delphi 2010 and later.
Still very much a work in progress, but it is currently active and you will probably recognise some of the people who are working on it.

Is it possible to use Delphi XE2 to develop Windows CE Applications?

I have to develop an application to run on Windows CE accessing a remote Firebird database.
I would like to use Delphi to do so.
Is it possible?
Native Delphi only works with x86 compatible processors and Win32/Win64 or MacOS 10 API.
Ken White already pointed to you Delphi Prism, however if you would purchase it, instead of re-marked tool, you'd perhaps purchase the original product, i heard it comes with multiple platforms support instead of one. RemObjects Oxygene is the original product, part of which is re-sold as Prism.
Another option would be using Lazarus (vanilla or CodeTyphon distro). Its LCL library mimics VCL in many respects and FPC compiler mimics Delphi language (and some other Pascal dialects as well).
http://www.pilotlogic.com/codetyphon/help/index.html?cross_build_for_windows_mobile.htm
http://wiki.freepascal.org/Windows_CE_Interface
http://www.lazarus.freepascal.org/index.php?topic=8175.0
No, it isn't. Delphi XE2 does apps for Win32/64, OS X, (and with the help of FreePascal, iOS), but not for CE.
You can probably use Delphi Prism to do so. There is a separate delphi-prism tag for that here at SO.
In fact, you may be able to use the Delphi IDE to build Windows CE applications, using KOL-CE library, after some adaptations.
KOL-CE - Key Objects Library CE is a set of objects to develop powerful (but compact) Windows CE/Pocket PC/Windows Mobile/Win32 GUI applications using Free Pascal Compiler. The library is based on KOL library by Vladimir Kladov (http://kolmck.net).
It targets the Lazarus IDE, but since it is a fork of a Delphi project, you may be able to use it in your Delphi IDE, perhaps after some modifications. And if you are not able (or do not have the time) to do the needed modifications, I'm quite confident that you would be pleased to use the Lazarus IDE and modern object pascal instead of switching to another language.
You need to install the FPC arm-wince cross compiler for Win32 to compile WinCE executables, but you develop your application in Windows, with the IDE.
Note that KOL is a light new set of components, very diverse to the VCL. Very powerful, but only low-level object code can be re-used, since they are not compatible with the VCL (or the Lazarus LVCL).
Using Lazarus and its native LVCL components is also available to Windows CE, is much close to the VCL classes layout, but will produce much bigger executables than KOL-CE.
For the historic perspective: no you can't in Delphi itself as of Delphi 2007.
In Delphi 2005 and Delphi 2006 could do this, targeting the .NET Compact Framework on Windows CE as Delphi contained a Delphi .NET compiler that was more compatible with the Delphi language than the current (but much more evolved) Oxygene .NET/Java platform implementation of the Delphi language.
As of Delphi 2007, the Delphi .NET compiler got retired.
Right now, Oxygene is much better as it supports a broader set of language and platform features than Delphi .NET ever did. It is less compatible with the Delphi language because the platforms it supports warranted for some language deviations that in practice are very useful.
Oxygene ships both separately (with a full feature set) and as Delphi Prism (with only the .NET portion).
For Delphi 2005/2006 you needed the CF Build Helper from Jeremy North and the Class Helpers I wrote (they are included in the CF Build Helper). A nice article on how to use both is at EDN.
Given the hoopla you had to go through back then, it is much wiser to use Oxygene if you want a language very close to the Delphi language.
For a historic overview of Pascal and Delphi like languages, read this article by Jim McKeeth.

Is Delphi Prism a new version of Delphi .net?

First of all (before this question get down voted): I am a developer developing 99,99% of my programs using Delphi targeting Win32 (developing in Delphi 7 still, very slowly migrating to Delphi 2010).
When Delphi 2006 or 2007 (can't remember which version at the moment) came out I bought the RAD Studio edition to be able to start developing .net applications using Delphi.net and VCL.net.
I played around with it for some short time, but in the end, due to work load just kept using Delphi 7 as development platform.
When Delphi 2010 came was released, I decided to give .net a go once more, and (foolishly) bought the Studio License once more thinking the include PRISM was the previous Delphi.net (to be developed in the Delphi IDE).
Now that I have installed PRISM (and the Visual Studio 8 IDE - o horror), I am just wondering whether PRISM is a new version of Delphi.Net or not (probably not). And if I can use some of my Win32 code under Prism.
UPDATE AFTER SOME REPLIES: I keep the question open because you get more answers when a answer has not been selected yet.
I do miss the Delphi IDE though. It's all a mather of taste but having to develop in two different IDE's (where f.i. the keyboard shortcuts are different - and I don't want to give up the Delphi ones, thank you)) is not my idea of spending my development time.
Prism is a replacement for Delphi .Net - it has been developed by RemObjects and its original names were Oxygene and Chrome ( http://www.remobjects.com/ ).
Because it's much more mature than Delphi .Net in the .Net segment it now is included in Delphi RAD Studio instead of Delphi .Net.
You won't be able to use all of your W32 code, but the syntax is very similar and most algorithms will probably work without any change.
See http://prismwiki.codegear.com/en/Win32_Delphi_vs._Delphi_Prism for a detailed comparison of Delphi W32 and Delphi Prism.
No. Delphi.NET was designed specifically to be backwards-compatible with Win32 Delphi code. Prism is not. It was not developed by the Borland/CodeGear team, doesn't include VCL support, and has a handful of minor language differences. It's better to think of it as a new dialect of Object Pascal than as Delphi.NET.
The main difference was that Delphi.Net was mainly a port of the RTL/VCL to .Net, as well as an adaptation of Object Pascal to be a .Net language.
It had to include a full blown IDE with a special Delphi.Net Form Designer.
The goal was to help move a VCL Forms application to .Net with a minimum of changes, or create new application without having to re-learn the IDE and the library.
Delphi Prism is also an adaptation of Object Pascal to the .Net world but with more emphasis on being a fully fledged .Net language (even more so than C#) and much less worries on being compatible with Delphi.
It is just the language, hosted in Visual Studio, and does use whatever designer is provided by the IDE.
So in the end pure Pascal code will be very much similar, and easily ported, but rich GUI applications will need more rewriting/redesigning.
Yes and no.
Oxygene (FKA Delphi Prism) replaces Delphi for .NET, but it is not a new version of it.
They have different design philosophies and are not 100% compatible. As Francois pointed out, Prism does not include the VCL.Net. Instead it focuses completely on supporting the .NET GUI Frameworks: WPF, Silverlight, Prism, WinForms, ASP.NET, etc.
Delphi for .NET was all about migrating and backwards compatibility. Delphi Prism is all about being a full featured .NET development language and "forward compatibility."
You can create you pure business logic as code compatible between Delphi native and Delphi Prism, but all the GUI and IO code (anything that makes use of the VCL or RTL) will be specialized.
Check out the Oxidizer and ShineOn for more help in migrating and code compatibility with Delphi Prism.
No, Prism has been labeled Delphi more to make it more popular, like Delphi PHP.
It's not like Delphi.NET, with a VCL-alike etc, or even a compatible language (it uses method instead of procedure and many other deviations).
So you can see if you like it, but from what I have seen from it, having used Delphi won't be much of an help, and neither do existing codebases.

Resources