【发布时间】:2010-10-08 01:09:13
【问题描述】:
为顶帖致歉。这困扰了我多年,现在我真的需要知道答案。我放了 150 点赏金以吸引兴趣,但可能会增加正确答案。
这是我需要的:
我使用来自TMS Scripter Pro 的TMS obejct inpsctor 允许用户在运行时设计表单。您可以假设它源自标准的 Delphi Object Inspector,并添加了一些功能,但其中 90% 只是调用继承的方法。
当我单击 TImage 的 Picture 属性旁边的省略号时,它会调用一个继承的方法 - 我不知道是哪个 - 允许我加载图片。完成后,我不知道图像是从哪个文件加载的,我想将其以相同的名称保存在不同的目录中。
- 我可以提示用户输入文件名,但这让他看起来很困惑,而且很草率。
- 我可以找到一个 TImage / TPicture 后代,它存储文件名并允许我查询它。任何能指出此类 FOSS 组件的人都会获得奖励。
- 我可以从 TPicture 和/或 TImage 派生并自己编写代码,但不确定要更改什么。任何能准确告诉我如何编码的人都会得到赏金。确切地说,我的意思是命名类和方法。
提前感谢您的帮助。这个真的让我很烦。
对于my previous question,尽管获得了赏金,但没有得到有用的答案,我将尝试重新表述这个问题。
基本上,当用户在对象检查器中单击省略号时,Delphi 会打开一个文件/打开对话框。我想用我自己的替换这个处理,这样我就可以保存图像的路径。
我原以为我需要做的就是从 TImage 派生一个类并覆盖 Assign() 函数,如下面的代码所示。但是,当我这样做时,永远不会调用分配函数。所以,看起来我需要覆盖其他东西,但是什么?
unit my_Image;
interface
uses
Classes, ExtCtrls, Jpeg, Graphics;
type
Tmy_Image = class(Timage)
private
FPicture : TPicture;
protected
procedure OnChange(Sender: TObject);
public { Public declarations }
Constructor Create(AOwner: TComponent); override;
procedure SetPicture(picture : TPicture);
procedure Assign(Source: TPersistent); override;
published { Published declarations - available in the Object Inspector at design-time }
property Picture : TPicture read FPicture write SetPicture;
end; // of class Tmy_Image()
procedure Register;
implementation
uses Controls, Dialogs;
procedure Register;
begin
RegisterComponents('Standard', [Tmy_Image]);
end;
Constructor Tmy_Image.Create(AOwner: TComponent);
begin
inherited; // Call the parent Create method
Hint := 'Add an image from a file|Add an image from a file'; // Tooltip | status bar text
AutoSize := True; // Control resizes when contents change (new image is loaded)
Height := 104;
Width := 104;
FPicture := TPicture.Create();
self.Picture.Bitmap.LoadFromResourceName(hInstance, 'picture_poperty_bmp');
end;
procedure Tmy_Image.OnChange(Sender: TObject);
begin
Constraints.MaxHeight := Picture.Height;
Constraints.MaxWidth := Picture.Width;
Self.Height := Picture.Height;
Self.Width := Picture.Width;
end;
procedure Tmy_Image.SetPicture(picture : TPicture);
begin
MessageDlg('Tmy_Image.SetPicture', mtWarning, [mbOK], 0); // never called
end;
procedure Tmy_Image.Assign(Source: TPersistent);
begin
MessageDlg('Tmy_Image.Assign', mtWarning, [mbOK], 0); // never called
end;
end.
【问题讨论】:
-
您想要改变对象检查器,还是想要在运行时工作?您是真的在谈论 Object Inspector,还是在谈论您忘记提及的第三方供应商提供的其他一些外观相似的组件?
-
TMS 对象检查器不能是“Delphi 标准”。 Delphi Object Inspector 使用 Delphi 包中的设计时代码,这些代码无法重新分发给客户。
-
这里的“Delphi Standard”是指装在盒子里,而不是“un-Delphi”。您似乎想要的是一种改变此第三方软件行为 (TMS) 的方法。因此,“对象检查器”对于这个问题来说是一个非常糟糕的标题:它应该特定于第三方软件,并包含在标签等中。它可能非常具体,以至于你不会在这里得到问题,并且可能必须询问 TMS 的支持热线。 Delphi 不包含对象检查器,并且设计时支持不是用户可分发的,因此 TMS 必须手动重新实现几乎所有内容。你可能需要问他们。
-
快速搜索tmssoftware.com/site/products.asp?t=vcl 显示没有称为“对象检查器”的组件。如果您需要有关特定组件的帮助,请提供该组件的名称。否则,当我们试图猜测你在说什么时,你就是在浪费你和我们的时间;你最好只是在键盘上疯狂地挥舞着,希望你能按到正确的键。
-
您应该尝试将所有信息放在您的帖子中以获得帮助。但是,在写一个问题之前,我认为您应该阅读有关您正在使用的产品的文档:应该在某处说明您想要什么(如果可能)或者是否有可用于 TMS 产品的支持?只要问他们你想要的是否可能。也许在 TMS Software 上的用户论坛之类的东西上,您会发现在这组控件/组件方面有经验的人愿意为您提供帮助。
标签: delphi