Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 15:36   #1
madmech
Пользователь
 
Регистрация: 30.04.2009
Сообщений: 19
По умолчанию Неправильно всплывает хинт

Я формирую в таблице (DBGrid) всплывающие хинты, меняющиеся от каждой строчки к строчке и от каждого столбца к столбцу в зависимости от содержимого ячейки. До поры до времени все происходит нормально - хинт всплывает в правильном месте: возле указателя мыши. Но как только указатель смещается к двум последним столбцам и трем последним строчкам (в правый нижний угол), хинт почему-то начинает появляться вверху, как показано на приведенном изображении:


Кто-нибудь сталкивался с подобной проблемой и если да, то как решили? Фрагменты кода по обработке движения мыши над ДБГридом готов предоставить по необходимости.
madmech вне форума Ответить с цитированием
Старый 03.06.2009, 15:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Фрагменты кода по обработке движения мыши над ДБГридом готов предоставить по необходимости.
Предьяви.
И покажи как ты хинт вылезать заставляешь?
Как ты с хинтом работаешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2009, 16:18   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Сам сказал -
Цитата:
в правый нижний угол
Скорее всего ему просто не хватает места, что бы отобразится правильно. Подобное происходит и в меню "Пуск": Если открытие следующей папки вправо недопустимо, она открывается влево.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.06.2009, 18:05   #4
madmech
Пользователь
 
Регистрация: 30.04.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Сам сказал - Скорее всего ему просто не хватает места, что бы отобразится правильно. Подобное происходит и в меню "Пуск": Если открытие следующей папки вправо недопустимо, она открывается влево.
И что же делать?
Цитата:
Предьяви.
И покажи как ты хинт вылезать заставляешь?
Как ты с хинтом работаешь.
Предъявляю:
Код:
procedure TMainForm.EnumDBGridMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);   
var XX, YY, CurRec: integer;
    m, i, Pos: integer;
    s: string;
    KG_Flag: Boolean;
begin
  with THackDBGrid(EnumDBGrid) do
    begin
      XX := MouseCoord(x, y).x;
      YY := MouseCoord(x, y).y;
      CurRec := DataLink.ActiveRecord;
      DataLink.ActiveRecord := YY - 1;
          if ((XX = 2) or (XX = 2 * number1 + 3) or (XX = 2 * number1 + 4)) and (YY > 0) then
            begin
              ShowHint := True;
              DM1.EnumCDS.RecNo := Columns[1].Field.AsInteger;
              for m := 1 to number1 do
                begin
                  Pos := 1;
                  for i := 1 to quantity do
                    begin
                      if i = 1 then
                        begin
                          if m = 1 then
                            s := 'Подгруппа ' + IntToStr(m) + ': ' +
                                 SurName[StrToInt(ExtractSubstr(Columns[2*m].Field.AsString, Pos, [',', ' ']))-1]
                          else
                            s := s + #13 + 'Подгруппа ' + IntToStr(m) + ': ' +
                                 SurName[StrToInt(ExtractSubstr(Columns[2*m].Field.AsString, Pos, [',', ' ']))-1];
                        end
                      else
                        s := s + ', ' + SurName[StrToInt(ExtractSubstr(Columns[2*m].Field.AsString, Pos, [',', ' ']))-1];
                      Pos := Pos + 1;
                    end;
                end;
              Hint := s;
            end;
      Application.ActivateHint(Point(X, Y));
      DataLink.ActiveRecord := CurRec;
    end;
end;

Последний раз редактировалось madmech; 03.06.2009 в 18:10.
madmech вне форума Ответить с цитированием
Старый 03.06.2009, 19:23   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

В справке ясно сказано, что в параметре ActivateHint передаются экранные координаты, а в этой процедуре X и Y клиентские. Достаточно перевести клиентские в экранные и, думаю, будет все в порядке, во всяком случае, у меня хинт в такой же ситуации отображается нормально.
Код:
      P := ClientToScreen(Point(X, Y));
      Application.ActivateHint(P);
где P : TPoint;
Скандербег вне форума Ответить с цитированием
Старый 04.06.2009, 11:24   #6
madmech
Пользователь
 
Регистрация: 30.04.2009
Сообщений: 19
По умолчанию

Не помогло!
madmech вне форума Ответить с цитированием
Старый 04.06.2009, 11:52   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Достаточно перевести клиентские в экранные
Все еще проще.
Код:
  Application.ActivateHint(Mouse.CursorPos);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2009, 16:57   #8
madmech
Пользователь
 
Регистрация: 30.04.2009
Сообщений: 19
По умолчанию

Все заработало, всем спасибо!
madmech вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что неправильно? helavisa Общие вопросы C/C++ 18 02.06.2009 17:51
Графический хинт в ListView pesad Компоненты Delphi 1 21.08.2008 20:11
неправильно выдаёт stringgrid chelsi Общие вопросы Delphi 3 30.04.2008 22:42
Неправильно умножаются матрицы!!! metamfetamin Помощь студентам 1 09.12.2007 20:37
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41