是否可以将.self用于未动态创建的组件?

时间:2017-05-31 15:09:06

标签: delphi self

如果我在表单上有20个面板(非动态)并且想要在鼠标悬停在其上时更改它们的颜色,我可以使用self.color吗?我试过这个,但它改变了表格的颜色。有人建议我尝试使用panel1.assign(panel1)将每个面板分配给自己,尽管有一个错误表明TPanel无法分配给自己。我也试过Form1.free,但这也没有帮助。

我是否必须动态创建面板才能使用Self,还是有其他方式?

2 个答案:

答案 0 :(得分:5)

假设您在设计时分配OnMouse(Enter|Leave)事件处理程序,处理程序将属于您的TForm类,这就是Self指针在运行时引用Form对象的原因。使用处理程序的Sender参数,指向实际触发事件的对象,例如:

procedure TMyForm.Panel1MouseEnter(Sender: TObject);
begin
  TPanel(Sender).Color := ...;
end;

procedure TMyForm.Panel1MouseLeave(Sender: TObject);
begin
  TPanel(Sender).Color := ...;
end;

答案 1 :(得分:-1)

试试这个:

type
  TPanel = class(Vcl.ExtCtrls.TPanel)
  protected
    procedure MouseEnter; override;
    procedure MouseLeave; override;
  end;

implementation

procedure TPanel.MouseEnter;
begin
  inherited;
  Color := clBlack;
end;

procedure TPanel.MouseLeave;
begin
  inherited;
  Color := clBtnFace;
end;
相关问题