![Real Database Controls Updated For Delphi 5 serial key or number](http://manicapital.com/web/2014/12/dowloads.png?w=300&h=141)
Real Database Controls Updated For Delphi 5 serial key or number
![Real Database Controls Updated For Delphi 5 serial key or number Real Database Controls Updated For Delphi 5 serial key or number](http://flameinstitute.com/wp-content/uploads/2015/11/North-India-Topper-PO-Pooja--181x272.jpg)
Real Database Controls Updated For Delphi 5 serial key or number
Migrating your project from older versions of Delphi. The Pitfalls.
A true testament to Delphi is the number of applications out in the wild which were written with much older versions. Every day, I am asked questions about migration from versions as old as years, to the latest edition. Thankfully, Delphi makes migration over the decades relatively painless, however, this doesnt mean effortless!
This page aims to address the most common pitfalls which may befall a migration from any version of Delphi prior to , including Borland versions, to modern Embarcadero versions.
I intend this page to become something of a living document, which I will update over time to include any pitfalls that I uncover. I will also aim to add tips & tricks for the migration process, and links to relevant documentation.
If you come across something which is not included, please register and leave a comment, which I may integrate into this page.
Expectations of Cross Platform.
Before we begin looking at the common pitfalls of a version migration, I would like to take a moment, (actually, a good page or two,) to discuss an often miss-understood feature of modern Delphi versions. If you have no interest in migrating your code to mobile platforms, or the MAC desktop, go ahead and skip to the section entitled Windows bit migration and well pick up from there.
Modern Delphi is able to compile code to target Windows bit and bit, MAC OSX, Android and iOS. This fact has lead to an expectation that Delphi can take your Windows application and somehow, make it cross platform. This is not true! It would be some genuine kind of magic if it were true, but it isnt. What is true is this: Modern versions of Delphi make it possible to write applications for Windows, Mac OSX, Android and iOS.
If your application was originally written for Windows then it uses the Win32 API. If your application is a VCL application, then it uses the Win32 API. One thing that is not available on Mac OSX, Android, and iOS is the Win32 API. See where Im going? Your application is not going to run on another platform without some significant changes. Thankfully, while Delphi wont magically fix this problem for you, there are some companion tools to help
Cross platform applications are written against a new framework named FMX. (Formerly FireMonkey, FMX=FireMonkey X-platform).
The FMX framework does not depend on the Win32 API and its controls, but instead, actually opens up a rendering context using OpenGL or DirectX, and renders controls directly to that API. In this way, visual controls become cross platform. The FMX framework has mirror controls for the vast majority of VCL controls which ship with Delphi, for example, VCL and FMX both have a TEdit control, they both have a TButton control, and so on..
There is a tool called the Mida converter ( see here ) which is able to open up your existing VCL forms (the .dfm files) and modify them to use the FMX versions of controls instead of the VCL controls. In doing so, the form is effectively ported from VCL to FMX and therefore is made available to platforms other than Windows. There are still one or two pitfalls to this approach however. The Mida converter is not much more than a copy/replace macro tool, if you are using controls which are not a part of the VCL (third party controls for example), then the Mida converter cannot migrate these controls, youll have to track down an FMX version of that control if it exists, or an FMX replacement from another third party vendor.
One such vendor of FMX components is TMS Software: manicapital.com
Further Cross Platform Considerations
Beyond the visual controls, there are several other considerations when moving from a Windows-Only application to a cross platform solution. For a start, all of the platforms supported by Delphi, other than Windows, are in some way based on a unix/linux variant, and are therefore POSIX based. Some things to consider because of this
- POSIX platforms have different file systems. There is no C: drive on an Android, iOS or MAC device. If youve hard-coded windows paths into your application, then youre going to have to modify the code, likely using conditional defines, to understand where the same file lies on the other platforms file systems.
- There is no registry. Though some platforms offer a simulation of the windows registry, the majority of them have no such thing. Instead, configuration is usually stored in a specific directory. The /etc directory is most commonly used to store configuration files, and, theres no pre-specified file format. One application might use a .ini file or similar name-value pairs file, while another may use a JSON file, and yet another might use an XML file. If your VCL application depends on configuration in the registry, youre going to have to migrate it to a file under the configuration directory for other platforms. If your VCL application modifies the behavior of the OS or other applications through alteration of registry keys, youre going to have to find out how the same functionality can be achieved on other platforms.
- There is no Kernel If youre using custom calls to the windows APIs, youll have to find the equivalent behavior of the alternate platforms. In many cases the FMX classes will provide an answer, but if your application is VCL its likely not using those classes.
- Not all TCanvases are made equal. If your code, or that of a third party vendor, is making direct calls to TCanvas for rendering, or worse, directly to the GDI, youll need to migrate this code to work on other platforms. The FMX framework has a TCanvas just as VCL does, however, the methods are not all the same, they also have different parameter lists. This is unavoidable as the VCL TCanvas was rendering to the windows GDI interface, where-as, the FMX TCanvas is rendering using a 3D API such as OpenGL or DirectX. This is true even for 2D rendering, because modern graphics cards simply dont offer 2D rendering anymore, instead, they expect you to render 2D graphics into 3D space, and then view them with a special perspective mode which reduces out the Z-Axis. Sorry, youll have to migrate the TCanvas code too.
More on: Using the FMX TCanvas - Your database driver probably doesnt exist. Many developers are familiar with using components named TConnection, TTable, and TQuery (or similarly named equivalents) to connect to databases directly. These component sets usually rely on some binary driver, and unfortunately, unless youre using InterBase, there probably isnt a version of that driver available for the ARM-*nix based mobile platforms that youre targeting. You likely cannot connect your application directly to a database, and even if you could, you may not want to with potentially unstable internet connectivity in many mobile scenarios. The most common solution to this problem is to expose your data in the form of JSON using a REST based web service (with SOAP services making up the second most common solution). Delphi has several components for working with JSON/REST/SOAP and can even adapt a JSON service into a TQuery style component for you, but youll have to migrate away from your older data access components.
- There are some differences in the mobile compilers. Delphi achieves its single source code, multiple target platforms functionality by the use of multiple compilers. One compiler for windows 32, another for windows 64, an more still for android, iOS and Mac. Well, not all of these compilers are % compatible, though they are a good %.
- ARC. The mobile compilers use the ARC (Automatic Reference Counting) memory model, so your code needs to be made ARC safe, this can be done in such a way that you do not damage the code for desktop platforms, however, you need to be aware of ARC and how it works to ensure that your code is safe for it. Not doing this will lead to bugs which can be quite difficult to track.
Marco Cantu on ARC: manicapital.com - No Ansi Strings. The mobile compilers do not support ansi strings at all, period. Functions such as StrAlloc(), StrDispose() etc are missing, and if you absolutely must use ansi strings, well then youll have to put them into arrays or buffers and work with them using pointers but you should probably just give up on ansi-strings, no modern OS or modern software uses them anymore! Unicode migration may instill some fear, but its not too frightening, and it is worth-while, as well see later in this page.
- Strings index from zero! All otherarray style access is indexed from zero, but for some reason, legacy pascal indexed characters in a string from one. If I ever did know why this was, Ive long since forgotten, but its no longer true for the mobile compilers. Strings now index from zero. This is, sadly, just something we have to swallow. We got away with strings being the odd-one out for a long time, but its time to put this long standing syntactical faux-par to rest.
- ARC. The mobile compilers use the ARC (Automatic Reference Counting) memory model, so your code needs to be made ARC safe, this can be done in such a way that you do not damage the code for desktop platforms, however, you need to be aware of ARC and how it works to ensure that your code is safe for it. Not doing this will lead to bugs which can be quite difficult to track.
A Final word, and some hope, on Cross Platform migration.
Most developers with the mistaken expectation that Delphi will migrate their application to other platforms for them, are also missing one key important detail, in that they probably dont actually want to migrate their application to those platforms at all! If youre among them, stay with me here. Mobile screens are small, and operated with a cumbersome finger rather than the elegant precision of a mouse. Mobile devices also suffer a lack of resources (RAM, Disk Space, CPU cycles etc) when compared to desktops. Its quite possible that if you did a straight migration of your VCL application to FMX and deployed that to a mobile device, it would be unusable on such a small screen, or perform horribly due to the lack of device resources.
A far more sensible strategy, in many cases, is to consider starting an entirely new project for your mobile application. This companion app project can still make use of large portions of your non-visual code, its still pascal after-all, but you can limit the new project to only those features which actually make sense on the mobile device. Whats more, Delphi ships with some classes to aid integration of your mobile companion application, into a network along-side your existing desktop application. For example, with the app-tethering classes, your mobile application can directly call actions within your desktop application, and bidirectionally share data.
Windows bit migration.
Migration from Windows bit to Windows bit is a far less treacherous endeavor than migration to entirely different platforms, however, there is one pitfall that Ive come across in doing so.
It became quite a common practice in the Delphi developer community, to assume that an integer and a pointer are the same size (bits), and given that instances of classes in Delphi are actually just a special kind of pointer, you could effectively type-cast a class as an integer for storing in an integer array. In addition to this, the .TAG property on may visual classes of the VCL was also a bit integer and may have been used as an object pointer by some type-casting jiggery-pokery. Well, if youve done this, or youre compiling third party sources which do this, youve now got a problem. Under windows bit, pointers are, of course, bits wide, however the integer type remains bits wide. You need to alter this code to account for the different data types. Some new integer data types have been added to assist. NativeInt and NativeUInt are new datatypes which act as an integer, but which will always match the width of a pointer on the target platform.
Now before you run off and start fixing up your code for bits, ask yourself if you really need to? There are many common misconceptions about bit code, and often there is little benefit in upgrading to it. Were not in the same situation as were were when computers moved from the 8-bit era to bit, or from bit to bit.
You see, one of the most common reasons to upgrade an application to bits is to give the application more addressable memory space. With 8-bits you can only address bytes of RAM, and to enable for more, certain bank switching operations were required which cost processing time. Things improved with bits, you could address a whopping 64k of RAM, and still bank switching was required to make use of more memory. Enter bit modes and you can address a giant 4GB of RAM! Even today, this is sufficient for the vast majority of applications, and Windows bit would only really ever allow your application to use 2GB of it in any case, reserving the other 2GB for kernel space.
With some few exceptions, if your application is using more than 2GB of RAM, youre probably doing something wrong.
For example, if youre dragging back millions of rows of data from a database, do you really need it all held in RAM? For display purposes, no human wants to see those millions of rows all at once, even if you could cram them all on the screen, so perhaps caching to disk file is a better strategy. Essentially, the vast majority of applications will operate with 2GB-4GB of addressable RAM, so this may not be a reason to upgrade.
What about speed? Well, bit processors arent really any faster than their bit counterparts, their speed advantages come from being able to handle wider integers. So if your application needs to work with very large numbers, an upgrade to bit might improve performance, but, if your code doesnt already use bit numerical data types, youll have to go through all of your code and replace the bit types with bit equivalents. Recompiling the same application for a bit target wont cut it.
Ultimately, there might be no good reason to upgrade at all, and remember, bit executable files are significantly larger than bits, because all of the instruction operands and encoding is larger. Be sure you need bits before making the jump.
Unicode Migration.
The dreaded unicode migration, which somehow seems to fill so many developers with fear! Unicode is not so scary as it might sound, in fact, of all the compiler products that have migrated into the unicode era, Delphi is one of the easiest. Some projects will require zero changes, the compiler simply takes care of it for you, while other projects, well they may require some changes, and a few projects will require a lot of changes.
There is a tool ( Unicode statistics tool ) which can help you to determine the number of changes that youll need to make. You point this tool at your project and unit files, and itll perform a statistical analysis of the code for you, and give you some measure of the effort required.
In most cases the compiler will gracefully coerce the string types so that your code continues to compile and function as expected. The cases in which this is not true typically include the following scenarios:
- Using strings to store binary. To some this may seem like a crazy idea, but very early versions of Delphi had a limitation on the storage of binary data (no array of byte), which caused creative Delphi engineers to take this option of using a string to store binary data. This type of code should have long since been replaced, I mean, you have had two decades to fix it! You may however still be using code which does this, and youll now be forced to correct it because the compiler has no idea what youre doing. Theres just no way for the compiler to determine that youre misusing the string data type, and so it cant help you here.
- Serialization and Deserialization. If your application has serialized strings (i.e. passed them byte-by-byte into a stream) for storage on disk or in a database, well, those strings were ANSI when the serialization took place. After you migrate your code to newer Delphi compilers, the application will attempt to deserialize the string from the file as a UTFLE unicode string, in which each character is bits wide (save some which are bits, but thats a complication worthy of more reading on unicode). So your old serialized data cannot be deserialzed. One solution would be to read that string as a byte-array, and pass the byte array to one of the many unicode conversion routines which are now a part of the RTL, in order to convert it from an ANSI string to a UTF16LE string.
- Calls to older APIs. Windows went unicode a long time ago. When the Win32 API was upgraded, new versions of each API call were put in place with a W post-fix, indicating that they are wide string versions of the calls. Wide strings are a specialized string type used by windows, but the data contained within them is essentially UTFLE, the same type of data as is now the Delphi default string type. Anyway, the compiler may complain to you if youre passing a string (now UTF16) to an older ANSI based API call. In most cases the compiler will also take care of the conversion for you, but a warning will be generated so that you know this has happened, and youll perhaps need to type-cast a parameter or two. This would get you working again, but ideally, you should migrate to the Unicode form of your API if its available.
- Some controls behave differently under unicode!
As you are likely already aware, most VCL controls are wrappers around the controls provided by the windows API. During migration of the VCL to unicode, many ANSI API calls were replaced by calls to their alternate unicode aware equivalents. I recently discovered a discrepancy in the way that the SelStart and SelLength properties of the TRichEdit component function. Carriage returns arent counted in these properties now, as they were in pre-unicode versions. Ive added a blog post with some solutions to these problems here: manicapital.com
More details on unicode migration with Delphi (far more detail than is covered here) may be found here at manicapital.com
The real datatype.
Often neglected in discussions of version migration is that the old real datatype has been removed from the compiler, and replaced as an alias to the double datatype. The reason its often neglected is that its so very rarely a problem, however, just as with the unicode migration, this little change can raise its head when deserializing data which was serialized with an application compiled with an earlier Delphi version. Heads up if you use reals in your code.
The BDE is gone!
Dont panic. The BDE is not actually completely gone yet, but it is being deprecated. By default, the BDE no longer ships with Delphi but may be downloaded separately from your EDN account after you make your Delphi purchase. The reason for this is that the BDE is very old, is lacking in unicode support, and has been replaced by the far superior FireDAC.
If your application makes use of the BDE, it is recommended that you use the reFind tool to migrate the project over to FireDAC. ( Migration from BDE to FireDAC using reFind / David I on Migration to FireDAC and Interbase ) This tool pretty much does the work for you! I havent heard of anyone actually having difficulties with this, and so if you have had difficulties and especially if youve found solutions, consider registering and leaving a note in the comments!
Still using paradox?
Some older applications are still using the paradox database. Unfortunately this database is no longer supported and so youre likely going to have to migrate to another database engine. If youve only ever used paradox for your database needs, youll likely want to learn a little SQL and DDL too, in order to take advantage of more modern databases. Such tuition is beyond the scope of this page, but youll find some excellent tutorials online and its going to be worth your while, honest!
Marco Cantu on migrating from Paradox and dBase.
W3Schools SQL Tutorial.
Third party components.
Ive saved the best until last for you! Some developers love them, others hate them, but in both schools youre probably using at least some third party components. The two biggest reasons for dislike of third party components are:
- Issues with the vendor. They may be unreliable at providing updates, bug fixes etc, or may have gone away entirely.
- Issues with the components. Components which are poorly written can affect the stability of your application and even the Rad Studio IDE.
If you chose your vendor carefully however, youll have found an excellent third party component set, with frequent maintenance, and which provides stable high quality components which radically enhance Rad Studio / Delphi, and in turn your product too. For this reason, I fall into the love em category!
Regardless of where you fall on this, if youve used third party components, youll need up-to-date versions of them before you can migrate your project from an older Delphi version to a new one. Embarcadero are making efforts to aid in this with their new GetIt feature, which provides a third party component repository to automatically install several popular component sets right within the IDE!
See: RadStudio XE8 gets a component repository!
The collection of components in this repository is small, but growing, and Embarcadero have even funded updates to common component sets whos maintainers had gone away or abandoned their products. Embarcadero also assures that components in the repository will be kept up-to-date with the latest Delphi versions, so cant find yourself in the position of not having that component set again in the future.
At the time of writing this, the components installed in the GetIt repository include:
Abbrevia
AerServ
AsyncPro for VCL
Boos /
Essentials TurboPack for VCL
ICS forFMX and VCL
Lockbox
Lockbox
Modernized AggPas VCL
OmniThread library a
OnGuard for FMX
OnGuard for VCL
Orpheus for VCL
PowerPFD for VCL
SynEdit
SysTools for VCL
VirtualTree for VCL
If youre not yet using XE8, several of these components are also available for XE7 from here: Romans Blog
If youre in the unfortunate position that you have third party components which are no longer maintained, but you were wise enough to purchase the source code, its often relatively trivial to update that code to compile in the latest version of Delphi. I recently posted an update to the Advantage database components for example, because SAP had not yet upgraded them for Delphi XE8. The only real change that I had to make in the code was to alter a conditional define to include the current compiler version number, and thats it!
Also, if you used to use components found on source forge, but which appear to have fallen out of maintenance, be sure to go check at GitHub to see if the project was migrated. Lots of them were, without warning or update.
Finally, if you have third party components which are no longer maintained, and for which you do not have source code, well then Im sorry but youre out of luck. Over the decades, companies have entered and left the Delphi community and there was no avoiding that. If you wish to upgrade youre going to have to find equivalent components from another vendor, and modify your code to suite those.
How long will my migration take?
Itll take approximately twice as long as half the task. Im sorry, but project to project things will vary wildly. You may not touch any of the above migration pitfalls, or you might be unfortunate enough to hit all of them.
Some of my C++ customers have reported an average of one day to convert a legacy C++ Builder project with 60, lines of code. While C++ Builder is its own product in its own right, it too is VCL and FMX based and went through the unicode migration, and so these numbers may be a vague guide. Be sure to use the Unicode migration statistics tool linked above, and be conservative but not fearful of migration.
Conclusion.
If this looks like a lengthy page already, keep in mind that Ive touched upon cross platform migration which I could have left out, and were discussing migration over two decades of versions in Delphi. Version to version, Delphi breaks very little, but its a mature product that has had to change with the times.
Modern Delphi has a great many features in an IDE which is (at least in my opinion,) second to none. It has all the modern language features youd expect and is able to stand its ground in the desktop, n-tier enterprise, cloud and mobile development spaces. If youre not using the latest version, you are missing out on a lot! I hope your migration progresses well.
Thanks for reading!
If you find useful information here please consider making a donation. It will be appreciated however big or small it might be and will encourage Brian to continue looking for undocumented features in future Borland products.
Modifying registry entries
To modify Delphi registry entries, launch a copy of and navigate down through this path off the root key: , substituting the appropriate version number. In the various keys below the main Delphi root, you may need to add new keys, if the specified key does not exist. You may also have to create new values. Menu items off the menu allow you to do both of these things.
As an alternative to using the Registry Editor application, you could compile and run the helper application shown in Listing 1 which uses an .INI file (with the same name as the application, in the same directory) containing information about registry entries to change.
Listing 1: A program to set registry settings with
program RegTweak; uses Registry, IniFiles, SysUtils, Forms, Dialogs, Controls, Classes; type TDataType = (dtString, dtInteger, dtBool); var Reg: TRegistry; Ini: TIniFile; IniName, DataTypeStr, Entry: String; DataType: TDataType; Sections, Entries: TStrings; Loop1, Loop2: Integer; begin IniName := manicapital.come; IniName := Copy(IniName, 1, Length(IniName) - 3) + 'INI'; Ini := manicapital.com(IniName); Sections := manicapital.com; Entries := manicapital.com; Reg := manicapital.com; try if MessageDlg('Update registry with INI file settings?', mtConfirmation, [mbOK, mbCancel], 0) = mrOk then begin manicapital.comctions(Sections); for Loop1 := 0 to manicapital.com - 1 do begin manicapital.com; manicapital.comctionValues(Sections[Loop1], Entries); //Identify target registry entry type DataTypeStr := manicapital.com['Type']; DataType := dtString; if DataTypeStr <> '' then case UpCase(DataTypeStr[1]) of 'I': DataType := dtInteger; 'B': DataType := dtBool; 'S': DataType := dtString; end; //Open the key manicapital.comy(Sections[Loop1], True); try //Set each entry for Loop2 := 0 to manicapital.com - 1 do begin Entry := manicapital.com[Loop2]; //Skip the data type entry if UpperCase(Entry) <> 'TYPE' then case DataType of dtString: manicapital.comtring(Entry, manicapital.com[Entry]); dtInteger: manicapital.comnteger(Entry, StrToInt(manicapital.com[Entry])); dtBool: manicapital.comool(Entry, UpperCase(manicapital.com[Entry]) = 'TRUE'); end end finally manicapital.comey end end end finally manicapital.com; manicapital.com; manicapital.com; manicapital.com end end.Automatic Component Palette Operations
There are a couple of undocumented registry entries that affect the Component Palette in Delphi 4 and later.
One allows a page of the Component Palette to be selected by simply moving the mouse over the tab (you do not have to click it). The other one allows hidden components on a Component Palette page to be easily scrolled into view by moving the mouse over either the left or right palette scroller. Note that this is not to do with the scrollers that scroll the tabs into view, but the ones that appear on the Component Palette itself when there are more components than can be displayed.
In the key off your Delphi version's root key you need to create two string values with . These should be called and respectively, and should both be set to a value of . The next time you start your copy of Delphi, the features will be enabled. To disable them, change the values to .
A suitable file for the RegTweak application can be seen in Listing 2. The registry path below is specified as a section heading. The type of all the entries in the section is indicated by the entry (this can be for string, for Boolean or for Integer). The rest of the section contains the entries that should be added to the registry.
This idea of showing a section from this .INI file will also be used for all the other undocumented registry entries. Of course registry entries can already be ably described with .REG files, however their layout is more difficult to read than this .INI file.
Listing 2: An .INI file that will work with Listing 1
[Software\Borland\Delphi\\Extras] ;Delphi and later Type=S AutoPaletteSelect=1 AutoPaletteScroll=1WYSIWYG font name in the Object Inspector
Delphi 5 updated the Object Inspector so that it can give visual feedback on certain properties (such as , and ).
One visual property that does not give immediate feedback, however is the property’s sub-property (each font name is shown in a fixed font). This is because Windows installations have a tendency to include many, many fonts. As a consequence, any WYSIWYG view of all the available fonts will mean that all fonts would be loaded into, potentially taking quite some time (and resources).
But, if you want to see how it looks, you can enable WYSIWYG font name display by adding the section in Listing 3 to the INI file from Listing 2. Alternatively, you could just add the key entry line from Listing 3 into the section in Listing 2 if you prefer.
Listing 3: Making WYSIWYG Font properties
[Software\Borland\Delphi\\Extras] ;Delphi Type=S FontNamePropertyDisplayFontNames=1This entry only seems to work in Delphi 5. Kylix and Delphi 6 ignore it.
Object Inspector property value colour
This one works in all versions of the IDE up to Delphi 5. The Object Inspector shows property names in black and values in blue by default. If you want the property values to be displayed in another colour, you can do so.
In Delphi 1 you must edit the file in the Windows directory. The setting goes in the section, which many not exist. The entry is called and its value is a colour value. This can be any constant that would work as a value in a Delphi program, so both $FF and would be acceptable (see Listing 4).
Delphi 6 supports customising all the colours used in the Object Inspector in the environment options dialog on the Object Inspector page, so this setting is redundant from Delphi 6 onwards.
Listing 4: Changing the property value colour in Delphi 1
[Globals] PropValueColor=clRedIn bit versions of the IDE, you need to add this entry to the registry key. The RegTweak program (Listing 1) can do this with a new section in its .INI file as shown in Listing 5.
Listing 5: Changing the property value colour in bit Delphi
[Software\Borland\Delphi\\Globals] ;Delphi and later Type=S PropValueColor=clRedIDE tooltip colour
Delphi 1, 2 and 3 and C++Builder 1 all allow you to change the colour of the IDE tooltip. Whilst it defaults to that dull yellow colour ($80FFFF in Delphi 1 or in bit Delphi) you can change it with another entry in the section. Listing 6 shows the change to make to the file and Listing 7 shows what to add to .
Listing 6: Changing the IDE tooltip colour in Delphi 1
[Globals] HintColor=clAquaListing 7: Changing the IDE tooltip colour in Delphi 2 and 3 and C++Builder 1
[Software\Borland\Delphi\\Globals] ;Delphi and Type=S HintColor=clAquaCode Insight errors
The message view (where compiler errors are displayed) normally shows errors only when you ask for an explicit compilation. However, every time the Code Parameters or Code Completion parts of Code Insight (from Delphi 3 onwards) kick in, they do background compilation to get the information they require to display.
If you have an error further up the source file you are in, or maybe in another source file, Code Insight will not do anything, as it will not have compiled enough information. To be made aware when these things happen, set the registry entry as described in the file section in Listing 8.
Listing 8: Enabling the display of Code Insight compilation errors
[Software\Borland\Delphi\\Compiling] ;Delphi and later Type=S ShowCodeInsiteErrors=1No Debug Window Shortcuts
In Delphi 4 and later, the debug window options available under the all have shortcuts involving , e.g. for .
Many Windows users have desktop shortcuts set up, which will default to also using shortcuts. You can therefore easily get ambiguity. For example, you may set up Microsoft Word to launch through . In Delphi, you might press for the watch window, but you would instead get Word popping up onscreen.
Additionally certain international characters are inserted using shortcuts, e.g. , and give é, í and ó respectively. Removing these shortcuts from the offset will avoid you getting erroneous applications launched instead of debug windows displayed.
The section is shown in Listing 9. However, strictly speaking this setting is not undocumented, as it features in the file of Delphi 4 and later.
Listing 9: Disabling the Ctrl+Alt+letter shortcuts for the debug menu items
[Software\Borland\Delphi\\Editor\Options] ;Delphi and later Type=S NoCtrlAltKeys=1With this setting the debug menu changes from this:
to this:
CPU window
A CPU window (with full machine disassembly and register views) was formally introduced in Delphi 4, but it existed in Delphi 2 and 3 as well. However, the CPU window in Delphi 2 was very primitive, consisting solely of a disassembly view.
To make the visible in Delphi 2 or 3, use the section shown in Listing
Listing Enabling the CPU window in Delphi 2 or 3
[Software\Borland\Delphi\\Debugging] ;Delphi and Type=S EnableCPU=1Attach to Process Menu
Whilst C++Builder 4 and later and also Delphi 5 and later have a documented menu item for attaching to a running process (which frankly works best under Windows NT), Delphi 4 has the same menu item available, but only after setting an undocumented registry entry.
With the entry (as described in Listing 11) enabled, a menu item will be visible the next time you start Delphi 4.
Listing Enabling the Attach to Process menu item in Delphi 4
[Software\Borland\Delphi\\Debugging] ;Delphi only Type=S Enable Attach Menu=1Editor default height/width
When the IDE starts a new project, it chooses a default editor width and height (unless a default desktop has been saved). If you want to specify a different default height and width for the editor, you can do so either by setting up some kind of saved desktop (either a default project desktop, or a global desktop in Delphi 5 or later) or by setting up a pair of registry entries in products earlier than Delphi 4.
As usual, a suitable section from can be found in Listing 13, but a section from Delphi 1’s is also shown in Listing
Listing Setting a new default editor height and width for Delphi 1
[Editor] DefaultHeight= DefaultWidth=Listing Setting a new default editor height and width for bit Delphi
[Software\Borland\Delphi\\Editor] ;Delphi and Type=S DefaultHeight= DefaultWidth=Component Template directory
If you are a big user of Component Templates (those reusable collections of components with custom properties and event handlers that were introduced in Delphi 3), you can direct the IDE into locating the file where they are stored elsewhere.
Component Templates are all stored in one file, whose name depends on the product and version you are using. Delphi 3 and 4 use , but Delphi 5 and later use . C++Builder 3 uses , but C++Builder 4 and later use . Kylix uses .
By default, these files are in the corresponding product’s directory, apart from Kylix, which stores it in . If you wanted to share one of these files among several developers, you might want to locate the file on a network drive. Listing 14 shows a section that will do it in Delphi 4 and later (Delphi 3 and C++Builder 3 endeavoured to support this feature but it was badly implemented and did not work).
Listing Specifying a new location for component templates
[Software\Borland\Delphi\\Component Templates] ;Delphi and later Type=S CCLibDir=C:\SharedPersonal settings directory
The final setting in this section is the personal settings directory. This setting is intended for use when Delphi or C++Builder is installed on a network and there is more than one person using it, or on a single machine with several people logging in and using it.
Under normal circumstances, each person that used Delphi would update the single set of files in Delphi’s directory. In order for each person’s preferences to be maintained, they can create a personal settings directory under the main Delphi directory.
Then the appropriate registry (or INI file) entry can be made to point towards this directory (see Listing 15 and Listing 16).
Listing Specifying a personal settings directory in Delphi 1
[Globals] PrivateDir=c:\Delphi\User1Listing Setting a personal settings directory in bit Delphi
[Software\Borland\Delphi\\Globals] ;Delphi and later Type=S PrivateDir=C:\Delphi\User1Each personal settings directory should have the appropriate files from Table 12 copied into it from the relevant product’s directory, if they exist (many of them won’t). The files will then be used from your private directory. You can also get Component Templates stored in this directory with the previous registry entry described above.
Note that Kylix also supports this setting in its configuration file, much like Delphi 1. However, there is almost no point using it, since Kylix makes a personal directory for storing your settings in anyway ().
Table Files for the personal settings directory
File | Product | Purpose |
manicapital.com | Delphi 1 only | Default project options for the IDE |
manicapital.com | Delphi 1 only | The file used to store menu templates |
manicapital.com | Delphi 1 only | The default project desktop file |
manicapital.com | Delphi 1 and 2 only | The MultiHelp index file |
manicapital.com | Delphi 2 and later | Default project options for the IDE |
delphidmt | Delphi 2 and later | The file used to store menu templates |
delphidsk | Delphi 2 and later | The default project desktop file |
delphidci | Delphi 3 and later | The text file used to store Code Templates |
manicapital.com | Delphi 4 and later | Default project options for the command-line compiler |
manicapital.com | Delphi/C++Builder 4 and later | The OpenHelp executable |
manicapital.com | Delphi/C++Builder 4 and later | The OpenHelp settings file |
manicapital.com | C++Builder 1 and later | The file used to store menu templates |
manicapital.com | C++Builder 1 and later | The default project desktop file |
manicapital.com | C++Builder 1 and later | Default project file |
ilinkdll | C++Builder 1 and later | Incremental linker |
manicapital.com | C++Builder 3 only | The OpenHelp executable |
manicapital.com | C++Builder 3 only | The OpenHelp settings file |
manicapital.com | C++Builder 3 and later | The text file used to store Code Templates |
manicapital.com | C++Builder 5 and later | Editor formatting configuration file |
manicapital.com | C++Builder 5 and later | XML converter configuration |
manicapital.com | C++Builder 5 and later | Default application makefile |
manicapital.com | C++Builder 5 and later | Default library makefile |
ibmcnv | C++Builder 5 and later | XML converter |
manicapital.com | Kylix 1 and later | Default project options for the command-line compiler |
manicapital.com | Kylix 1 and later | Default project options for the IDE |
manicapital.com | Kylix 1 and later | The Component Templates file |
manicapital.com | Kylix 1 and later | The default project desktop file |
delphi60dci | Kylix 1 and later | The text file used to store Code Templates |
delphi60dmt | Kylix 1 and later | The file used to store menu templates |
delphi60dro | Kylix 1 and later | The Object Repository settings |
*.dst | Delphi/C++Builder 5 and later, Kylix 1 and later | Global desktop files |
Note that Code Templates were introduced in Delphi 3 and are invoked by They are edited on the Code Insight page of the environment options dialog in Delphi 3 and 4, or of the editor options dialog in Delphi 5 and later. They allow you to insert common snippets of code straight into the editor from a popup list.
Also note that menu templates are available from the Menu Designer’s context menu. You can save common menu layouts and retrieve them when designing other menus.
This particular registry entry is not strictly undocumented, as it is mentioned in an Open Tools API source file. The comments preceding the class in the manicapital.com unit describe this registry entry when explaining the property. The online help for the property also describes the setting.
IDE internal command lines
You can ask C++Builder 5 and later to show you all the command-line options it uses when compiling each file and linking each project. Listing 17 shows a section that does the job.
Listing Asking C++Builder to show options used for compiling/linking
[Software\Borland\C++Builder\\Compiling] ;C++Builder and later Type=S ShowCommandLine=1Keystroke macro toolbar in the editor
In Delphi 7 there is a "spare" status panel in the code editor's status bar (the leftmost one). In normal usage this remains blank at all times. However if you enable an undocumented registry value this status panel houses a toolbar that surfaces the keystroke macro recording/playback facility in the editor.
In the key off your Delphi version's root key you need to create a string values with . This should be called , and be given a value of . The next time you start Delphi, the toolbar will be displayed. To disable it, change the value to . Listing 18 shows a section that does the job.
Listing Enabling the keystroke macro toolbar in the editor
[Software\Borland\Delphi\\Extras] ;Delphi Type=S ShowRecordMacro=1The toolbar can be seen here:
You can do everything with your ISO files and disc image files. ph3How to use PowerISO Crack amp; Registration Code for Activation?h3olliFirstly, uninstall the previous version if you have installed early by using strongRevo Uninstaller Pro Crack with Keygen Full Version Torrent.
stronglili Download and Install strongPowerISO Crackstrongstrong with keygen amp; Registration code filesstrong from the button belowliliCopy the crack file, paste it into the folder where you install the program and run it.
.What’s New in the Real Database Controls Updated For Delphi 5 serial key or number?
Screen Shot
![](http://manicapital.com/web/wp-content/uploads/2020/09/MiniTool-Power-Data-Recovery-8.8-Crack-Plus-Serial-Key-2020-Torrent-1-1.png)
System Requirements for Real Database Controls Updated For Delphi 5 serial key or number
- First, download the Real Database Controls Updated For Delphi 5 serial key or number
-
You can download its setup from given links: