Как в Delphi определить в любом месте кода csDesigning находится ли сейчас в режиме разработки?

Как получить это значение для компонента понятно. А как получить это значение для произвольного места (для TObject or reference или local)?

Нужна функция, которая вернет true если Designtime сейчас, без создания нового компонента или какого-то общего локального компонента для этого определения. Может быть есть какой $define?

function IsDesignTime: Boolean;

Это rtti не подходит

function IsDesignTime: Boolean;
begin
  Result := TRttiContext.Create.FindType('ToolsAPI.IBorlandIDEServices') <> nil;
end;

это ниче такой

function IsDesignTime: Boolean;
implementation
var
  DesignTime: Boolean;
function IsDesignTime: Boolean;
begin
  Result := DesignTime;
end;
initialization
  DesignTime := ParamStr(0).EndsWith('\bds.exe', True);
end.

Есть еще варианты?

Написал либ но забыл всем TPersistent указазать события для IDE
owner а нет то зато с этим способом кучу объектов не нужно будет исправлять в противном случаи при удаление объекта item IDE выдает ошибку

procedure TObjectLister.DoCheckObjectItem(Prm:PObjectListerEventPrm);
begin
    inherited ;//inherited DoCheckObjectItem
    if IsDesingTime and (GetObject(Prm.index) is TPersistent) then
    case Prm.Enum of
          sevAdd:               NotifyDesigner(Self,  GetObject(Prm.index) as TPersistent, opInsert);
          sevAddObject:      NotifyDesigner(Self,  GetObject(Prm.index)as TPersistent, opInsert);
          sevInsertObject:   NotifyDesigner(Self,  GetObject(Prm.index)as TPersistent, opInsert);
          sevInsert:            NotifyDesigner(Self,  GetObject(Prm.index)as TPersistent, opInsert);
          sevDeleteBefore:   NotifyDesigner(Self, GetObject(Prm.index)as TPersistent, opRemove);
    end;
end;

Ответы (0 шт):