![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выловить соб. OnMouseDown() для самих строк DBGrid? [D5, MSSQL]
AM © (2002-11-01 12:02:00)Всем доброго дня! Как сделать сабж. ведь обычный OnMouseDown() на DBGrid возникает только тогда, когда я нажимаю мишью в пустую область, т. е. область где нет записей...
AM (2002-11-01 13:35:00) [1]ЮЮ © (01.11.02 13:25)
Здесь, да получился насточщий Drag&Drop. Очень интересный подход. Я попробую его.
В момем же я просто решил "сэмулировать" его с помощью StaticText. И перемещаю именно его.
ЮЮ, спасибо!
ЮЮ (2002-11-01 13:25:00) [2]Тогда лезь в "потроха" DBGrida.
Когда я пару лет назад учил делать это DBGrigEh, я поступил так:
procedure TCustomDBGridEH.MoveCol(RawCol: Integer);
var
OldCol: Integer;
begin
FDatalink.UpdateData;
if RawCol >= ColCount then
RawCol := ColCount - 1;
if RawCol < FIndicatorOffset + {ddd}FrozenCols then RawCol := FIndicatorOffset + {ddd}FrozenCols;
OldCol := Col;
if RawCol OldCol then
begin
...
здесь я оставил прежний текст, позволяя вести гриду как обычно
end else
begin
а при повторном выборе той же ячейки запускался механизм Drag&Drop
if (ssLeft in FShift) then BeginDrag(true)
end;
end;
AM (2002-11-01 13:22:00) [3]Фу, наконец получилось!
На самом деле у меня получилось, что можно обойтись и без события
...MouseDown
использовав только:
...MouseMove
...MouseUp
Просто в событии MouseMove надо сделать проверку:
If ssLeft in Shift then
(показать StaticText с текстом текущего значения в гриде и с координатами курсора)
else
( скрыть StaticText)
AM (2002-11-01 13:10:00) [4]
>> Johnmen © (01.11.02 12:57)
Дело чуть-чуть в другом:
Поставьте на событие OnMouseDown() обычного дбгрида например:
ShowMessage("Ура!"). И оно не появится когда вы будете тыкать мышкой по строкам/ячейкам грида. Оно появится если вы ткнете мышкой по пустой (незаполненной записями обласит грида)
Т. е. OnMouseDown() вообще событие только для пустой области грида.
AM (2002-11-01 13:01:00) [5]Вся проблема в том, что событие OnCellClick и вообще ...Click воникают только тогда когда пользователь именно отпускаетранее нажатую кнопку мыши. А мне нужно именно событие, когда он нажал(MouseDown) и еще не отпускал. Я просто делал когда-то такое "перетаскивание" для ListBox-ов и все классно работало.
Для организации Drag&Drop нужна обработка трех событий:
...MouseDown
...MouseMove
...MouseUp
Самое интересное, что последние два события у грида нормально работают, а первое - нет.
Есть ли другие подходы кроме как вылавливать событие ...MouseDown?
Johnmen (2002-11-01 12:57:00) [6]>AM (01.11.02 12:02)
В OnMouseDown() на DBGrid несложно определить, пришелся клик на "молоко" или на "содержимое", ведь все параметры отображения грида известны и координаты мыши тоже...
ЮЮ (2002-11-01 12:44:00) [7]Ну и запускай механизм Drag&Drop в OnCellClick, когда текущая запись НД соответствует выделенной строке. Или ты не хочешь, чтобы пользователь мог выбирать запись? :-)
AM (2002-11-01 12:40:00) [8]То что он мне
>> предоставляет кучу других onXXX
меня не устраивает. Например:
У меня есть два DBGrid-а и я хочу организовать такую возможность интерфейса как "перетаскивание" значений из однового в другое.
Как это организовать если нельзя обработать событие OnMouseDown() на строку???
Может создать какого-нибудь предка TMyDBGrid где можно будет обрабатывать эти события самому. Как это сделать?
Кто может подсказать это?
ЮЮ (2002-11-01 12:27:00) [9]А там где записи есть их ловит сам DBGrid а пользователю предоставляет кучу других onXXX (читай Help)