如何覆盖TPanel的鼠标,以便每次单击面板时它都会改变颜色?我尝试了这段代码,但不会工作:
unit Unit1;
interface
uses
System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.ExtCtrls,
Vcl.Dialogs;
type
TPanelAA = class(TPanel)
protected
procedure Paint; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
end;
procedure Register;
implementation
procedure TPanelAA.Paint;
begin
inherited;
Color := $0000FF;
end;
procedure TPanelAA.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
ShowMessage('mouse down');
inherited;
Color := $0000FF;
end;
procedure Register;
begin
RegisterComponents('standard', [TPanelAA]);
end;
end.
我不擅长“继承/改写”事情。提前致谢
答案 0 :(得分:4)
插入
ParentBackground := False;
在设置颜色之前。当您从默认值更改颜色时,会在设计时自动完成此操作,但在运行时需要它。
编辑:不要在覆盖的Paint处理程序中再次设置颜色,你不需要它(虽然它不会有效果,因为颜色没有变化)。 (Credit @TLama - 我甚至没有注意到原始无格式代码中的覆盖)。