Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 748

/ вопрос открыт /

Надо перевернуть TDateTimePicker (т.е. сделать BiDiMode=bdRightToLeft, который для этой компоненты не работает). Прилагаю код. Но он оставляет правую границу стрелки компоненты на месте. Выглядит некрасиво. Может есть идеи ?
Спасибо.

Приложение:
  1. procedure TForm1.ReverseDateTimePicker(dtp:TDateTimePicker);
  2. const
  3. WS_EX_LAYOUTRTL = $00400000;
  4. var
  5. V: Longint;
  6. Comp: TComponent;
  7. begin
  8. Comp := dtp;
  9. V := GetWindowLong((Comp as TDateTimePicker).Handle, GWL_STYLE);
  10. V := V OR $0040;
  11. SetWindowLong((Comp as TDateTimePicker).Handle, GWL_STYLE, V);
  12. V := GetWindowLong((Comp as TDateTimePicker).Handle, GWL_EXSTYLE);
  13. V := V or WS_EX_LAYOUTRTL or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_RIGHTSCROLLBAR;
  14. SetWindowLong((Comp as TDateTimePicker).Handle, GWL_EXSTYLE, V);
  15. DateTime_SetFormat((Comp as TDateTimePicker).Handle, PChar(ReverseString(SHORTDATEFORMAT)));
  16.  
  17. end;
  18.  
  19. function TForm1.ReverseString(S: String): String;
  20. var
  21. i, Len: Integer;
  22. begin
  23. Result := '';
  24. Len := Length(Trim(S));
  25. if NOT Len > 1 then
  26. Exit;
  27. for i := Len downto 1 do
  28. Result := Result + s[i] ;
  29. end;
  30.  
  31.  


Sharma Sergei Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Sharma Sergei (статус: Посетитель)
Вопрос отправлен: 17 июля 2007, 00:24
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Sharma Sergei!
А у меня все работает нормально. У Вас включены визуальные стили?

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. const
  3. WS_EX_LAYOUTRTL = $00400000;
  4. var
  5. V: Longint;
  6. begin
  7. V := GetWindowLong(DateTimePicker1.Handle, GWL_STYLE);
  8. V := V OR $0040;
  9. SetWindowLong(DateTimePicker1.Handle, GWL_STYLE, V);
  10. V := GetWindowLong(DateTimePicker1.Handle, GWL_EXSTYLE);
  11. V := V or WS_EX_LAYOUTRTL or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_RIGHTSCROLLBAR;
  12. SetWindowLong(DateTimePicker1.Handle, GWL_EXSTYLE, V);
  13. DateTimePicker1.Format := PChar(ReverseString(SHORTDATEFORMAT));
  14. end;
  15.  


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 17 июля 2007, 04:11


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 18 июля 2007, 03:05; участников в обсуждении: 2.
Sharma Sergei

Sharma Sergei (статус: Посетитель), 17 июля 2007, 22:58 [#1]:

Компилятор Delphi 5 дает ошибку в последней
DateTimePicker1.Format
строке: \'Undeclared identifier \'Format\'\'.
Sharma Sergei

Sharma Sergei (статус: Посетитель), 17 июля 2007, 23:16 [#2]:

Что значит \'У Вас включены визуальные стили? \' ?
Матвеев Игорь Владимирович

Матвеев Игорь Владимирович (статус: Студент), 18 июля 2007, 03:05 [#3]:

Я писал в Delphi 6, в Delphi 5 это выражение нужно заменить на:
SendMessage((Comp as TDateTimePicker).Handle, DTM_SETFORMATA, 0 , Integer(PChar(ReverseString(SHORTDATEFORMAT))));
// ***
DTM_SETFORMATA = $1000 + 5;

Это Ваш код, только немного по другому записанный.

Визуальные стили - темы оформления Windows XP (например Luna), я, например, принципиально их не использую.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.