Is it possible to use the library only for development time in delphi?

I am trying to write a component that loads 3D objects from obj files. I use ToolsAPI for GetActiveProject.FileName. I added designide.dcp to the Requiers part in bpl. I registered my object in the design, when I put an instance of this object in TViewPort3D, which I put before everything is okay, and I see that the object from the obj file is loaded into the scene, but when I try to compile the project, I get an error message that is not found in the ToolsAPI.dcu file.

The procedure that I use to load the obj file (Model variable type is TModel3D):

procedure TMyObject.LoadModel(fileName: string);
begin
  if(csDesigning in ComponentState)then
    Model.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(GetActiveProject.FileName))+'Obj\'+filename)
  else
    Model.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))+'Obj\'+filename);
end;

This procedure is used in the constructor as follows (TMyObject inherited from TDummy):

constructor TMyObject.Create(AOwner:TComponent)
begin
  inherited;
  Model:=TModel3D.Create(Self);
  Model.Parent:=Self;
  LoadModel('Object1.obj');
end;

- ToolsAPI, ?

- , .

{$IFDEF DESIGNTIME}    
uses ToolsAPI;    
{$ENDIF}

?

+4
2

, . , . . ToolsAPI , .

, ToolsAPI, . , .

, , . , , API , , .

, , , . , uMyComp.pas, , . . uMyComp.pas ToolsAPI. , uMyCompReg.pas , , ToolsAPI. , uMyCompReg.pas uMyComp.pas. , , , uMyComp.pas.


, . , . , DESIGNTIME. uMyComp.pas, . , , DESIGNTIME. , uMyComp.pas, DESIGNTIME .

, , , . , , , , .


ToolsAPI ? :

procedure TMyObject.LoadModel(fileName: string);
begin
  if csDesigning in ComponentState then
    Model.LoadFromFile(IncludeTrailingPathDelimiter(
      ExtractFilePath(GetActiveProject.FileName))+'Obj\'+filename)
  else
    Model.LoadFromFile(IncludeTrailingPathDelimiter(
      ExtractFilePath(ParamStr(0)))+'Obj\'+filename);
end;

, . , , - , LoadFromFile . , . :

procedure TMyObject.LoadModel(fileName: string);
var
  ModelDir: string;
begin
  if csDesigning in ComponentState then
    ModelDir := ExtractFilePath(GetActiveProject.FileName)
  else
    ModelDir := ExtractFilePath(ParamStr(0));
  Model.LoadFromFile(IncludeTrailingPathDelimiter(ModelDir)+'Obj\'+filename);
end;

, GetActiveProject.FileName . (DI). - . TMyObject . DI , , , . , :

type
  TMyObject = class(...)
  ...
  public
    class var GetModelDir: TFunc<string>;
  end;

, , , . LoadModel :

procedure TMyObject.LoadModel(fileName: string);
var
  ModelDir: string;
begin
  if Assigned(GetModelDir) then
    ModelDir := GetModelDir()
  else
    ModelDir := ExtractFilePath(ParamStr(0));
  Model.LoadFromFile(IncludeTrailingPathDelimiter(ModelDir)+'Obj\'+filename);
end;

. - , GetModelDir . , . . :

initialization
  TMyObject.GetModelDir := 
    function: string
    begin
      Result := GetActiveProject.FileName;
    end;

, Delphi.

+2

, , , .

  • , .
    • . ( ToolsAPI) .
    • , , .
    • , .
  • 2 : .
  • ToolsAPI.
  • , - .
  • - ( ), .

, , .

+2

Source: https://habr.com/ru/post/1541424/


All Articles