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

Вниз

Компонент, потомок TDBGrid: какой метод срабатывает при...   Найти похожие ветки 

 
KSergey ©   (2003-07-24 15:37) [0]

Компонент, потомок TDBGrid: какой метод срабатывает при смене текущей строки?
Только я знаю, что вообще-то надо цепляться к DataSet"у соответствующему, но мне то надо это все в компоненте проделать! (узнать, что пользователь сменил строку). Что-то ничего пока не нашел подходящего...


 
Skier ©   (2003-07-24 15:40) [1]


> Только я знаю, что вообще-то надо цепляться к DataSet"у
> соответствующему, но мне то надо это все в компоненте проделать!

Что компонент должен делать ?


 
KSergey ©   (2003-07-24 15:45) [2]

Ну там немного наворачивал в свое время, когда еще не понимал, что несколько проще поискать готовые с нужными функциямт ;) Хотя опять же потренировался, занятно ;) Ну да это так, лирика..

На данный момент проблема такая: узнать, когда пользователь меняет ячейку или строку (т.е. фактически тоже ячейку) для сброса одного флажка.
ColEnter (равно как и ColExit) не срабатывают, заразы, при смене строки, если столбец не меняется. А надо бы найти что-то такое, что срабатывало бы.


 
Skier ©   (2003-07-24 15:48) [3]

>KSergey © (24.07.03 15:45)
Ты не понял вопроса.
Я спрашивал зачем это нужно узнавать ? Какова дальнейшая цель ?


 
KSergey ©   (2003-07-24 16:01) [4]

Skier © (24.07.03 15:48)
>KSergey © (24.07.03 15:45)
Ты не понял вопроса.
Я спрашивал зачем это нужно узнавать ? Какова дальнейшая цель ?


Я немного не пойму какая в том разница... Я же написал: для сброса некоей пременной синхронно со сменой ячейки. Этого недостаточно?

Хорошо, попробую вот так описать.
Задача: чтобы при клике мышью в любую ячейку происходило:
а) кликнули на новую (ранее не выделенную ячейку) - ничего не делать (но запомнить! ;)
б) если на эту ячейку кликнули уже второй раз, вернее кликнули в активную ячейку (кликнули в прошлый раз или она была ранее выбрана каким-то иным способом) - отработать некое действие.
Самый общий смысл - чтобы при хаотичном клике мышью по гриду это самое некое действие не отрабатывалось сразу же, а только при 2 кликах - а то наотрабатывается столько, что не разгрести ;) Только речь не о двойном клике, а именно о 2 одинарных.

Вообще-то пока писал, то вырисовалось 2 мысли
1) "второй клик в активную ячейку" - это надо допумать, осталось определеить активную до клика мыши
2) а может на двойной клик завязаться?.. подумаю, хотя тоже не совсем здорово...


 
Skier ©   (2003-07-24 16:03) [5]

TDBGrid.OnCellClick ?


 
KSergey ©   (2003-07-24 16:07) [6]

Да клик-то оно клик, но ведь я могу сменить ячейку и клавой, а это в слик не отлавливается...


 
Reindeer Moss Eater   (2003-07-24 16:16) [7]

Вешайся на DataSource.OnDataChange


 
KSergey ©   (2003-07-24 16:24) [8]

Reindeer Moss Eater (24.07.03 16:16)
Вешайся на DataSource.OnDataChange


Дык это-то понятно, но неприлично как-то из компонента грида (еще раз подчеркну - не во Внешней" так сказать программе!) вшаться на событие его DataSource, тем более, что этот DataSource может быть еще и не задан! Не, так нельзя.

меня что удивляет: ну ладно, ну нет у грида свойств/событий про перемещение, но сам-то он их как-то отрабатывает же, блин!

Посмотрел сейчас еще - все у них позапрятано, все private... Зафиг они все прячут, уже не раз натыкался
Вроде метод Click вызывают в том числе и на клавишах - и опять нифига - при срабатывает только при смене колонки, при смене строки (клавишами, мышью) - фигу вам...

Может еще есть у кого соображения?


 
Reindeer Moss Eater   (2003-07-24 16:28) [9]

Всегда можно:
1. Узнать , есть ли DataSource
2. Узнать, есть ли у него обработчик OnDataChange
3. Сохранить адрес этого обработчика у себя и назначить свой
4. В своем обработчике сделав все нужное вызвать сохраненный обработчик


 
KSergey ©   (2003-07-24 16:32) [10]

Можно, но что-то не нравится мне это, уж извините.
Есть еще кто-то, кто считает этот вариант нормальным? Выскажетесь, может я напрасно упорствую.

А пока лишь нашел причину не срабатывания Click - эти гады в CustomDBGrid"e обработчик KeyDowт полностью перекрыли, и уже ничего не вызывают более... А я по CustumGrid"у смотрел, но его не инхеритят...


 
Набережных С. ©   (2003-07-24 18:55) [11]

DBGrid связан с DataSource через объект, возвращаемый свойством DataLink (protected)


 
KSergey ©   (2003-07-25 14:57) [12]

Набережных С. © (24.07.03 18:55)

Спасибо, я, к сожалению, из-за клиента форумов (странный какой-то глючек) не смог вовремя увидеть Ваше сообщение, а потому сегодня сам тут примерно до этого попер - когда стал разгребать как же так это все завязано.

Если кому-то интересно: в DB гриде есть свойство, вызываемое при смене строки, которое вообще-то очень даже просто и логично называется, но ведь сразу не сообразишь. Пришел к нему от DataSourcе"са. Scroll: виртуальное, протектное - короче, лучше не придумать.

Если еще кому-то интересно: для отлавливания всех моментов изменения текущей ячейки DBGrid"а можно порекомендовать переопределить следующие методы (все - виртуальные, протектные):

Scroll - только здесь удалось отловить изменение строки без изменения столбца
ColEnter - смена столбца
DoEnter - т.к. при получения фокуса Grid"ом не происходит вызов ColEnter
LinkActive - здесь удалось отловить открывание привязагнного DataSet"а, что тоже можно рассматривать как изменение текущей ячейки (изменение данных)

ЗЫ
И это оказывается потрепаться?? Зашибись!...
Предлагаю оставить одну конференцию! Нафиг заморачиваться?



Страницы: 1 вся ветка

Текущий архив: 2003.08.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
14-33338
3APA3A
2003-07-17 13:07
2003.08.11
Class Function....


1-33113
Bill
2003-07-29 18:23
2003.08.11
Загрузка данных из потока в TWebBrouser


14-33304
egort
2003-07-24 11:47
2003.08.11
Люди Кто знает как поставить Delphi 4 на windows 2000 server


14-33282
Cyber
2003-07-17 11:24
2003.08.11
Всем, всем, всем! Предложение о сотрудничестве


4-33405
VShkoda_Shk
2003-06-11 12:53
2003.08.11
сообщение TEDIT