Для форм, datamodules и другие единицы, которые содержат один класс, с помощью которого функция будет заменена, решение довольно простое. Просто НЕ добавляйте пользовательские устройства непосредственно к продукту, но сохраните их в пути поиска (или измените путь поиска проекта, чтобы включить его местоположение).
1) Создайте новый блок, который содержит либо родительский для всех других классов, либо интерфейсы, которые все они будут реализовывать (я обычно предпочитаю более поздний, поскольку он позволяет упростить настройку) [например, это называется uSpecialParent.pas]
2) Добавьте переменную класса, на которую будут ссылаться, когда вам нужно создать новую функциональность. Например, если вы только собирались показать модальную кучу форм, так и не заботиться о каких-либо других методах, то вы могли бы иметь переменный, которая выглядела так:
TYPE
TMySpecialFormClass : class of TForm;
VAR
TMySpecialForm : TMySpecialFormClass;
3) Создайте еще один блок, который будет содержат все IFDEFS. Это может выглядеть примерно так:
Unit uRegisterSpecialForms;
interface
uses
{$IFDF SPECIAL1}
uSpecial1,
{$ENDIF}
{$IFDEF SPECIAL2}
uSpecial2,
{$ENDIF}
uSpecialParent;
implementation
// no code needed.
initialization
{$IFDEF SPECIAL1}
TMySpecialForm := uSpecial1.TSpecialForm1;
{$ENDIF}
{$IFDEF SPECIAL2}
TMySpecialForm := uSpecial2.TSPecialForm2;
{$ENDIF}
end.
4) Для того, чтобы ссылаться на это в своем коде вы только нуждаетесь в uSpecialParent добавляется в блок, который будет запрашивающей специальную форму, а затем создать его динамически, например, чтобы показать эту модальность вы можете вызвать следующее:
var
frm : TForm;
begin
frm := TMySpecialForm.Create(nil);
try
frm.showmodal;
finally
frm.free;
end;
end;
Не могли бы вы объяснить, почему вы только _sometimes_ хотите единица быть участником вашего проекта? Я не понимаю цели. –
В нашем проекте мы используем FastMM, который поставляется с Delphi для сборки релизов, но внешний FastMM4.pas для отладки. Итак, у нас есть IFDEF вокруг «использует FastMM4;» –
@Ulrich: Я использую FastMM4 для сборки DEBUG и RELEASE - почему бы и нет? Это часть репозитория SVN проекта, и я получаю одну и ту же среду независимо от версии компилятора. Что не нравится? – mghie