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

Вниз

Как выловить соб. 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-69365
OxOTHuK
2002-11-10 10:54
2002.11.21
OnKeyPress & OnKeyDown & OnKeyUp


1-69248
iguana
2002-11-11 19:31
2002.11.21
Sender...


1-69335
Дмитрий Баранов
2002-11-11 15:28
2002.11.21
Подключение к событиям IE


3-69129
dim-
2002-11-04 09:12
2002.11.21
А почему нельзя работать с IBQwery через Append(Edit) и Post?


14-69556
Slavan
2002-11-01 16:56
2002.11.21
Конвертация строки в время