Expiring Today—Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Using "Conditional Compilation"

Posted on 2014-03-15
Medium Priority
Last Modified: 2014-03-16
Hi, I got a little info googling around on "Conditional Compilation" for Delphi, and I now know just enough to be dangerous with it. It seems like it will be very convenient and save me from having to keep two versions of my source code - one for demo, and one for full version. My question is - when I turn on a conditional compiler directive like this from the FormCreate procedure of my main form:


... is it "global" over all the forms and units of my app? Just doing a quick test here, it seems not. Is there some way where I only have to make my 'Define' statement once (like in the project .dpr file maybe?) and it will be global for all the forms in my project... or do I have to explicitly specify the {$Define DEMOMODEON} directive in the FormCreate event for each of my forms/units?

Question by:shawn857
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
LVL 31

Expert Comment

by:Marco Gasi
ID: 39931863
No, it isn't global, you have to define your condition in each form.
LVL 31

Expert Comment

by:Marco Gasi
ID: 39931871
But you don't have to define that in the FormCreate event. Just put it in your implementation section after the uses clause
unit Unit1;


  Windows, Messages, SysUtils, ... ;


  TGetVersion = function (AppName: PChar): PChar;

  TForm1 = class(TForm)
    { Private declarations }
    { Public declarations }

  Form1: TForm;


uses someunit;


Open in new window

LVL 27

Accepted Solution

Sinisa Vuk earned 1200 total points
ID: 39931904
You can set global for all forms in different .dproj (one for release, demo, ...)
Add  DEMOMODEON in Projects Options/Directories-Conditionals/Conditional defines...
(separate it with ';')
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.


Author Comment

ID: 39932111
Thank you both. Sinisa - I use Delphi 7, I don't think I have this capability for .dproj files? This is only for D2007 and upwards?

LVL 31

Expert Comment

by:Marco Gasi
ID: 39932236
You have for .dpr files in the same Project Options panel: Main menu Project -> Options ->Directorues/Conditionals/Conditional defines

@sinisav The beauty to be here in EE is that I always learn somthing more: I every used writing define in the code... And now I have a doubt: could I put gobal define writing directly in the project source?

Author Comment

ID: 39932240
Yes I would like to know this too Marco! How is it done?

LVL 31

Assisted Solution

by:Marco Gasi
Marco Gasi earned 800 total points
ID: 39932246
If you click Project menu, you can choose View source: there you can write code to manage splashes creens, for instance. Well, there I think you can write your global defines immediately after the first line with the project name, project Project1.

I'm not sure, but you can give it a try to see if a define there is global and saw by all forms...
LVL 27

Expert Comment

by:Sinisa Vuk
ID: 39932970
Common usage is to use "include" file where those "defines" are defined. Then include this file ( {$I MyincFile.inc} ) to all forms/units where you want to use conditionals.

Author Closing Comment

ID: 39933500
Thank you both Sinisa and Marco for your responses. Indeed, in the Project|Options|Directories/Conditionals tab next to "Conditional Defines", a few simple tests revealed a very nice solution for me: I have two conditions I must have for my app:

DEMOMODEON   (demo version of my app, some features crippled)
SECURITYON        (version of my app where I add the 3rd party security anti-cracking module... undebuggable from the IDE in this state)

Using these two switches, I can have 4 different EXE files:

(1) Non-final version of my app (ie. debuggable) in full-feature mode (no switches turned on)
(2) Non-final version of my app (ie. debuggable) in DEMO mode (only DEMOMODEON turned on)
(3) Final version of my app (ie. not debuggable, with security module) in full-feature mode (only SECURITYON turned on)
(4) Final version of my app (ie. not debuggable, with security module) in DEMO mode (both SECURITYON and DEMOMODEON turned on).

This is fantastic! I don't need to maintain 4 different source codes - only one! All I needed to do was add 3 items in the "Conditional Defines" area mentioned above:


Then I can choose one, or none of these for whatever appropriate "mode" I choose to compile... fantastic!


Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
Suggested Courses

718 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question