|
Вопрос # 748/ вопрос открыт / |
|
Надо перевернуть TDateTimePicker (т.е. сделать BiDiMode=bdRightToLeft, который для этой компоненты не работает). Прилагаю код. Но он оставляет правую границу стрелки компоненты на месте. Выглядит некрасиво. Может есть идеи ?
Спасибо.
Приложение: Переключить в обычный режим- procedure TForm1.ReverseDateTimePicker(dtp:TDateTimePicker);
- const
- WS_EX_LAYOUTRTL = $00400000;
- var
- V: Longint;
- Comp: TComponent;
- begin
- Comp := dtp;
- V := GetWindowLong((Comp as TDateTimePicker).Handle, GWL_STYLE);
- V := V OR $0040;
- SetWindowLong((Comp as TDateTimePicker).Handle, GWL_STYLE, V);
- V := GetWindowLong((Comp as TDateTimePicker).Handle, GWL_EXSTYLE);
- V := V or WS_EX_LAYOUTRTL or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_RIGHTSCROLLBAR;
- SetWindowLong((Comp as TDateTimePicker).Handle, GWL_EXSTYLE, V);
- DateTime_SetFormat((Comp as TDateTimePicker).Handle, PChar(ReverseString(SHORTDATEFORMAT)));
-
- end;
-
- function TForm1.ReverseString(S: String): String;
- var
- i, Len: Integer;
- begin
- Result := '';
- Len := Length(Trim(S));
- if NOT Len > 1 then
- Exit;
- for i := Len downto 1 do
- Result := Result + s[i] ;
- end;
-
-
 |
Вопрос задал: Sharma Sergei (статус: Посетитель)
Вопрос отправлен: 17 июля 2007, 00:24
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Sharma Sergei!
А у меня все работает нормально. У Вас включены визуальные стили?
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- const
- WS_EX_LAYOUTRTL = $00400000;
- var
- V: Longint;
- begin
- V := GetWindowLong(DateTimePicker1.Handle, GWL_STYLE);
- V := V OR $0040;
- SetWindowLong(DateTimePicker1.Handle, GWL_STYLE, V);
- V := GetWindowLong(DateTimePicker1.Handle, GWL_EXSTYLE);
- V := V or WS_EX_LAYOUTRTL or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_RIGHTSCROLLBAR;
- SetWindowLong(DateTimePicker1.Handle, GWL_EXSTYLE, V);
- DateTimePicker1.Format := PChar(ReverseString(SHORTDATEFORMAT));
- end;
-
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 18 июля 2007, 03:05; участников в обсуждении: 2.
|
Sharma Sergei (статус: Посетитель), 17 июля 2007, 22:58 [#1]:
Компилятор Delphi 5 дает ошибку в последней
DateTimePicker1.Format
строке: \'Undeclared identifier \'Format\'\'.
|
|
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), я, например, принципиально их не использую.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|