Главная страница
    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.053 c
4-1081405299
alex732
2004-04-08 10:21
2004.05.23
WM_COPYDATA


6-1081082750
Delphi5.01
2004-04-04 16:45
2004.05.23
... реализовать протокол HTTP ...


3-1083123177
explorer
2004-04-28 07:32
2004.05.23
Организация автоматической нумерации


3-1083244047
GEN
2004-04-29 17:07
2004.05.23
БД Access, проблема переноса на другую машину


6-1080729152
Delphin
2004-03-31 14:32
2004.05.23
Hi ALL!! Есть следующий вопрос: отправляю смстаким образом: IF no





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