JvDockTabPageControl: Показать заголовок формы в подсказке при наведении курсора
У меня есть несколько вкладок форм в элементе управления страницы JvDocking, но вкладки слишком малы для отображения всего заголовка формы.
Есть ли способ отобразить подсказку, содержащую текст вкладки при наведении на вкладку?
Самый близкий, который я получил, является подсказкой на каждой форме:
TJvDockVIDTabPageControl(Form).Pages[i].Hint := 'hint';
и один совет на всю панель вкладок:
TJvDockVIDTabPageControl(Form).Panel.Hint := 'hint';
1 ответ
Вы не можете использовать подсказку, поскольку она не обновляет подсказку при перемещении по вкладкам. Поэтому вам нужно переопределить 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 и внести изменения, либо создать подкласс для обеспечения собственной функциональности, а затем внедрить этот класс в свой стиль закрепления. Вот грубый пример того, как:
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;
Затем вы можете реализовать его в своей основной форме создания, переопределив TabDockClass в стиле док-станции, чтобы использовать наш подкласс. Вот так:
DockStyle.TabDockClass := TJvDockExtVIDTabPageControl;
DockServer.DockStyle := DockStyle;
Это работает и для стиля VSNET. Просто замените VID на VSNet, где бы он ни появлялся, и наследуйте от TJvDockVSNetTabPanel вместо TJvDockTabPanel
Обновить
Теперь в стволе JVCL есть обновление, которое будет делать это. Обновите компоненты и установите для свойства ShowTabHints стиля док-станции значение true. Или сделать это в коде.
MyDockStyle.ShowTabHints := True;