Delphi 用图像创建按钮
Delphi create button with image
我在创建带有图像和标签的按钮时遇到问题。
这是我的代码:
Class:
type
Folder = class(TButton)
AName:TLabel;
AImage:TImage;
constructor Create(Nme:String;Path:String;Handle:TForm);
end;
构造函数:
constructor Folder.Create(Nme:String;Path:String;Handle:TForm);
begin
AImage:=Timage.Create(Self);
AName:=TLabel.Create(Self);
AImage.Parent:=Self;
AName.Parent:=Self;
AName.Caption:=Nme;
AImage.Picture.LoadFromFile(Path);
end;`
以及我创建此按钮的事件:
procedure TForm3.Button1Click(Sender: TObject);
var Fld:Folder;
begin
Fld:=Folder.Create('It','D:\image.bmp',Form3);
Fld.Parent:=Form3;
Fld.Width:=100;
Fld.Height:=100;
end;
但是当我创建这个按钮时它会导致访问冲突!我必须如何处理它?
问题:
问题是您已经声明了构造函数的自定义版本,但您没有调用 TButton
class.
的父构造函数
您需要像这样更改构造函数:
constructor Folder.Create(Nme: String; Path: String; Handle: TForm);
begin
inherited Create(Handle); // <- Add this line
AImage := TImage.Create(Self);
AName := TLabel.Create(Self);
AImage.Parent := Self;
AName.Parent := Self;
AName.Caption := Nme;
AImage.Picture.LoadFromFile(Path);
end;
一般建议:
您需要学习如何自己调试此类问题。
在Fld:=Folder.Create('It','D:\image.bmp',Form3);
行下断点,然后使用Step Over
F8 / Trace Into
F7从 Run
菜单逐行检查您的代码。
您将看到,一旦到达行 AImage.Parent:=Self;
,就会发生异常。这是因为指向您的 Folder
对象的 Self
未正确初始化,并且不是正确的 TButton
后代。
你需要学习如何做才能在 Delphi 上取得进一步的进步,你很快就能自己解决这些问题。
此外,如果您需要为 Delphi 编写自定义组件,请花一些时间了解更多有关组件工作和使用方式的信息。我会推荐以下组件编写指南:
另请参阅 Delphi Coding Style 上的指南。
乍一看:
- Class 名称应以
T
开头
- Class 字段应以
F
开头,而不是 A
constructor
应该在 public 部分,字段在 private
或 protected
- 您应该在参数周围、声明中的变量之后和运算符周围使用空格
我在创建带有图像和标签的按钮时遇到问题。 这是我的代码:
Class:
type
Folder = class(TButton)
AName:TLabel;
AImage:TImage;
constructor Create(Nme:String;Path:String;Handle:TForm);
end;
构造函数:
constructor Folder.Create(Nme:String;Path:String;Handle:TForm);
begin
AImage:=Timage.Create(Self);
AName:=TLabel.Create(Self);
AImage.Parent:=Self;
AName.Parent:=Self;
AName.Caption:=Nme;
AImage.Picture.LoadFromFile(Path);
end;`
以及我创建此按钮的事件:
procedure TForm3.Button1Click(Sender: TObject);
var Fld:Folder;
begin
Fld:=Folder.Create('It','D:\image.bmp',Form3);
Fld.Parent:=Form3;
Fld.Width:=100;
Fld.Height:=100;
end;
但是当我创建这个按钮时它会导致访问冲突!我必须如何处理它?
问题:
问题是您已经声明了构造函数的自定义版本,但您没有调用 TButton
class.
您需要像这样更改构造函数:
constructor Folder.Create(Nme: String; Path: String; Handle: TForm);
begin
inherited Create(Handle); // <- Add this line
AImage := TImage.Create(Self);
AName := TLabel.Create(Self);
AImage.Parent := Self;
AName.Parent := Self;
AName.Caption := Nme;
AImage.Picture.LoadFromFile(Path);
end;
一般建议:
您需要学习如何自己调试此类问题。
在Fld:=Folder.Create('It','D:\image.bmp',Form3);
行下断点,然后使用Step Over
F8 / Trace Into
F7从 Run
菜单逐行检查您的代码。
您将看到,一旦到达行 AImage.Parent:=Self;
,就会发生异常。这是因为指向您的 Folder
对象的 Self
未正确初始化,并且不是正确的 TButton
后代。
你需要学习如何做才能在 Delphi 上取得进一步的进步,你很快就能自己解决这些问题。
此外,如果您需要为 Delphi 编写自定义组件,请花一些时间了解更多有关组件工作和使用方式的信息。我会推荐以下组件编写指南:
另请参阅 Delphi Coding Style 上的指南。
乍一看:
- Class 名称应以
T
开头
- Class 字段应以
F
开头,而不是A
constructor
应该在 public 部分,字段在private
或protected
- 您应该在参数周围、声明中的变量之后和运算符周围使用空格