Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PageControl и hint закладки 
V
    Опции темы
zhefran
Дата 29.12.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



У меня проблемы с отображением всплывающих подсказок для конкретной вкладки при наведении на ее имя.
Программа типа браузера с закладками.
Для отображения подсказок использовал такое:
1. Код предложенный ama kid:
Код

procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
 i:integer;
 CurPage:integer;
 pt:TPoint;
begin
 // Проверяем, что у всех табов выставлен ShowHint=true и Hint'ы - присвоены...
 CurPage:=-1;
 for i:=0 to PageControl1.PageCount-1 do
  if PtInRect(PageControl1.TabRect(i),Point(X,Y)) then
   begin
    CurPage := i;
    break;
   end;
 PageControl1.Hint:=PageControl1.Pages[CurPage].Hint;
 pt:=PageControl1.ClientToScreen(Point(X,Y));
 Application.ActivateHint(pt);
end;
 
2. Нашел в интернете:
Код

procedure TForm.PageControlMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tabindex: Integer;
begin
  tabindex := PageControl.IndexOfTabAt( X, Y );
  if tabindex >= 0 then
     PageControl.Hint:=PageControl.Pages[tabindex].hint;
end;


В первом случае при переходе с вкладки на вкладку затирается область EmbeddedWB1 и не отображается текст подсказки, а область под нее выделяется. Отображается только  тогда, когда мышка находиться ниже закладки.
Во втором случае - подсказка не отображается при прямом переходе с tabsheet на tabsheet.
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
artsb
Дата 29.12.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 6
Всего: 64



Код

  if (tabindex >= 0) begin
     PageControl.Hint=PageControl.Pages[tabindex].Hint;
     Application.ActivateHint(Point(X,Y));
  end;


Добавлено @ 20:21
Работает на BCB 6.

Добавлено @ 20:25
Можно сделать так, чтобы хинт обновлялся только при наведении на другую вкладку:
Код

  if (tabindex >= 0 && tabindex <> PageControl.Tag) begin
     PageControl.Tag := tabindex; 
     PageControl.Hint=PageControl.Pages[tabindex].Hint;
     Application.ActivateHint(Point(X,Y));
  end;


Не забудьте изначально поставить Tag = -1.

Это сообщение отредактировал(а) artsb - 29.12.2009, 20:26


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
zhefran
Дата 30.12.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



artsb, спасибо за ответ, но при передвижении мышки на прямую с вкладки на вкладку хинт отображаться не хочет.

В первом варианте с 1 поста все работает идеально пока в Webbrowser не подгружена страничка!  
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
volvo877
Дата 30.12.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Цитата(zhefran @  30.12.2009,  12:21 Найти цитируемый пост)
при передвижении мышки на прямую с вкладки на вкладку хинт отображаться не хочет.
Вот это как себя ведет:
Код
procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tabindex: Integer;
  PC: TPageControl;
begin
  PC := Sender as TPageControl;
  tabindex := PC.IndexOfTabAt(X, Y);
  if ((tabindex >= 0) and (tabindex <> PC.Tag)) then
  begin
    PC.Tag := tabindex;
    Application.HideHint; // <--- Добавь эту строку
    PC.Hint := PC.Pages[tabindex].Hint;
    Application.ActivateHint(Point(X,Y));
  end;
end;
?

Причин не работать не вижу...
PM MAIL   Вверх
zhefran
Дата 30.12.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



Цитата(volvo877 @ 30.12.2009,  14:07)
Цитата(zhefran @  30.12.2009,  12:21 Найти цитируемый пост)
при передвижении мышки на прямую с вкладки на вкладку хинт отображаться не хочет.
Вот это как себя ведет:
Код

    Application.HideHint; // <--- Добавь эту строку
?

Причин не работать не вижу...

Вместо HideHint написал CancelHint и все прекрасно заработало! Огромное спасибо!
Вот код с правкой:
Код

procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tabindex: Integer;
  PC: TPageControl;
begin
  PC := Sender as TPageControl;
  tabindex := PC.IndexOfTabAt(X, Y);
  if ((tabindex >= 0) and (tabindex <> PC.Tag)) then
  begin
    PC.Tag := tabindex;
//    Application.HideHint; // <--- Добавь эту строку
    Application.CancelHint //<--- Вот так работает!
    PC.Hint := PC.Pages[tabindex].Hint;
    Application.ActivateHint(Point(X,Y));
  end;
end;


--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
artsb
Дата 30.12.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 6
Всего: 64



Цитата(zhefran @  30.12.2009,  13:21 Найти цитируемый пост)
спасибо за ответ, но при передвижении мышки на прямую с вкладки на вкладку хинт отображаться не хочет.

как не работает? Сейчас проверил на Delphi 2010. Всё работает:
Код

procedure TForm1.PageControlMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tabindex: Integer;
begin
  tabindex := PageControl.IndexOfTabAt( X, Y );
  if ((tabindex >= 0) and (tabindex <> PageControl.Tag)) then
  begin
     PageControl.Tag := tabindex;
     PageControl.Hint := PageControl.Pages[tabindex].Hint;
     Application.ActivateHint(Point(X,Y));
  end;
end;


Добавлено через 2 минуты и 42 секунды
Я просто малость с синтаксисом ошибся smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
zhefran
Дата 30.12.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



Цитата(artsb @  30.12.2009,  17:53 Найти цитируемый пост)
Я просто малость с синтаксисом ошибся smile 

Синтаксис я исправил сам! У меня Делфи 7 - не захотело! Позже перепроверю! Но мне кажется, что и с вашим кодом будет работать ели добавить:
Код

Application.CancelHint //<--- Вот так работает!


--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
artsb
Дата 30.12.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 6
Всего: 64



Цитата(zhefran @  30.12.2009,  18:00 Найти цитируемый пост)
У меня Делфи 7

Я проверил на BCB 6 и Delphi 2010. Всё отлично работает и без "Application.CancelHint". ;)


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
zhefran
Дата 30.12.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

Репутация: нет
Всего: нет



Цитата(artsb @  30.12.2009,  18:11 Найти цитируемый пост)
Я проверил на BCB 6 и Delphi 2010. Всё отлично работает и без "Application.CancelHint". ;) 

А у меня не работает! И с HideHint тоже! Работает только когда добавляю  "Application.CancelHint"!

Это сообщение отредактировал(а) zhefran - 30.12.2009, 18:30
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
artsb
Дата 30.12.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 6
Всего: 64



Странно...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.