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

Вниз

TDBGrid   Найти похожие ветки 

 
Vitalik   (2004-04-30 12:39) [0]

Привет!

Вопрос больше не из сферы работы с БД, а из сферы использования компонентов.

У меня есть табличка (TDBGrid) в которое в некоторых колонках отображаются данные типа DateTime. Эти данные можно редактировать (т.е. не ReadOnly). Мне не нравится то каким образом компонент TDBGrid позволяет изменять дату. Я хочу для этих целей использовать TDateTimePicker. То есть чтобы TDTP полностью закрывал собой ячейку при её выделении, а когда пользователь выбирает в нём дату, содержимое данной записи должно обновляться.

Понятно, что мне нужно отображать этот ДТП при выделении ячейки из колонки, содержащей данные типа DateTime в соответствующем месте и с соответствующими размерами.

Так вот я бы хотел узнать, существует ли событие у TDBGrid, возникающее, когда в нём меняется выделение ячеек?

Т.е. в которое можно было бы вставить, например, такую конструкцию:

if (DBGrid1.SelectedField.DataType = ftDateTime) and
  (not DBGrid1.SelectedField.ReadOnly) then
begin
{тут каким-либо образом нужно узнать расположение и размеры выделенной ячейки и установить соответствующие параметны в TDateTimePicker}
dtpSetDate.show; {отображаем TDateTimePicker}
end;

Вот примерно такую вещь мне нужно сделать.
У меня,честно говоря, пока что всё упёрлось в том, что я не знаю какое событие нужно отлавливать. Может быть это событие и не у TDBGrid, а у TADODataSet?

В общем кто чем поможет - большое спасибо!
Если что-то непонятно написал - спрашивайте, я уточню :)


 
Vlad ©   (2004-04-30 12:52) [1]

Ну так, навскидку варианты такие:
1) Использовать TDBGrid.Columns.ButtonStyle = cbsEllipsis
а так же событие грида OnEditButtonClick
2) Написать собственный InplaceEditor как наследника TDateTimePicker
3) Использовать "продвинутые" гриды сторонних разработчиков


 
Vitalik   (2004-04-30 14:05) [2]

Хм... Да, вариант №1 может подойти... При нажатии на кнопку отображать окошко с TMonthCalendar. Хорошо!
А ещё меня заинтересовал вариант №2. Что за наследник? Вроде TDateTimePicker сам по себе и так устраивает. Дело-то не в нём, дело в TDBGrid.
Разверните пожалуйста ответ по этому пункту, вдруг за этой неоднозначной фразой скрывается что-то действительно интересное! :)


 
Vlad ©   (2004-04-30 14:23) [3]


> Vitalik   (30.04.04 14:05) [2]


> за этой неоднозначной фразой скрывается что-то действительно
> интересное! :)

За этой фразой скрывается вполне грамотное решение Вашей задачи.
Для этого нужно понять что такое InplaceEditor. Грубо говоря - это тот объект, куда вы вводите текст, кода ячейка грида имеет фокус ввода. Этот объект представляет собой обычный TMaskEdit.
Когда грид находится в обычном состоянии - он представляет собой простую "сетку". Но как только вы переводите любую ячейку в режим редактирования, то на ее месте создается этот самый TMaskEdit (он же InplaceEditor), и вы в него вводите текст. Затем, когда ячейка теряет фокус ввода, объект InplaceEditor уничтожается, и грид опять становится обычной "сеткой".
Для Вашего случая было бы удобно создать собственный InplaceEditor, но не типа TMaskEdit, а типа TDateTimePicker.
Тогда, если фокус ввода получает ячейка с датой, то будет активизироваться Ваш собственный InplaceEditor.
Вобщем объяснил как смог :-)
Доп. информацию можете почитать в справке (TInplaceEdit + F1)



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-1083329590
jenbond
2004-04-30 16:53
2004.05.23
Конвертация компанента


14-1083745962
Artix
2004-05-05 12:32
2004.05.23
системные библиотеки


4-1081233002
S@shka
2004-04-06 10:30
2004.05.23
Определение загрузки ПК


9-1060565676
Son!K
2003-08-11 05:34
2004.05.23
Вопрос по OpenGL


9-1074102294
HolyMan
2004-01-14 20:44
2004.05.23
Где взять обновления GLScene?