相关疑难解决方法(0)

使用(Object as TClass)和TClass(Object)之间的区别有什么区别

有一个问题,哪里MyObj.classnameis(TMyClass.classname)是真的,TMyClass(MyObj)但有效,但(MyObj as TMyclass).doSomething会引发转换错误.

我真的不希望任何有关垃圾的帮助,不过如果你想把它放在超级评论中.我只是想知道Obj as Class和之间的区别Class(Obj).

delphi casting typecast-operator

17
推荐指数
2
解决办法
4851
查看次数

如何确定自定义TComponent所在的DFM路径?

在自定义中,我需要获取使用 的或文件TComponent的路径。显然,这仅在设计时需要。*.dfm*.pasTComponent

语境

与上一个问题类似:
How to detector the dfm/project path from a custom control while in the Designer?

我创建了一个类似于 TImageCollection 的自定义 TControl,但具有所有应用程序的共享图像数据库。为此,控件读取一个项目元文件,该文件是一个 XML,其中包含要包含在图像集合中的图像列表。在设计器中,图像是直接从图像文件中读取的,但在运行时,图像位于编译期间生成的资源(*.res)文件中。

if csDesigning in Self.ComponentState then
  loadImagesFromFiles(...)
else
  loadImagesFromResource(...)
Run Code Online (Sandbox Code Playgroud)

在以前的版本中(对于上面链接的其他问题),我尝试获取项目的路径,虽然这似乎不可能,但我找到了一种获取活动项目路径的方法。然而,当 IDE 打开多个项目时,这就很成问题了。

我决定改用另一种方法,即使用相对于使用组件的 DFM 的路径。这个应该比较靠谱。

TComponent不幸的是,对于放置在 DFM 上的自定义程序来说,了解 DFM 的位置似乎并不容易。

解决方案(一半)

我尝试了几种解决方案IOTA,但还没有任何效果。

此处提供的方法将路径返回到自身TComponent,而不是返回到使用它的 DFM。

我设法遵循相同的策略迭代模块,但找到哪个模块包含给定的模块TComponent并不简单:

function GetCurrentDfmPath(AComponent: TComponent): String;
var
  ModuleServices: IOTAModuleServices;
  Module: IOTAModule;
  idx: integer;
begin
  Result := '';
  SourceEditor := nil;

  if SysUtils.Supports(BorlandIDEServices, …
Run Code Online (Sandbox Code Playgroud)

delphi designer tcustomcontrol

3
推荐指数
1
解决办法
107
查看次数