Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.05 c
1-1083758296
Семен Сорокин
2004-05-05 15:58
2004.05.23
Окна сверху вниз/слева направо


14-1082629795
31512
2004-04-22 14:29
2004.05.23
Считалочка, если вдруг программисты в прятки надумают играть...


4-1080972102
Namiq
2004-04-03 10:01
2004.05.23
Java + Delphi


8-1078899334
Галинка
2004-03-10 09:15
2004.05.23
Как повернуть картинку на произвольный угол?


1-1083851918
delphiman
2004-05-06 17:58
2004.05.23
DBGrig





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский