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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TStringGrid и скролл бары у него. 
V
    Опции темы
MaXL
Дата 21.4.2008, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

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



Всем привет. Такая проблема, мне нужно вызывать Hint, в котором будет показывать подробная информация, о содержимом этой ячейки.
Только Hint нужно вызывать только тогда, когда он будет находиться в окрестности картинки, которая нарисована в ячейках StringGrid'а в нижнем правом углу. Пытался сделать это таким кодом:
Код

var
  gridCord: TGridCoord;
  cursorPos: TPoint;
  i: integer;
  deltaX, deltaY: integer;
  //.....
begin
  //....
  cursorPos:= ScheduleGrid.ScreenToClient(Mouse.CursorPos);
  gridCord:= ScheduleGrid.MouseCoord(cursorPos.X, cursorPos.Y);
  if (gridCord.Y < 1) or (gridCord.X < 1) then
    exit;

  deltaX:= 0;
  for i := 0 to gridCord.X - 1 do
    deltaX:= deltaX + ScheduleGrid.ColWidths[i];
  deltaX:= cursorPos.X - deltaX;

  deltaY:= 0;
  for i := 0 to gridCord.Y - 1 do
    deltaY:= deltaY + ScheduleGrid.RowHeights[i];
  deltaY:= cursorPos.Y - deltaY;
  // SCHEDULE_HINT_OUTSKIRTS равна 25
  if (deltaX) + SCHEDULE_HINT_OUTSKIRTS < ScheduleGrid.ColWidths[gridCord.X] then
    exit;
  if (deltaY) + SCHEDULE_HINT_OUTSKIRTS < ScheduleGrid.RowHeights[gridCord.Y] then
    exit;
  //....

Всё вроде бы работает, но как и следовало ожидать оно не стало работать когда я стал пользовать ScrollBaram'и, т.е. я немножко прокрутил вниз, и перестала показываться подсказка, ну это понятно почему, а вот как такое исправить я не знаю =(
Кто поможет ?


--------------------
MaXL
PM MAIL   Вверх
MaXL
Дата 23.4.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

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



Вопрос решён, оказывается всё гораздо проще. Определяем координаты мыши, относительно самого StringGrid'а и помещаем их в переменную gridCoord. Затем определяем координаты ячейки, над которой у нас находиться мышка и помещаем их в переменную underRect. Ну и дельта как X так и Y легко считается. Вот кусок кода, отвечающий за это:
Код

var
  gridCoord: TGridCoord;
  cursorPos: TPoint;
  underRect: TRect;
  //...
begin
  //...
  cursorPos:= ScheduleGrid.ScreenToClient(Mouse.CursorPos);
  gridCoord:= ScheduleGrid.MouseCoord(cursorPos.X, cursorPos.Y);
  underRect:= ScheduleGrid.CellRect(gridCoord.X, gridCoord.Y);

  if (gridCoord.Y < 1) or (gridCoord.X < 1) then
    exit;

  //showing hint, only in outskirts of icon
  deltaX:= cursorPos.X - underRect.Left;
  deltaY:= cursorPos.Y - underRect.Top;
  if (deltaX) + SCHEDULE_HINT_OUTSKIRTS < ScheduleGrid.ColWidths[gridCoord.X] then
    exit;
  if (deltaY) + SCHEDULE_HINT_OUTSKIRTS < ScheduleGrid.RowHeights[gridCoord.Y] then
    exit;   
  //показывает этот hint ;-)



--------------------
MaXL
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.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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