覆盖Tpanel.MouseDown更改颜色

时间:2013-09-26 17:31:58

标签: delphi panel

如何覆盖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.

我不擅长“继承/改写”事情。提前致谢

1 个答案:

答案 0 :(得分:4)

插入

ParentBackground := False;

在设置颜色之前。当您从默认值更改颜色时,会在设计时自动完成此操作,但在运行时需要它。

编辑:不要在覆盖的Paint处理程序中再次设置颜色,你不需要它(虽然它不会有效果,因为颜色没有变化)。 (Credit @TLama - 我甚至没有注意到原始无格式代码中的覆盖)。