Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];
ВнизКурсор на в области 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 := "Îò÷åò.¹ - " + 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c