Проблема в том, как определить «правильный формат»? Возможно, лучшее, что вы могли бы сделать, это найти наличие определенных букв в строке формата. Но что, если пользователь не хочет видеть год или не хочет видеть время?
Я бы не стал особо подчеркивать, что они ввели «правильный формат». Вместо этого просто дайте им предварительный просмотр формата, который они ввели, используя текущую дату и время.
Редактировать : Обновление новой информации из OP
По этому вопросу было небольшое разъяснение:
На самом деле мне нужно указать свойство Format полей TDateTimePicker и TDateTime в базе данных. И я хочу, чтобы пользователь мог изменять эти форматы. - Тофик Гасанов
Это важное уточнение, возможно, вы хотите включить его в свой вопрос?
Важно то, что строка формата будет указывать не только формат отображения, но и формат редактирования. Теперь, хотя практически любая строка является допустимой, не все они особенно полезны (особенно для редактирования). E.g.:
FDateTimeFormat := '"The day is "d" of this month of the year "yy';
Это совершенно верно в том смысле, что ваша дата может быть соответственно отформатирована . Однако это не особенно полезно для установки месяца.
Теперь ИМХО, если пользователь хочет усложнить свою жизнь, не включив поля месяца в строку формата - это сложно! Проблема, однако, заключается в том, что правила форматирования носят технический характер, и пользователь может перепутать месяцы и минуты. Например. FTimeFormat := 'HH:MM:SS'
что на самом деле : <<strong> месяцев >:
Несмотря на это, я придерживаюсь своего первоначального предложения (с одним незначительным изменением): вместо этого просто дайте им предварительный просмотр формата, в который они вошли, используя текущую дату-время предварительно определенную дату-время следует подчеркнуть «ошибки» в строке формата.
Предполагается, что у вас есть диалоговое окно конфигурации, в котором вы намерены позволить пользователю определить этот параметр:
- Добавьте TComboBox (затем вы можете предварительно загрузить его с образцами строк для руководства пользователя; также они могут просто выбрать один из ваших уже подходящих вариантов.
- Добавьте метку, в которой вы иллюстрируете пример поведения выбранной строки формата.
- Реализуйте TComboBox.OnChange, чтобы проиллюстрировать эффект выбора пользователя.
Следующий код должен помочь:
procedure TConfigDialog.DateTimeFormatChange(Sender: TObject);
var
LCheckDate: TDateTime;
LFormattedDate: String;
begin
LCheckDate := EncodeDate(1999, 12, 31) + EncodeTime(20, 45, 50, 123);
LFormattedDate := FormatDateTime(DateTimeFormat.Text, LCheckDate);
DateFormatSample.Caption := 'Fri 31 December 1999 at 8:45:50.123 would be displayed as: ' + LFormattedDate;
end;
* * ПРЕДУПРЕЖДЕНИЕ тысячи сорок-девять
Вы упомянули, что хотите использовать это как для TDateTimeField
, так и для TDateTimePicker
. К сожалению, TDateTimePicker
просто оборачивает встроенный элемент управления Windows, который не использует FormatDateTime, и, следовательно, также имеет другие правила для его строк формата.
Так что, боюсь, вам придется разрешить пользователям настраивать две строки разных форматов. (