我正在使用Delphi7,我正在尝试实现一个LinkLabel,就像在Windows和更高版本的控制面板下可以找到的那样。
在悬停时更改光标/颜色非常简单,唯一需要做的就是让使TLabel接收制表符并在其周围画一个焦点矩形()。
对怎么做有什么想法吗?我知道TLabel没有接收标签,因为它的本质。也有TStaticText,它确实接收标签,但它也没有焦点矩形。
发布于 2014-05-20 10:58:10
这里有一个派生的静态,它在聚焦时绘制一个焦点矩形。应该设置'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;https://stackoverflow.com/questions/23754853
复制相似问题