Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправить недочет со свойством BiDiMode в Delphi

Delphi , Компоненты и Классы , Свойства и События

Исправить недочет со свойством BiDiMode в Delphi

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  When you set the BiDiMode in you form to bdRightToLeft, you do only HALF mirroring. 

  Since Win98 (Hebrew/Arabic version) mirror it's envirement completly 
 (the Minimize, Close, Maxmize buttons are on the Left, and the Icon is on the right). 
  How can we do it in delphi ? 
}

 {...}
 const
  WS_EX_LAYOUTRTL = $00400000;
  WS_EX_LAYOUT_RTL = WS_EX_LAYOUTRTL;

 {...}

  TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
     procedure CreateParams(var Params : TCreateParams); override;
   end;

 {...}

 implementation

 procedure TForm1.CreateParams(var Params : TCreateParams);
 begin
   inherited CreateParams(Params);
   Params.ExStyle := WS_EX_LEFT or WS_EX_RTLREADING or WS_EX_LEFTSCROLLBAR or WS_EX_LAYOUT_RTL;
  {WS_EX_LEFT to set the text caption to the right, 
  use WS_EX_RIGHT to set the caption to the left}
 end;

 procedure TForm1.FormCreate(Sender: TObject);
 begin
  BiDiMode := bdLeftToRight; //A must !!! 
end;

 {The result is Right to Left (including the buttons, the icon and the system menu) }

Проблема с свойством BiDiMode в Delphi заключается в том, что установка его значения в bdRightToLeft частично отражает окружение. Для полного отражения окружения, как на Win98 (версии с ивритом/арабским языком), вам нужно установить некоторые дополнительные стили окна.

В вашем коде вы уже устанавливаете свойство ExStyle для включения стиля WS_EX_LAYOUTRTL. Однако этоalone не достаточно, чтобы достичь желаемого результата. Вам также нужно установить стили WS_EX_LEFTSCROLLBAR и WS_EX_RIGHT (или WS_EX_LEFT, в зависимости от ваших потребностей).

Вот обновленная версия вашего кода, которая должна работать:

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := WS_EX_LEFT or WS_EX_LAYOUTRTL;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BiDiMode := bdRightToLeft; // Это теперь должно полно отражать окружение
end;

В этом обновленном коде мы устанавливаем WS_EX_LEFT для установки текстового заголовка справа (или слева, в зависимости от ваших потребностей) и WS_EX_LAYOUTRTL для включения режима RTL-разметки. Это должно привести к полному отражению окружения, включая кнопки, иконку и системное меню.

Обратите внимание, что вам может потребоваться изменение этих настроек в зависимости от вашей конкретной задачи и языка/скрипта, который вы используете.

Обеспечение функциональности свойста BiDiMode в Delphi для отображения текста справа налево требует настройки параметра ExStyle и установки BiDiMode в bdLeftToRight.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:17:48/0.0055661201477051/1