Delphi удобен и быстр в разработке приложений C/S, потому что он имеет большое количество удобных в использовании доступа к данным и управления с учетом данных. Тем не менее, все всегда трудно усовершенствовать. При создании виджета наиболее важным шагом является выбор правильного родительского класса, который может уменьшить написание кода. Библиотека компонентов Delphi уже имеет компонент TdateTimepicker, который может легко вводить и изменять даты и время, вытаскивая календарь или используя приращение и уменьшение спиновой работы, но она не имеет возможности почувствовать данные. Поэтому мы можем воспринимать его как родительский класс и получить новый элемент управления, а также функцию с учетом данных, которая может связаться с набором данных. Управление с учетом данных взаимодействует с данными с помощью DataLink объектов, поэтому добавление предоставления данных к управлению требует создания объекта TDAtAlink (или его полученного класса) в качестве члена управления, а также для создания Public Datafive и DataSource для управления; к объекту Tdatalink Ondatachange и Onupdatedata. Ниже приведен основной исходный код элемента управления, с соответствующими комментариями: {Определите класс TDBDateTime, полученный из TDateTimePicker. Обратите внимание, что DB должен быть добавлен к использованию интерфейса блока, ссылка DBCTRLS} Тип
Tdbdatetime = class (tdateTimepicker)
Частный
FDATALINK: TFILDDATALINK;
// tfieldDatalInk - это полученный класс tdatalink, который обрабатывает взаимодействие одного поля с помощью данных
Процедуратахандж (отправитель: tobject);
// Когда событие Ondatachange запускается при изменении записи набора данных (например, просмотра истории), Datachange будет использоваться в качестве направления обработки событий для события
ProcecureUpdatedata (отправитель: tobject);
// Событие onupdatedata запускается перед обновлением набора данных, UpdatedAta будет использоваться в качестве ручки обработки событий для события
functiongetDatasource: tdataSource;
ProcecureSetDataSource (значение: tdataSource);
FunctiongetDatafield: String;
ProcecureSetDataField (значение: строка);
ProcecureCmexit (Varmessage: Tcmexit); Сообщение CM_EXIT; // Мигает сообщение CM_EXIT, когда элемент управления теряет фокус
защищен
ProcectureChange; override; // Событие OnChange запускается при изменении даты и времени в управлении.
Процедуранотификация (ACOMPONEONT: TCOMPONENT;
Операция: Топия); переопределить;
// IDE Delphi вызывает этот метод, чтобы уведомить другие элементы управления, когда элемент управления удаляется из формы
публичный
ConstructorCreate (AOWNER: TCOMPONENT); переопределить;
destructordestroy; переопределить;
склонен
Propertydatasource: Tdatasourcereadgetdatasource
writesetdatasource; // Добавить свойство DataSource в элемент управления, чтобы оно было подключено к компоненту данных DataSource
PropertyDatafield: StringReadGetDataField
PriseSetDataField;
End; // добавить атрибут Datafield в элемент управления,
Сделайте это указывать на объект TFILD, представляющий поле
ProcectorEReGister; // Регистрация компонента
Выполнение
ProcecuuretDbDateTime.cmexit;
Начинать
пытаться
Fdatalink.updaterecord;
// Обновление набора данных, когда элемент управления теряет фокус, который запустит событие onupdatedata
кроме
SetFocus;
поднимать;
конец;
DoExit;
конец;
contructortdbdateTime.create (Aowner: tcomponent);
Начинать
Унаследованное Create (AOHOWNER);
// Создать объект DataLink, Mount Ondatachange,
Ручка обработки событий onupdatedata
Fdatalink: = tfielddatalink.create;
Fdatalink.ondatachange: = datachange;
Fdatalink.onupdatedata: = updatedata;
конец;
DestructortDbDateTime.destroy;
Начинать
Fdatalink.ondatachange: = nil;
Fdatalink.onupdatedata: = nil;
Fdatalink.free;
унаследованные;
конец;
functiontdbdatetime.getDataSource: tdatasource;
Начинать
Результат: = fdatalink.datasource;
конец;
ProcecuuretDbDateTime.SetDataSource (значение: tdataSource);
Начинать
Fdatalink.datasource: = value;
конец;
functiontdbdatetime.getDatafield: String;
Начинать
Результат: = fdatalink.fieldName;
конец;
ProcecuuretDbDateTime.SetDataField (значение: String);
Начинать
Fdatalink.fieldname: = value;
конец;
ProcecuuretDbDateTime.datachange (отправитель: tobject);
Начинать
DateTime: = сейчас;
// Если элемент управления подключен к активному набору данных, набор данных изменится
Управление отображает соответствующее значение поля текущей записи
iffdatalink.field nilthen
iffdatalink.field.text тогда
DateTime: = fdatalink.field.asdateTime;
конец;
ProcecuuretDbDateTime.Updatedata (отправитель: tobject);
Начинать
Fdatalink.field.asdatetime: = datetime;
// Обновление соответствующих полей с датой и временем в управлении
конец;
ProcecuuretDbDateTime.Change;
Начинать
// Установите набор данных для редактирования состояния, когда пользователь изменяет контент в управлении
Fdatalink.modified;
ifnotfdatalink.editingThen
Fdatalink.edit;
унаследованные;
конец;
ProcecuuretDbDateTime.notification (ACOMPONENT:
TCOMPONENT; Операция: Топиц);
Начинать
унаследованное ночи (Acomponent, Operation);
// Когда tdataSource, подключенный к управлению
Установите свойство управления DataSource на опустошение при удалении
if (Operation = OpreMove) и (FDATALINK NIL)
и (ACOMPONENT = DATASOURCE) тогда
DataSource: = nil;
конец;
Процедуррегистер;
Начинать
RegisterComponents (DataControls,
[TdbDateTime]); // После зарегистрирована элемента управления, он установлен на странице DataControls
конец;
конец.
После установки этот элемент управления может снизить календарь и увеличивать или уменьшить поля даты и времени базы данных и может отображать даты в двух форматах, что является удобным и практичным. Управления безопасны и надежны в Delphi3 и Delphi4.