Delphi 单击“向下”和“向上”时更改零部件的颜色

Delphi 单击“向下”和“向上”时更改零部件的颜色,delphi,delphi-xe2,Delphi,Delphi Xe2,我设计了一个类似“瓷砖”的组件,我需要在单击下键或上键时更改颜色。 如何执行此操作?覆盖在TControl中引入的MouseDown()和MouseUp()过程,以设置组件的颜色。 如果零部件没有颜色特性,则需要替代绘制过程 type TMyComp = Class(TGraphicControl) private FColor: TColor; protected // .... Procedure Paint; override; procedur

我设计了一个类似“瓷砖”的组件,我需要在单击下键或上键时更改颜色。
如何执行此操作?

覆盖在TControl中引入的MouseDown()和MouseUp()过程,以设置组件的颜色。
如果零部件没有颜色特性,则需要替代绘制过程

type
  TMyComp = Class(TGraphicControl)
  private
    FColor: TColor;
  protected
    // ....
    Procedure Paint; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      override;
  End;

implementation

{ TMyComp }

procedure TMyComp.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Button = mbLeft then
  begin
    FColor := clRed;
    invalidate;
  end;
end;

procedure TMyComp.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Button = mbLeft then
  begin
    FColor := clLime;
    invalidate;
  end;

end;

procedure TMyComp.Paint;
begin
  inherited;
  // ...
  Canvas.Brush.Color := FColor;
  Canvas.FillRect(BoundsRect);
  // ....
end;

覆盖TControl中引入的MouseDown()和MouseUp()过程,以设置组件的颜色。
如果零部件没有颜色特性,则需要替代绘制过程

type
  TMyComp = Class(TGraphicControl)
  private
    FColor: TColor;
  protected
    // ....
    Procedure Paint; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      override;
  End;

implementation

{ TMyComp }

procedure TMyComp.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Button = mbLeft then
  begin
    FColor := clRed;
    invalidate;
  end;
end;

procedure TMyComp.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Button = mbLeft then
  begin
    FColor := clLime;
    invalidate;
  end;

end;

procedure TMyComp.Paint;
begin
  inherited;
  // ...
  Canvas.Brush.Color := FColor;
  Canvas.FillRect(BoundsRect);
  // ....
end;

在自己的WM_LBUTTONDOWN/WM_LBUTTONUPchange Color在自己的WM_LBUTTONDOWN/WM_LBUTTONUPchange在自己的WM_LBUTTONDOWN/WM_lbuttonown实现中更改颜色除了直接处理
WM_…
消息外,您应该覆盖虚拟
MouseDown()
MouseUp()
方法。让框架为您处理消息。@RemyLebeau谢谢,我可以根据您的建议自由编辑我的答案。您不应该直接处理
WM.
消息,而应该覆盖虚拟
MouseDown()
MouseUp()
方法。让框架为您处理消息。@RemyLebeau谢谢,我可以根据您的建议编辑我的答案。