1

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

我不擅长“继承/覆盖”事物。提前致谢

4

1 回答 1

4

插入

ParentBackground := False;

在设置颜色之前。当您更改默认颜色时,这是在设计时自动完成的,但在运行时您需要它。

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

于 2013-09-26T17:39:53.307 回答