Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизКак выловить соб. OnMouseDown() для самих строк DBGrid? Найти похожие ветки
← →
AM (2002-11-01 12:02) [0]Всем доброго дня! Как сделать сабж. ведь обычный OnMouseDown() на DBGrid возникает только тогда, когда я нажимаю мишью в пустую область, т. е. область где нет записей...
← →
ЮЮ (2002-11-01 12:27) [1]А там где записи есть их ловит сам DBGrid а пользователю предоставляет кучу других onXXX (читай Help)
← →
AM (2002-11-01 12:40) [2]То что он мне
>> предоставляет кучу других onXXX
меня не устраивает. Например:
У меня есть два DBGrid-а и я хочу организовать такую возможность интерфейса как "перетаскивание" значений из однового в другое.
Как это организовать если нельзя обработать событие OnMouseDown() на строку???
Может создать какого-нибудь предка TMyDBGrid где можно будет обрабатывать эти события самому. Как это сделать?
Кто может подсказать это?
← →
ЮЮ (2002-11-01 12:44) [3]Ну и запускай механизм Drag&Drop в OnCellClick, когда текущая запись НД соответствует выделенной строке. Или ты не хочешь, чтобы пользователь мог выбирать запись? :-)
← →
Johnmen (2002-11-01 12:57) [4]>AM (01.11.02 12:02)
В OnMouseDown() на DBGrid несложно определить, пришелся клик на "молоко" или на "содержимое", ведь все параметры отображения грида известны и координаты мыши тоже...
← →
AM (2002-11-01 13:01) [5]Вся проблема в том, что событие OnCellClick и вообще ...Click воникают только тогда когда пользователь именно отпускает ранее нажатую кнопку мыши. А мне нужно именно событие, когда он нажал (MouseDown) и еще не отпускал. Я просто делал когда-то такое "перетаскивание" для ListBox-ов и все классно работало.
Для организации Drag&Drop нужна обработка трех событий:
...MouseDown
...MouseMove
...MouseUp
Самое интересное, что последние два события у грида нормально работают, а первое - нет.
Есть ли другие подходы кроме как вылавливать событие ...MouseDown?
← →
AM (2002-11-01 13:10) [6]
>> Johnmen © (01.11.02 12:57)
Дело чуть-чуть в другом:
Поставьте на событие OnMouseDown() обычного дбгрида например:
ShowMessage("Ура!"). И оно не появится когда вы будете тыкать мышкой по строкам/ячейкам грида. Оно появится если вы ткнете мышкой по пустой (незаполненной записями обласит грида)
Т. е. OnMouseDown() вообще событие только для пустой области грида.
← →
AM (2002-11-01 13:22) [7]Фу, наконец получилось!
На самом деле у меня получилось, что можно обойтись и без события
...MouseDown
использовав только:
...MouseMove
...MouseUp
Просто в событии MouseMove надо сделать проверку:
If ssLeft in Shift then
(показать StaticText с текстом текущего значения в гриде и с координатами курсора)
else
( скрыть StaticText)
← →
ЮЮ (2002-11-01 13:25) [8]Тогда лезь в "потроха" 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:35) [9]ЮЮ © (01.11.02 13:25)
Здесь, да получился насточщий Drag&Drop. Очень интересный подход. Я попробую его.
В момем же я просто решил "сэмулировать" его с помощью StaticText. И перемещаю именно его.
ЮЮ, спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c