用TabStop和FocusRect实现一个TLabel



我正在使用Delphi7,我正在尝试实现一个LinkLabel,就像你可以在Windows Vista及以上版本的控制面板下找到的那样。

在悬停时改变光标/颜色真的很简单,我唯一需要做的就是使TLabel接收制表符并在其周围绘制焦点矩形

有什么好主意吗?我理解TLabel由于其性质而不接收选项卡。也有TStaticText接收标签,但它也没有一个焦点矩形。

这是一个派生的静态函数,它在聚焦时绘制一个焦点矩形。应该设置"TabStop",或者应该添加检查代码。看起来不太好(控件实际上没有空间在所有的边缘行),但无论如何:

type
  TStaticText = class(stdctrls.TStaticText)
  private
    FFocused: Boolean;
  protected
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  end;
...
procedure TStaticText.WMSetFocus(var Message: TWMSetFocus);
begin
  FFocused := True;
  Invalidate;
  inherited;
end;
procedure TStaticText.WMKillFocus(var Message: TWMKillFocus);
begin
  FFocused := False;
  Invalidate;
  inherited;
end;
procedure TStaticText.WMPaint(var Message: TWMPaint);
var
  DC: HDC;
  R: TRect;
begin
  inherited;
  if FFocused then begin
    DC := GetDC(Handle);
    GetClipBox(DC, R);
    DrawFocusRect(DC, R);
    ReleaseDC(Handle, DC);
  end;
end;

相关内容

  • 没有找到相关文章

最新更新