Right To Left Forms support
How to enable Right To Left Forms (including icons and form captions) with Delphi:
Override the CreateParams method and insert
1 2 3 4 5 6 7 8 |
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_LEFT or WS_EX_RTLREADING or WS_EX_LEFTSCROLLBAR or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT; end; |
Now take a look at your BiDiMode settings – it may have the contrary effect if set to “bdRightToLeft”…
4 Comments to Right To Left Forms support
Thank you for posting this. I thought I was the only one bothered by this. However, in Delphi 6, at first this appears to work fine, but things have a way of disappearing. For example, as soon as a TStringGrid gets focus, it becomes invisible. I’ve tried Repaint and Refresh on both the component and the Form with no luck.
March 5, 2011
Just to let you know and to thank you, I found that your method works if you first put a client aligned TPanel on the Form and make it the parent of all components. The Form becomes much slower and does a lot of visible redraws, but it works. If you put edit components directly on the TForm, they become unstable. I hope this information may help others in writing RightToLeft apps. Thank you again for sharing.
March 5, 2011
Thanks for that info. You may override the panel’s background redrawing and turn doublebuffing on to avoid flickering.
December 1, 2011
This seems to work for both Delphi6 and Lazarus. I hope it can be useful to others:
unit Unit1;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
StringGrid1: TStringGrid;
Memo1: TMemo;
Edit1: TEdit;
private
{ Private declarations }
procedure CreateParams(var Params : TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
LangHeb = $40D;
var
Cover: TCustomControl;
procedure TForm1.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:= WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT;
Cover:= TCustomControl.Create(Self);
while Form1.ControlCount>0 do begin
Form1.Controls[0].Parent:= Cover;
end;
with Cover do begin
Parent:= Form1;
Align:= alClient;
BiDiMode:= bdRightToLeft;
end;
end;
initialization
with Application do begin
NonBiDiKeyboard:= IntToHex(GetUserDefaultLangId,8);
BiDiKeyboard:= IntToHex(LangHeb,8);
SysLocale.MiddleEast:= True;
end;
end.
Leave a comment
About Dennis D. Spreen
Search
Recent Posts
- How to compile Lua 5.4.0 for Android as a dynamic library using Android Studio 4
- Please make inline vars usable for production – fix RSP-28892
- How to compile Lua 5.4.0 as a Mac OS X dynamic library
- How to compile Lua 5.4.0 for Linux as a shared library
- How to compile Lua 5.4.0 for Windows
- Daily Wage – a Spigot/Bukkit plugin that pays out a daily wage
- How to compile Lua 5.3.5 for Windows
- Better Collada exporter for Blender with custom properties
- MOS6502-delphi – a MOS 6502 CPU emulator for Delphi
- Pass a multidimensional array as a parameter (with a hidden caveat)
Categories
Tags
Archives
- May 2020
- March 2020
- June 2019
- March 2017
- August 2016
- July 2016
- June 2016
- January 2016
- September 2015
- February 2015
- January 2015
- October 2014
- September 2014
- August 2014
- May 2014
- March 2014
- February 2014
- November 2011
- June 2011
- February 2011
- March 2010
- September 2009
- August 2009
- July 2009
- May 2009
- March 2009
- February 2009
- January 2009
- November 2008
- October 2008
- February 2008
- June 2007
Delphi Feeds
- Habari STOMP Client libraries release 2024.12 December 7, 2024
- Delphi and AI December 7, 2024
- Uses Clause Manager topic added to the GExperts help December 6, 2024
- Upgrading C++Builder 12.2: Tip #4 1/2: Check out compiler safety options December 6, 2024
- Upgrading C++Builder 12.2: Tip #4, Take Advantage of Security and Correctness December 5, 2024
- .NET MAUI: Complete Guide December 4, 2024
- Upgrading C++Builder 12.2: Tip #3, Massive Files with iostreams December 4, 2024
- Log exceptions in your Delphi app in the cloud with StellarDS.io December 4, 2024
- Introducing Signotaur - Remote Code Signing Server December 4, 2024
- Upgrading C++Builder 12.2: Tip #2, Handling Old RTL December 3, 2024
February 14, 2011