Delphi XE3 third party VCL components in the XE4? - delphi

I use Delphi XE3 and I want to migrate to the Delphi XE4. Can I use the same third party components as I used in XE3 in XE4? In previous versions happened many changes, which precluded the use of previous versions of third party components.

You must re-compile your project in XE4, using XE4's VCL.
If by "XE3 VCL" you are actually referring to third-party VCL components, then they need to be compiled and installed in XE4 before they can be used in XE4 projects.
This is true of just about every Delphi version (D2007 being the only exception, as it was binary compatible with D2006).

Related

Delphi compatibility issue

There seems to be a compatibility issue between Delphi 10 Seattle and Delphi 2010
I've written a school project using Delphi 10 Seattle but my teacher still uses Delphi 2010. When I transferred and opened the source code in Delphi 2010 it gave errors.
I've installed 2010 on my PC to replicate the error (screenshot below)
"File not found Vcl.Forms.dcu"
Any thoughts how to get this to work, the marking/moderating takes place with Delphi 2010.
Unit scope names were added in Delphi XE2. Vcl.Forms does not exist in older versions of Delphi. Instead, it should just be Forms.
The reason is because of the introduction of the Firemonkey framework in Delphi XE2. With Firemonkey also came the necessity to differentiate Vcl.Forms from Fmx.Forms. The same applies with many other units, such as Graphics. Delphi 2010 did not have Firemonkey, so it did not yet enforce this prefix.
If you need code to compile in Delphi 2010 and Delphi 10 Seattle, specify only the base unit names in your uses clause (Forms, Graphics, etc), and make sure your Delphi 10 Seattle project has the necessary scope(s) (Vcl, Winapi etc) setup in Project > Options > Delphi Compiler > Unit scope names. By default, new projects should already have this. If not, you can add Vcl and any other prefixes you need. This will make sure the compiler can find Vcl.Forms even when you specify only Forms in code.

using delphi xe7 form(VCL) in delphi 7

Is there some possibility to use Delphi xe7 form in Delphi 7 project, without create DLL file? I found "Monkey-Mixer" which allows to use FMX form in VCL project, and I wonder is there same tool for use new VCL forms in older versions of Delphi?
Is there some possibility to use Delphi XE7 form in Delphi 7 project, without creating DLL file?
No there is not. You cannot link code from different versions of Delphi into the same executable.

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.

Compile Delphi 7 code in Delphi xe2

I am working with another developer team and they have a code writen in Delphi 7 that doesn't work because of the functionality of TStringStream. So they ask me for help with this but I'm using Delphi xe2.
Is there any way to change the compiler options in my Delphi xe2 IDE and see the behavior of the code in Delphi 7?
There are no compiler settings that can be used to revert the compiler/RTL to pre-Unicode state.
If you want to compile in a Unicode Delphi, you have to make code changes. The other obvious option is to use a pre-Unicode Delphi.

Does Delphi XE2 FireMonkey support Indy for cross-platform apps?

Looking at the new Delphi XE2 with Firemonkey. Considering that it compiles for Windows, Mac OSX and iOS, VCL components are useless in a FireMonkey application.
My question is: Is there/will there be an Indy Firemonkey Edition? Cause I seriously need the IdHTTP.Post();. If not, is there a way to do this in FireMonkey?
I have been googling for quite awhile now, not finding anything. :S
VCL means Visual Component Library. There's nothing about Indy that is "visual" (meaning "seen at runtime"), meaning that "VCL components are useless in a FireMonkey application" has no relevance to Indy.
You can create a new FireMonkey HD application in Delphi XE2, target OS X, and the Indy component pages are still available in the IDE, meaning that they are compatible with supported FireMonkey cross-platform targets. They're also available for FireMonkey HD Windows targets (32 and 64 bit).
Indy ships with the IDE (and has since D6) so there is nothing extra to buy if you already have XE2 installed. Also, Indy is open-source, so you can upgrade an Indy installation using source code from Indy's public access SVN server or mirror.
Regarding FireMonkey, Indy does work in FireMonkey. Indy uses whatever the native socket API is on a given platform (WinSock on Windows, Posix on Mac, libc on Kylix, etc).
The only known gotcha with Indy under FireMonkey at the moment is the TIdAntiFreeze component is not available at design-time. The IDE cannot resolve it correctly due to the non-standard way it is packaged (to be adressed in Indy 11). You can instantiate it programmably in code at run-time, though.
I made a client server example using tcp indy http://www.freelancecode.net/community/viewtopic.php?f=35&t=246
The Components Not Used in iOS Apps DocWiki page for Delphi XE2 lists most of the Indy classes:
The following list is the set of components (along with the used
units) that might be available in the Tool Palette for iOS
applications, but are not supported for iOS applications.

Resources