Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Вниз...Мышь в сетке... Найти похожие ветки
← →
AlexGreG (2003-06-10 08:15) [0]Как определить в событии DBGrid.OnMouseMove в какой ячейке запуталась мышь?
Как определить над каким столбцом или над какой строкой находится мышь?
Как обновлять в DBGrid конкретную ячейку, конкретную запись или конкретный столбец?
Заранее благодарен, AlexGreG
← →
ЮЮ (2003-06-10 08:40) [1]>Как обновлять в DBGrid конкретную ячейку, конкретную запись или конкретный столбец?
Зачем? Необходимо и достаточно изменить DataSet, показываемый в DBGrid
>Как определить в событии DBGrid.OnMouseMove в какой ячейке запуталась мышь?
Как определить над каким столбцом или над какой строкой находится мышь?
TCustomGrid.MouseCoord
Но это мало что даст, т.к. кол-во строк в DBGride и количество записей в DataSet-е - вещи не взаимосвязанные, знание номера строки не даст тебе информации о записи. Все эти "пассы" следует делать внутри своего (чужого) компонента - наследника TDBGrid
← →
AlexGreG (2003-06-18 07:02) [2]Немного не те слова сказал, речь идёт именно о поведении грида: мышь веду по сетке - грид реагирует каким-то образом, например изменение цвета столбца, над которым мышь.
← →
sniknik (2003-06-18 08:53) [3]если только для грида (не связоно с данными) то примерно так
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 10:17) [4]sniknik, спасибо.
Может ты знаешь, как обновить одну ячейку (даже, если она не выделенная), а не весь грид, зная её координаты (номер столбца и записи)
← →
sniknik (2003-06-18 10:36) [5]конечно знаю, ее надо перерисовать. лутше всего изнутри самого грида, т.к. возникнут сложности с например - а что рисовать? строк(данных) в dbгриде нет, в связанном наборе можно без переходов получить данные только из текущей записи... еще может какие, сразу и не скажеш.
т.е. вешайся на OnDrawDataCell и рисуй "естественным" порядком, без заморочек.
← →
AlexGreG (2003-06-18 12:44) [6]Ага! Этот событие не возникает, если просто мышью водить над сеткой, поэтому я кинул тему на форум.
Вариант "таймер + сетка.рефреш" работает, но если машинка потормознее попадётся, то перерисовка будет мешать работать.
Поэтому и спрашиваю, как одну лишь ячейку обновить, не вызывая события OnDrawDataCell
← →
NAlexey (2003-06-18 13:46) [7]>AlexGreG
Ты о чем это?
← →
NAlexey (2003-06-18 13:48) [8]InvalidateCell
← →
sniknik (2003-06-18 13:52) [9]а ты не рисуй постоянно, только при переходе с ячейки на ячейку. и все одно надо изнутри события рисовать. (не ты один можеш быть инициатором перерисовки)
а заставить перерисоватся одну ячейку InvalidateCell (если не путаю).
← →
AlexGreG (2003-07-07 08:16) [10]Всем большое пасибо!
← →
gRad2003 (2003-07-08 22:01) [11]DBgird1->MouseToCell()
или нечто похожее (точно не помню)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c