我在JvDocking页面控件中有多个表格,但是标签太小而无法显示整个表单标题。
当标签悬停在上面时,是否仍然显示包含标签文本的提示?
我得到的最接近的是每个表格的提示:
TJvDockVIDTabPageControl(Form).Pages[i].Hint := 'hint';
并在整个标签面板上提示一下:
TJvDockVIDTabPageControl(Form).Panel.Hint := 'hint';
答案 0 :(得分:3)
您无法使用提示,因为当您在选项卡上导航时,它似乎不会刷新提示。因此,您需要覆盖TJvDockTabPanel.MouseMove()并执行以下操作:
inherited MouseMove(Shift, X, Y)
Index := GetPageIndexFromMousePost(X, Y)
// Your code here
if (Index > -1) then
begin
// Strip hotkey '&' out.
Hint := StringReplace(Page.Pages[Index].Caption, '&', '', [rfReplaceAll]);
Application.ActivateHint(ClientToScreen(Point(X, Y)));
end;
您可以分叉JvDockVIDStyle.pas并进行更改,或者将其子类化以提供您自己的功能,然后将该类注入您的dockstyle。以下是一个粗略的例子:
unit JvDockExtVIDStyle;
interface
uses JvDockVIDStyle, Classes;
type
TJvDockExtTabPanel = class(TJvDockTabPanel)
protected
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
end;
TJvDockExtVIDTabPageControl = class(TJvDockVIDTabPageControl)
public
constructor Create(AOwner: TComponent); override;
end;
implementation
uses Forms, SysUtils;
{ TJvDockExtVIDTabPageControl }
constructor TJvDockExtVIDTabPageControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//Override TabPanel with our subclassed version
TabPanelClass := TJvDockExtTabPanel;
end;
{ TJvDockExtTabPanel}
procedure TJvDockExtTabPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
Index : Integer;
begin
inherited MouseMove(Shift, X, Y);
Index := GetPageIndexFromMousePos(X, Y);
if (Index > -1) then
begin
Hint := StringReplace(Page.Pages[Index].Caption, '&', '', [rfReplaceAll]);
Application.ActivateHint(ClientToScreen(Point(X, Y)));
end;
end;
然后,您可以通过覆盖Dock样式上的TabDockClass来在主窗体中创建它,以使用我们的子类。像这样:
DockStyle.TabDockClass := TJvDockExtVIDTabPageControl;
DockServer.DockStyle := DockStyle;
这也适用于VSNET风格。只需将VID替换为VSNet,无论它出现在哪里,都可以从TJvDockVSNetTabPanel而不是TJvDockTabPanel继承
<强>更新强>
现在JVCL主干中有一个更新,它将执行此操作。更新组件并将dock样式上的ShowTabHints属性设置为true。或者在代码中进行。
MyDockStyle.ShowTabHints := True;