![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
...Мышь в сетке... [D6]
AlexGreG © (2003-06-10 08:15:00)Как определить в событии DBGrid.OnMouseMove в какой ячейке запуталась мышь?
Как определить над каким столбцом или над какой строкой находится мышь?
Как обновлять в DBGrid конкретную ячейку, конкретную запись или конкретный столбец?
Заранее благодарен, AlexGreG
gRad2003 (2003-07-08 22:01:00) [1]DBgird1->MouseToCell()
или нечто похожее (точно не помню)
AlexGreG (2003-07-07 08:16:00) [2]Всем большое пасибо!
sniknik (2003-06-18 13:52:00) [3]а ты не рисуй постоянно, только при переходе с ячейки на ячейку. и все одно надо изнутри события рисовать. (не ты один можеш быть инициатором перерисовки)
а заставить перерисоватся одну ячейку InvalidateCell (если не путаю).
NAlexey (2003-06-18 13:48:00) [4]InvalidateCell
NAlexey (2003-06-18 13:46:00) [5]>AlexGreG
Ты о чем это?
AlexGreG (2003-06-18 12:44:00) [6]Ага! Этот событие не возникает, если просто мышью водить над сеткой, поэтому я кинул тему на форум.
Вариант "таймер + сетка.рефреш" работает, но если машинка потормознее попадётся, то перерисовка будет мешать работать.
Поэтому и спрашиваю, как одну лишь ячейку обновить, не вызывая события OnDrawDataCell
sniknik (2003-06-18 10:36:00) [7]конечно знаю, ее надо перерисовать. лутше всего изнутри самого грида, т.к. возникнут сложности с например - а что рисовать? строк(данных) в dbгриде нет, в связанном наборе можно без переходов получить данные только из текущей записи... еще может какие, сразу и не скажеш.
т.е. вешайся на OnDrawDataCell и рисуй "естественным" порядком, без заморочек.
AlexGreG (2003-06-18 10:17:00) [8]sniknik, спасибо.
Может ты знаешь, как обновить одну ячейку (даже, если она не выделенная), а не весь грид, зная её координаты (номер столбца и записи)
sniknik (2003-06-18 08:53:00) [9]если только для грида (не связоно с данными) то примерно так
procedure TMainForm.DBGridDblClick(Sender: TObject);
var Point: TPoint;
GridCoord: TGridCoord;
begin
if TDBGrid(Sender).SelectedField = nil then Exit;
Point:= TDBGrid(Sender).ScreenToClient(Mouse.CursorPos);
GridCoord:= TDBGrid(Sender).MouseCoord(Point.X, Point.Y);
if (GridCoord.X < 1) or (GridCoord.Y < 1) then Exit; //отсекаем клик по заголовку
ShowMemo;
end;
ну тут у меня свои цели (по клику показать содержимое Memo, Blob,... пока все ;о)).
AlexGreG (2003-06-18 07:02:00) [10]Немного не те слова сказал, речь идёт именно о поведении грида: мышь веду по сетке - грид реагирует каким-то образом, например изменение цвета столбца, над которым мышь.
ЮЮ (2003-06-10 08:40:00) [11]>Как обновлять в DBGrid конкретную ячейку, конкретную запись или конкретный столбец?
Зачем? Необходимо и достаточно изменить DataSet, показываемый в DBGrid
>Как определить в событии DBGrid.OnMouseMove в какой ячейке запуталась мышь?
Как определить над каким столбцом или над какой строкой находится мышь?
TCustomGrid.MouseCoord
Но это мало что даст, т.к. кол-во строк в DBGride и количество записей в DataSet-е - вещи не взаимосвязанные, знание номера строки не даст тебе информации о записи. Все эти "пассы" следует делать внутри своего (чужого) компонента - наследника TDBGrid