Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

...Мышь в сетке... [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо