Я хочу, чтобы TPageControl и некоторые TTabSheets, с подсказками подсказок подсказок «за вкладку», когда я наводил курсор на каждую вкладку по очереди.TTabSheet подсказки в Delphi
Есть ли способ получить этот эффект в Delphi 2009?
Я хочу, чтобы TPageControl и некоторые TTabSheets, с подсказками подсказок подсказок «за вкладку», когда я наводил курсор на каждую вкладку по очереди.TTabSheet подсказки в Delphi
Есть ли способ получить этот эффект в Delphi 2009?
Просто перетащите событие мыши мыши элемента управления и используйте свойство TabAtPos, чтобы определить, на какой вкладке находится курсор мыши. Затем назначьте подсказку вкладки в свойство подсказки для параметра «Контроль страницы».
procedure TForm.PageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
end;
end;
CancelHint/ShowHint будет заботиться об обновлении окна подсказки при наведении мыши непосредственно из одной вкладки в другую.
Усовершенствованная, но уродливая версия ниже также временно изменяет HintPause на 0, когда мышь перемещается непосредственно из вкладки на вкладку, чтобы подсказка была перерисована немедленно. (The «уродливая» часть решения переходит к Application.ProcessMessages назвать, какие силы намекают сообщения будут обрабатываться до HintPause восстанавливается.)
procedure TForm.PagesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
hintPause: integer;
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
hintPause := Application.HintPause;
try
if PageControl.Hint <> '' then
Application.HintPause := 0;
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
Application.ProcessMessages; // force hint to appear
finally Application.HintPause := hintPause; end;
end;
end;
Чтобы скрыть подсказку на основном теле страницы, назначьте следующий метод на событие OnMouseLeave на элементе управления страницей.
procedure TForm.PageMouseLeave(Sender: TObject);
begin
PageControl.Hint := '';
PageControl.ShowHint := false;
end;
TabAtPos не существует, вы имели в виду IndexOfTabAt (x, Y). Это * так * почти работает правильно. За исключением того, что при переходе с одной вкладки на другую подсказка не обновляется и не отображается повторно. – Roddy
Извинения; Я использовал TRzTabSheet (Raize Components), который обладает свойством TabAtPos и работает хорошо. Вы можете просто программно показать подсказку об изменении tabindex, используя класс THintWindow. Задайте свойство Show Hint для параметра «Контроль страницы» равным false и создайте свой собственный. – Gerard
1 - заполните свойство .Hint и установите для свойства .ShowHint значение True для параметра PageControl (при условии, что для каждого таблиц установлено значение true для ParentShowHint, в противном случае вам нужно будет установить каждую страницу отдельно).
2 - Присвоить это событие обработчик события OnChange в PageControl в:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
PageControl1.Hint := PageControl1.ActivePage.Hint;
end;
После вы сделаете это, намек будет то, что вкладка активный есть. Я не уверен, как заставить его изменить намек, основанный на том, где мышь витает - это интересное явление, которое я никогда не замечал раньше, на самом деле.
Я думаю, что вопрос состоял в том, чтобы показывать подсказки для страниц без изменения активной страницы. – Wolf
В Raize Components, это может быть достигнуто путем установки trzpagecontrol.tabhints
свойства true
. Хорошие компоненты могут сэкономить вам много времени (поэтому деньги).
(просто счастливый клиент, кстати)
+1 - Вложение в компоненты Raize стоит того. Поддержка - это класс мирового уровня, и параметры визуального стиля могут действительно отличать ваше приложение от других с помощью стандартных элементов управления. – skamradt
Согласовано. Мы используем Raize почти исключительно для всех дизайнерских работ в пользовательском интерфейсе.Отличные компоненты и хорошая поддержка. – Gerard
На tPageControl.OnMouseMove найти TabIndex по Pgctrl.IndexOfTabAt (X, Y) и назначить Tabsheet намек на подсказку TPageControl
Посмотрите здесь:
Firefox также делает это –