| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |