Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 615

/ вопрос решён /

Здравствуйте, эксперты! Использую компонент DBGrid для отображения содержимого таблицы БД. В нем есть поле типа Data. Когда происходит редактирование строки таблицы, нужно чтобы при нажатии на поле (типа Datа) выскакивал календарь, т.е. каждое поле колонки реализует функции компонента DateTimePicker. Как это можно реализовать? Подскажите пожалуйста. Заранее большое всем спасибо!!!

Ермаханов Айбек Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ермаханов Айбек (статус: Посетитель)
Вопрос отправлен: 27 сентября 2010, 23:59
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Вот тебе большая ссылка, воспользуйся.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 28 сентября 2010, 08:17
Оценка за ответ: 5

Комментарий к оценке: О супер! СПАСИБО БОЛЬШОЕ!!!

Ответ #2. Отвечает эксперт: Тов. Женька

Здравствуйте, Ермаханов Айбек!

Как-то так:

Предварительно DateTimePicker.Visibe := False

DaTP - DateTimePicker

procedure TMainForm.DaTPChange(Sender: TObject);
begin
if DBGrid1.DataSource.State in [dsEdit, dsInsert] then
DBGrid1.DataSource.FieldByName(DBGrid1.SelectedField.FieldName).AsDateTime := DaTP.DateTime;
end;

procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if (gdFocused in State) then
if (Column.Field.DataType = ftDate) then
with DaTP do
begin
Left := Rect.Left + DBGrid1.Left + 1;
Top := Rect.Top + DBGrid1.Top + 1;
Width := Rect.Right - Rect.Left + 2;
Width := Rect.Right - Rect.Left + 2;
Height := Rect.Bottom - Rect.Top + 2;
DateTime := DBGrid1.DataSource.FieldByName(DBGrid1.SelectedField.FieldName).AsDateTime;
Visible := True;
end;
end;

procedure TMainForm.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedField.DataType = ftDate then
DaTP.Visible := False;
end;

procedure TMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = Chr(9)) then Exit;

if (DBGrid1.SelectedField.DataType = ftDate) then
begin
DaTP.SetFocus;
SendMessage(DaTP.Handle, WM_Char, word(Key), 0);
end;
end;

procedure TMainForm.DaTPChange(Sender: TObject);
begin
if DBGrid1.DataSource.State in [dsEdit, dsInsert] then
DBGrid1.DataSource.FieldByName(DBGrid1.SelectedField.FieldName).AsDateTime := DaTP.DateTime;
end;

Ответ отправил: Тов. Женька (статус: 3-ий класс)
Время отправки: 28 сентября 2010, 09:15
Оценка за ответ: 5

Комментарий к оценке: Спасибо БОЛЬШОЕ!!!

Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 21 марта 2023, 07:26
Выполнено за 0.02 сек.
Рейтинг@Mail.ru