有一个问题,哪里MyObj.classnameis(TMyClass.classname)是真的,TMyClass(MyObj)但有效,但(MyObj as TMyclass).doSomething会引发转换错误.
我真的不希望任何有关垃圾的帮助,不过如果你想把它放在超级评论中.我只是想知道Obj as Class和之间的区别Class(Obj).
在自定义中,我需要获取使用 的或文件TComponent的路径。显然,这仅在设计时需要。*.dfm*.pasTComponent
与上一个问题类似:
How to detector the dfm/project path from a custom control while in the Designer?
我创建了一个类似于 TImageCollection 的自定义 TControl,但具有所有应用程序的共享图像数据库。为此,控件读取一个项目元文件,该文件是一个 XML,其中包含要包含在图像集合中的图像列表。在设计器中,图像是直接从图像文件中读取的,但在运行时,图像位于编译期间生成的资源(*.res)文件中。
Run Code Online (Sandbox Code Playgroud)if csDesigning in Self.ComponentState then loadImagesFromFiles(...) else loadImagesFromResource(...)
在以前的版本中(对于上面链接的其他问题),我尝试获取项目的路径,虽然这似乎不可能,但我找到了一种获取活动项目路径的方法。然而,当 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)