Отключенный элемент управления переходит через щелчки к окну под ним. IOW, вы можете искать клики на родительском элементе отключенного редактирования при условии, что родительский элемент включен; получить позицию щелчка и запросить, если он находится на элементе управления.
Ниже приведен пример обнаружения щелчка по отключенному редактированию, помещенному в форму. Вам нужно будет соответствующим образом скорректировать, если правки связаны с другим контейнером, например с панелью.
procedure TForm1.FormClick(Sender: TObject);
var
Pt: TPoint;
Wnd: HWND;
Control: TControl;
begin
Pt := ScreenToClient(SmallPointToPoint(types.SmallPoint(GetMessagePos)));
Wnd := ChildWindowFromPoint(Handle, Pt);
if Handle <> Wnd then begin
Control := FindControl(Wnd);
if (Control is TEdit) and not Control.Enabled then
Control.Enabled := True;
end;
end;
Библиотека, что мне нравится много, и я вижу, что все больше людей использует, python-dateutil, но к сожалению ни он, ни другой традиционный большой синтаксический анализатор даты и времени, mxDateTime от Egenix не могут проанализировать слово "завтра" несмотря на обе библиотеки, имеющие очень сильные "нечеткие" синтаксические анализаторы.
Единственная библиотека я видел это, может сделать, это - magicdate. Примеры:
>>> import magicdate
>>> magicdate.magicdate('today')
datetime.date(2009, 2, 15)
>>> magicdate.magicdate('tomorrow')
datetime.date(2009, 2, 16)
>>> magicdate.magicdate('yesterday')
datetime.date(2009, 2, 14)
К сожалению, это только возвращает объекты datetime.date, и так не будет включать части времени и не может обработать Ваш пример "Сегодня 15:20".
Так, Вам нужен mxDateTime для этого. Примеры:
>>> import mx.DateTime
>>> mx.DateTime.Parser.DateTimeFromString("Today 3:20 PM")
<mx.DateTime.DateTime object for '2009-02-15 15:20:00.00' at 28faa28>
>>> mx.DateTime.Parser.DateTimeFromString("Tomorrow 5:50 PM")
<mx.DateTime.DateTime object for '2009-02-15 17:50:00.00' at 2a86088>
Править: mxDateTime. Синтаксический анализатор только анализирует время в этих примерах и игнорирует слова "сегодня" и "завтра". Таким образом для этого конкретного случая необходимо использовать комбинацию magicdate, чтобы заставить дату и mxDateTime получать время. Моя рекомендация состоит в том, чтобы просто использовать python-dateutils или mxDateTime и только принять форматы строки, которые они могут проанализировать.
РЕДАКТИРОВАНИЕ 2: Как отмечено в комментариях выглядит, что python-dateutil может теперь обработать нечеткий парсинг. Я также с тех пор обнаружил parsedatetime модуль, который был разработан для использования в Chandler, и это работает с запросами в этом вопросе:
>>> import parsedatetime.parsedatetime as pdt
>>> import parsedatetime.parsedatetime_consts as pdc
>>> c=pdc.Constants()
>>> p=pdt.Calendar(c)
>>> p.parse('Today 3:20 PM')
((2010, 3, 12, 15, 20, 0, 4, 71, -1), 3)
>>> p.parse('Yesterday 11:06 AM')
((2010, 3, 11, 11, 6, 0, 3, 70, -1), 3)
и для ссылки вот текущее время:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 3, 12, 15, 23, 35, 951652)
Я еще еще не полностью до скорости на Python, но Ваш вопрос заинтересовал меня, таким образом, я вырыл вокруг немного.
Использование вычитания даты timedelta
безусловно наиболее распространенное решение, которое я нашел.
Так как Ваш вопрос спрашивает - ли это единственный способ сделать это, я проверил коды формата strftime, чтобы видеть, могли ли Вы определить свое собственное. К сожалению, нет. Из strftime документации Python:
... Полный набор поддерживаемых кодов формата варьируется через платформы, потому что Python называет strftime библиотеки C платформы () функцией, и изменения платформы распространены.
Следующее является списком всех кодов формата, которых требует стандарт C (версия 1989 года)...
Во всяком случае это не категорический ответ, но возможно Он сэкономит время других, лая неправильное дерево.