Главная страница
    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.46 MB
Время: 0.04 c
14-1083317734
}|{yk
2004-04-30 13:35
2004.05.23
Как вам такая новость?


11-1071840200
Yury Sidorov
2003-12-19 16:23
2004.05.23
KOL и Large fonts


14-1083606639
Ricks
2004-05-03 21:50
2004.05.23
Компоненты в стиле Office2003


3-1083225065
Av
2004-04-29 11:51
2004.05.23
Необх из Grida записывать в базу симв знач с сохр пробелов слева


1-1083745547
KPP
2004-05-05 12:25
2004.05.23
ZLib - пример использования





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский