DoubleBuffered уже некоторое время находится в TWinControl. Разница в Delphi 2009 заключается в том, что она опубликована сейчас.
Если вы можете жить, игнорируя только ошибки (и не заставляя свойства работать вместо этого), вот возможное решение:
unit Delphi2009Form;
interface
uses
Windows, Classes, SysUtils, Controls, Forms;
type
{$IFDEF VER200}
TDelphi2009Form = class(TForm);
{$ELSE}
TDelphi2009Form = class(TForm)
private
procedure ReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
protected
procedure ReadState(Reader: TReader); override;
end;
TReaderErrorProc = procedure(const Message: string);
var
ReaderErrorProc: TReaderErrorProc = nil;
{$ENDIF}
implementation
{$IFNDEF VER200}
type
THackReader = class(TReader);
procedure TDelphi2009Form.ReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
begin
with THackReader(Reader) do
Handled := AnsiSameText(PropName, 'DoubleBuffered') or AnsiSameText(PropName, 'ParentDoubleBuffered');
if Handled and Assigned(ReaderErrorProc) then
ReaderErrorProc(Message);
end;
procedure TDelphi2009Form.ReadState(Reader: TReader);
begin
Reader.OnError := ReaderError;
inherited ReadState(Reader);
end;
{$ENDIF}
end.
Затем измените объявления форм в вашем проекте для наследования от TDelphi2009Form, например ::
type
TFormMain = class(TDelphi2009Form)
...
Это будет работать во время выполнения - ошибки свойств будут игнорироваться. Чтобы заставить его работать во время разработки, также создайте пакет только для дизайна, добавьте designide.dcp в его условие require и добавьте в него следующий модуль:
unit Delphi2009FormReg;
interface
uses
Delphi2009Form;
procedure Register;
implementation
uses
DesignIntf, DesignEditors, ToolsAPI;
procedure ShowReaderError(const Message: string);
begin
with BorlandIDEServices as IOTAMessageServices do
AddTitleMessage(Message);
end;
procedure Register;
begin
RegisterCustomModule(TDelphi2009Form, TCustomModule);
ReaderErrorProc := ShowReaderError;
end;
initialization
finalization
ReaderErrorProc := nil;
end.
Установите пакет в Delphi 2007 IDE, и ошибки свойств для свойств DoubleBuffered и ParentDoubleBuffered будут автоматически игнорироваться при открытии форм в IDE.
Значения свойств будут потеряны при сохранении формы в Delphi 2007, поэтому вместо этого следует инициализировать их в коде.
РЕДАКТИРОВАТЬ : я добавил код для вывода сообщений об ошибках считывателя в окно сообщений IDE: