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

Вниз

...Мышь в сетке...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-100813
Jakkie
2003-07-17 14:30
2003.07.31
Rtf->Plain text


3-100584
Григорий Ситнин
2003-06-26 16:39
2003.07.31
Трехзвенная архитектура приложения


14-100923
2609
2003-07-13 03:20
2003.07.31
тестовая программа


1-100750
Arhangel
2003-07-16 12:23
2003.07.31
Button1 динамически


14-100927
rust
2003-07-14 18:31
2003.07.31
Export