gpt4 book ai didi

delphi - 使用 TabStop 和 FocusRect 实现 TLabel?

转载 作者:行者123 更新时间:2023-12-03 15:52:13 25 4
gpt4 key购买 nike

我正在使用 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;

关于delphi - 使用 TabStop 和 FocusRect 实现 TLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com