Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.13;
Скачать: CL | DM;

Вниз

Курсор на в области StringGrid   Найти похожие ветки 

 
kyn66   (2007-12-11 14:29) [0]

На форме кроме остальных контролов есть StringGrid. Хочу для ячеек сделать свой хинт. Каким образом отлавливать в событии MouseMove появление курсора в регионе StringGrid и при покидании его, т.е. чтобы хинт окно прятать?


 
Palladin ©   (2007-12-11 14:38) [1]

ну очевидно, что на OnMouseMove
или тебе такая мысль в голову не приходила?


 
{RASkov} ©   (2007-12-11 14:38) [2]

> [0] kyn66   (11.12.07 14:29)
> Каким образом отлавливать в событии MouseMove

Чье событие-то?

> [0] kyn66   (11.12.07 14:29)

Что-то не понятно задан вопрос (
Но может вот это
StringGrid.MouseToCell()
нужно?


 
kyn66   (2007-12-11 14:49) [3]

Смысл такой, когда курсор над SG - показываем хинт.... как тока курсор уходит из области SG - хинт прячем.

procedure TMainFrm.StringGrid1MouseMove(Sender: TObject;
 Shift: TShiftState; X, Y: Integer);
Var
 Column, Row : Integer;
 T : TRect;
 P : TPoint;
 s : String;
begin
 StringGrid1.MouseToCell(x, y, Column, Row);
 GetCursorPos(P);
  s := "Строка хинта";
  T := HWin.CalcHintRect(Screen.Width, s, nil); // внешняя ф-я вывода хинта
  T.Left   := P.X;
  T.Top    := P.Y + 21;
  T.Right  := T.Left + T.Right;
  T.Bottom := T.Top + T.Bottom;
   HWin.ActivateHint(T, S);
end;


HWin.ReleaseHandle; нужно вставить куда-то при потере фокуса SG


 
{RASkov} ©   (2007-12-11 15:26) [4]

> [3] kyn66   (11.12.07 14:49)
>  T.Bottom := T.Top + T.Bottom;
>   HWin.ActivateHint(T, S);
> end;

А что там(ActivateHint) происходит? иначе как-то подозрительно выглядит....
можно, как вариант, посоветовать ловить "глючное" сообщение CM_MOUSELEAVE, посылаемое гриду, при покидании его мышой....
(Почему глючное, а потому, что не всегда срабатывает:()
Можно таймером проверять положение курсора...


 
kyn66   (2007-12-11 15:40) [5]

В свое время я так делал для ноды TreeView

procedure TImpDataFrm.TreeView1MouseMove(Sender: TObject;
                                        Shift: TShiftState; X, Y: Integer);
var
 trvNode: TTreeNode;
 s : String;
 T : TRect;
 P : TPoint;
 k : Integer;
begin
 if VhodAdmin then
  begin
    GetCursorPos(P);
    if htOnItem in TreeView1.GetHitTestInfoAt(X, Y) then
     begin
       trvNode := TreeView1.GetNodeAt(X, Y);
       if Assigned(trvNode) and (trvNode.Data <> nil) and (trvNode.Parent = nil) then
        begin
          T := trvNode.DisplayRect(True);
          k := Integer(trvNode.Data);
          if RepListTbl.Locate("RepKod", k, []) then
           s := "&#206;&#242;&#247;&#229;&#242;.&#185; - " + IntToStr(k) + #10#13 +
                 RepListTblNameUser.Value;
          T := HWin.CalcHintRect(Screen.Width, s, nil);
          T.Left   := P.X;
          T.Top    := P.Y + 21;
          T.Right  := T.Left + T.Right;
          T.Bottom := T.Top + T.Bottom;
          HWin.ActivateHint(T, S);
        end
       else
        HWin.ReleaseHandle;
     end
    else
     HWin.ReleaseHandle;
  end;
end;


Но у него был свой хитрый метод GetHitTestInfoAt(X, Y) как сдесь сделать похожее нечто? 8-(

ActivateHint- да ничего особенного , хинт собственного изготовления да и все



Страницы: 1 вся ветка

Текущий архив: 2008.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1197263105
class_
2007-12-10 08:05
2008.01.13
При просмотре небольшого ролика в Интернет


2-1197443733
F@T@L_Err0r
2007-12-12 10:15
2008.01.13
Chart


2-1197374227
deras
2007-12-11 14:57
2008.01.13
Какое условие прописать в BeforPost?


2-1197373127
@!!ex
2007-12-11 14:38
2008.01.13
Фиксация углов куба.


2-1197529644
XerSon
2007-12-13 10:07
2008.01.13
Как перевести сие на код Дельфи т.е написать функцию?