Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TDateTimePicker. Ввод без разделителей. Ввод даты цифрами 
V
    Опции темы
MetalFan
  Дата 13.2.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Что имеем: Стандартное поведение вышеназванного контрола при вводе даты(времени) "01<разд>01<разд>2012". Где <разд> - кнопка "влево" или знак разделителя даты.

Задача: "заставить" DateTimePicker понимать ввод с клавиатуры без необходимости ввода разделителя, т.е. набрали 01012012 - получили 01.01.2012

Есть конечно вариант с использованием TMaskedEdit... но хотелось бы красиво "расковырять" сабжевый контрол. В голову ничего "красивого" не приходит.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Akella
Дата 13.2.2012, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



именно стандартный?

Добавлено через 7 минут и 58 секунд
а у меня событие OnUserInput не срабатывает, хотя ParseInput включено
PM MAIL   Вверх
northener
Дата 14.2.2012, 01:17 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Курите TDateEdit от RxLib. 
Или смотрите его исходники.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
superVad
Дата 14.2.2012, 10:59 (ссылка)  | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(northener @  14.2.2012,  00:17 Найти цитируемый пост)
Курите TDateEdit от RxLib. 

Ну тогда уже jvcl-овский.
PM MAIL   Вверх
MetalFan
Дата 14.2.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Курить то оно хорошо,  покурим на досуге, но как добиться нужного поведения от стандартного компонента?

Добавлено через 8 минут и 42 секунды
p.s. Покурил. JVCL-овский компонент является наследником TMaskedEdit'а и никак не связан с "исходной" оберткой над виндовым DATETIMEPICK_CLASS... Так что не катит.

Больше идей ни у кого нет?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
superVad
Дата 14.2.2012, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(MetalFan @  14.2.2012,  13:49 Найти цитируемый пост)
Больше идей ни у кого нет?

Идей нет. Но тема интересная.
Мне жвцл-овский тоже не нравится - к примеру возможностью его очистки и срабатывания события изменения в открытом состоянии.
PM MAIL   Вверх
Akella
Дата 14.2.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(MetalFan @  14.2.2012,  14:49 Найти цитируемый пост)
p.s. Покурил. JVCL-овский компонент является наследником TMaskedEdit'а и никак не связан с "исходной" оберткой над виндовым DATETIMEPICK_CLASS... Так что не катит.

Больше идей ни у кого нет? 


У DevExpress тоже использует MaskEdit, так что вряд ли у тебя что-то выйдет со стандартной компонентой.
PM MAIL   Вверх
Чучмек
Дата 15.2.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Код

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
if not DateTimePicker1.DroppedDown then
    sendmessage(DateTimePicker1.Handle,WM_KEYDOWN,39,0);
end;


Это сообщение отредактировал(а) Чучмек - 15.2.2012, 19:15


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
MetalFan
Дата 23.2.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Чучмек, Спасибо за решение!
Немножко "причесал", в целом сойдет)
Код

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  with TDateTimePicker(Sender) do
    if not DroppedDown then
      Perform(WM_KEYDOWN, VK_RIGHT, 0);
end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MetalFan
Дата 5.3.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Дооптимизировал. Написал хелпер. 
Теперь работает более логично. Переход на сл.поле происходит, если были нажаты только цифровые клавиши.
Для активации "ввода без разделителей" достаточно описать хелпер в одном из модулей и подключать его в нужном месте. Ну и для нужных контролов вызвать InitHelper при инициализации формы.
Может кому пригодиться:
Код

  TDateTimePickerHelper = class helper for TDateTimePicker
    procedure dtpChange(Sender: TObject);
    procedure dtpKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure InitHelper;
  end;
...
{ TDateTimePickerHelper }

procedure TDateTimePickerHelper.dtpChange(Sender: TObject);
begin
  with TDateTimePicker(Sender) do
  begin
    if not DroppedDown and (Tag in [Ord('0')..Ord('9')]) then
      Perform(WM_KEYDOWN, VK_RIGHT, 0);
    Tag := 0;
  end;
end;

procedure TDateTimePickerHelper.dtpKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Shift = [] then
    TControl(Sender).Tag := Key
  else
    TControl(Sender).Tag := 0;
end;

procedure TDateTimePickerHelper.InitHelper;
begin
  OnChange := dtpChange;
  OnKeyDown := dtpKeyDown;
end;




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
northener
Дата 6.3.2012, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(MetalFan @  5.3.2012,  23:00 Найти цитируемый пост)
Дооптимизировал. Написал хелпер. 

А хелперы в Дельфи появились в какой версии?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Rennigth
Дата 6.3.2012, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(northener @  6.3.2012,  00:37 Найти цитируемый пост)
А хелперы в Дельфи появились в какой версии? 

вроде D2007


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1091 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.