Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止RTL TListView镜像复选框和/或图形_Listview_Delphi_Winapi_Gdi+_Right To Left - Fatal编程技术网

防止RTL TListView镜像复选框和/或图形

防止RTL TListView镜像复选框和/或图形,listview,delphi,winapi,gdi+,right-to-left,Listview,Delphi,Winapi,Gdi+,Right To Left,我试图使ListView的列从右向左显示。这一点已经得到了证实。但问题在于图标和复选框。当我使用SetWindowLong制作ListView RTL时,它也会镜像图形和复选框,这是不需要的。我可以使用编辑工具镜像图形,虽然麻烦但可行,但我不知道如何处理复选框 我想他们都有相同的原因,所以我搜索了一下,在中找到了一整篇关于RTL布局的文章。在第节中,它指出了图形问题。建议使用layout\u RTL和layout\u BITMAPORIENTATIONPRESERVED标志更改DC的布局样式

我试图使ListView的列从右向左显示。这一点已经得到了证实。但问题在于图标和复选框。当我使用
SetWindowLong
制作ListView RTL时,它也会镜像图形和复选框,这是不需要的。我可以使用编辑工具镜像图形,虽然麻烦但可行,但我不知道如何处理复选框

我想他们都有相同的原因,所以我搜索了一下,在中找到了一整篇关于RTL布局的文章。在第节中,它指出了图形问题。建议使用
layout\u RTL
layout\u BITMAPORIENTATIONPRESERVED
标志更改DC的布局样式

这是我通过结合文章中建议的方法和上面提到的答案实现的功能:

const
  LAYOUT_RTL = 1;
  LAYOUT_BITMAPORIENTATIONPRESERVED = 8;

function GetLayout(DC: HDC): DWORD; stdcall; external 'gdi32.dll';
function SetLayout(DC: HDC; dwLayout: DWORD): DWORD; stdcall; external 'gdi32.dll';

procedure MakeRTL(const Handle: HWND);
var
  DC: HDC;
begin
  SetWindowLong(Handle, GWL_EXSTYLE,
    GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL);

  DC := GetWindowDC(Handle);
  if DC <> 0 then
    SetLayout(DC, GetLayout(DC) or LAYOUT_RTL or LAYOUT_ORIENTATIONMASK);

  InvalidateRect(Handle, nil, True);
end;
const
布局_RTL=1;
布局\位图方向保留=8;
功能GetLayout(DC:HDC):DWORD;stdcall;外部“gdi32.dll”;
函数集布局(DC:HDC;dwLayout:DWORD):DWORD;stdcall;外部“gdi32.dll”;
程序MakeRTL(const句柄:HWND);
变量
DC:HDC;
开始
SetWindowLong(手柄,GWL_EXSTYLE,
GetWindowLong(句柄、GWL_EXSTYLE)或WS_EX_LayoutTL);
DC:=GetWindowDC(句柄);
如果DC为0,则
设置布局(DC、GetLayout(DC)或布局RTL或布局方向任务);
无效(句柄,无,真);
结束;
但这并没有改变任何事情。我试着阻止它们中的任何一个,改变它们的顺序,改变不同的地方来称呼它,但没有成功

现在的问题是,如何使ListView的列从右向左显示,而不镜像图形或复选框

我正在使用Win10 x64和Delphi 2010

如果您想重现问题,以下是我的delphi代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ImgList, StdCtrls, CommCtrl, ShellAPI;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    ImageList1: TImageList;
    ListView2: TListView;
    Button1: TButton;
    Label1: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  LAYOUT_RTL = 1;
  LAYOUT_BTT = 2;
  LAYOUT_VBH = 4;
  LAYOUT_ORIENTATIONMASK = LAYOUT_RTL or LAYOUT_BTT or LAYOUT_VBH;
  LAYOUT_BITMAPORIENTATIONPRESERVED = 8;

function GetLayout(DC: HDC): DWORD; stdcall; external 'gdi32.dll';
function SetLayout(DC: HDC; dwLayout: DWORD): DWORD; stdcall; external 'gdi32.dll';

procedure MakeRTL(const Handle: HWND);
var
  DC: HDC;
begin
  SetWindowLong(Handle, GWL_EXSTYLE,
    GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL);

  DC := GetWindowDC(Handle);
  if DC <> 0 then
    SetLayout(DC, GetLayout(DC) or LAYOUT_RTL or LAYOUT_ORIENTATIONMASK);

  InvalidateRect(Handle, nil, True);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRTL(ListView_GetHeader(ListView1.Handle));
  MakeRTL(ListView1.Handle);
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListView1.Items.Count - 1 do
  begin
    ListView1.Items[I].Checked := True;
    ListView2.Items[I].Checked := True;
  end;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  ShellExecute(0, 'open', 'https://icons8.com/icons/set/check', '', '', SW_SHOWNORMAL);
end;

end.
单元1;
接口
使用
窗口、消息、系统工具、变体、类、图形、控件、窗体、,
对话框、COMCTRL、ImgList、StdCtrls、CommCtrl、ShellAPI;
类型
TForm1=类(TForm)
ListView1:TListView;
ImageList1:TImageList;
ListView2:TListView;
按钮1:t按钮;
标签1:TLabel;
激活程序(发送方:TObject);
程序按钮1点击(发送方:ToObject);
程序标签1点击(发送方:TObject);
结束;
变量
表1:TForm1;
实施
{$R*.dfm}
常数
布局_RTL=1;
布局_BTT=2;
布局_VBH=4;
布局方向任务=布局RTL或布局BTT或布局VBH;
布局\位图方向保留=8;
功能GetLayout(DC:HDC):DWORD;stdcall;外部“gdi32.dll”;
函数集布局(DC:HDC;dwLayout:DWORD):DWORD;stdcall;外部“gdi32.dll”;
程序MakeRTL(const句柄:HWND);
变量
DC:HDC;
开始
SetWindowLong(手柄,GWL_EXSTYLE,
GetWindowLong(句柄、GWL_EXSTYLE)或WS_EX_LayoutTL);
DC:=GetWindowDC(句柄);
如果DC为0,则
设置布局(DC、GetLayout(DC)或布局RTL或布局方向任务);
无效(句柄,无,真);
结束;
程序TForm1.按钮1单击(发送方:TObject);
开始
MakeRTL(ListView_GetHeader(ListView1.Handle));
MakeRTL(ListView1.Handle);
结束;
程序TForm1.FormActivate(发送方:ToObject);
变量
I:整数;
开始
对于I:=0到ListView1.Items.Count-1 do
开始
ListView1.Items[I]。选中:=True;
ListView2.Items[I]。选中:=True;
结束;
结束;
程序TForm1.标签1点击(发送方:TObject);
开始
ShellExecute(0,'打开','https://icons8.com/icons/set/check",","正常","正常",;
结束;
结束。
dfm:

对象格式1:t格式1
左=0
Top=0
BiDiMode=bLeftToRight
标题='Form1'
ClientHeight=169
ClientWidth=353
颜色=clBtnFace
Font.Charset=默认字符集
Font.Color=clWindowText
字体高度=-11
Font.Name='Tahoma'
Font.Style=[]
OldCreateOrder=False
ParentBiDiMode=False
OnActivate=FormActivate
PixelsPerInch=96
text高度=13
对象标签1:TLabel
左=277
Top=128
宽度=47
高度=26
光标=crHandPoint
对齐=taCenter
标题='Icons8图形'
Font.Charset=默认字符集
Font.Color=clBlue
字体高度=-11
Font.Name='Tahoma'
Font.Style=[fsUnderline]
ParentFont=False
wrap=True
OnClick=Label1Click
结束
对象列表视图1:TListView
左=8
Top=8
宽度=250
高度=73
复选框=真
列=<
项目
标题='Cap'
宽度=100
结束
项目
标题='Sub1'
宽度=100
结束>
Items.ItemData={
0362000000002000000000000000FFFFFFFFFF01000000FFFFFFFFFF000000
00054900740065006D00310005500072006F007000310001000000FFFFFFFF
FFFFFF 01000000FFFFFFFF00000000054900740065006D003200005500072006F
0070003200FFFFFFFF}
大图像=图像列表1
SmallImages=ImageList1
TabOrder=0
ViewStyle=vsReport
结束
对象列表视图2:TListView
左=8
Top=87
宽度=250
高度=73
复选框=真
列=<
项目
标题='Cap'
宽度=100
结束
项目
标题='Sub1'
宽度=100
结束>
Items.ItemData={
0362000000002000000000000000FFFFFFFFFF01000000FFFFFFFFFF000000
00054900740065006D00310005500072006F007000310001000000FFFFFFFF
FFFFFF 01000000FFFFFFFF00000000054900740065006D003200005500072006F
0070003200FFFFFFFF}
SmallImages=ImageList1
TabOrder=1
ViewStyle=vsReport
结束
对象按钮1:t按钮
左=264
Top=8
宽度=75
高度=25
标题='RTL'
TabOrder=2
OnClick=按钮1单击
结束
对象ImageList1:TImageList
颜色深度=CD32位
DrawingStyle=d透明
左=272
Top=40
位图={
494C0101020008003C0010001000FFFFFF2110FFFFFFFFFFFF424D3600
0000000000003600000028000000400000001000000001002000000000000010
0000000000000000000000000000000000000000000000000000000000000000
000000000
object Form1: TForm1
  Left = 0
  Top = 0
  BiDiMode = bdLeftToRight
  Caption = 'Form1'
  ClientHeight = 169
  ClientWidth = 353
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  ParentBiDiMode = False
  OnActivate = FormActivate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 277
    Top = 128
    Width = 47
    Height = 26
    Cursor = crHandPoint
    Alignment = taCenter
    Caption = 'graphics by Icons8'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clBlue
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = [fsUnderline]
    ParentFont = False
    WordWrap = True
    OnClick = Label1Click
  end
  object ListView1: TListView
    Left = 8
    Top = 8
    Width = 250
    Height = 73
    Checkboxes = True
    Columns = <
      item
        Caption = 'Cap'
        Width = 100
      end
      item
        Caption = 'Sub1'
        Width = 100
      end>
    Items.ItemData = {
      03620000000200000000000000FFFFFFFFFFFFFFFF01000000FFFFFFFF000000
      00054900740065006D00310005500072006F007000310001000000FFFFFFFFFF
      FFFFFF01000000FFFFFFFF00000000054900740065006D00320005500072006F
      0070003200FFFFFFFF}
    LargeImages = ImageList1
    SmallImages = ImageList1
    TabOrder = 0
    ViewStyle = vsReport
  end
  object ListView2: TListView
    Left = 8
    Top = 87
    Width = 250
    Height = 73
    Checkboxes = True
    Columns = <
      item
        Caption = 'Cap'
        Width = 100
      end
      item
        Caption = 'Sub1'
        Width = 100
      end>
    Items.ItemData = {
      03620000000200000000000000FFFFFFFFFFFFFFFF01000000FFFFFFFF000000
      00054900740065006D00310005500072006F007000310001000000FFFFFFFFFF
      FFFFFF01000000FFFFFFFF00000000054900740065006D00320005500072006F
      0070003200FFFFFFFF}
    SmallImages = ImageList1
    TabOrder = 1
    ViewStyle = vsReport
  end
  object Button1: TButton
    Left = 264
    Top = 8
    Width = 75
    Height = 25
    Caption = 'RTL'
    TabOrder = 2
    OnClick = Button1Click
  end
  object ImageList1: TImageList
    ColorDepth = cd32Bit
    DrawingStyle = dsTransparent
    Left = 272
    Top = 40
    Bitmap = {
      494C0101020008003C0010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000001000000001002000000000000010
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000618062C0E3E0E741557159F1557159F0E3F0E730617062B0000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000000000001456149E218A
      21FE218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF218A21FE1455149C00000000000000000000000000000000000000000107
      010D145814A1218A21FE218B21FF218B21FF218B21FF218B21FF218A21FE1557
      159F0207020C0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218A21FD218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF218B21FF218921FC000000000000000000000000000000000107010D1B71
      1BCF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF1A701ACE0207020C00000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF218B21FF218B21FF155915A4208520F4218B21FF218B21FF218B21FF218B
      21FF218B21FF218B21FF00000000000000000000000000000000165816A2218B
      21FF218B21FF218B21FF155915A4208520F4218B21FF218B21FF218B21FF218B
      21FF218B21FF1456149E00000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF218B21FF124E128F000100010929094B208720F8218B21FF218B21FF218B
      21FF218B21FF218B21FF00000000000000000000000005160528218A21FD218B
      21FF218B21FF114A1187000000000722073E208520F4218B21FF218B21FF218B
      21FF218B21FF218A21FD05150526000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF114A1187000000000D3B0D6C010901110722073E208520F4218B21FF218B
      21FF218B21FF218B21FF0000000000000000000000000F430F7B218B21FF218B
      21FF114A1187000000000D3B0D6C010901110722073E208520F4218B21FF218B
      21FF218B21FF218B21FF0F410F78000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF1A6B
      1AC400000000114A1187218B21FF1B6F1BCC010901110722073E208420F3218B
      21FF218B21FF218B21FF0000000000000000000000001557159F218B21FF1A6B
      1AC400000000114A1187218B21FF1B6F1BCC010901110722073E208420F3218B
      21FF218B21FF218B21FF1456149E000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF196919C1218B21FF218B21FF218B21FF1B6F1BCC010901110722073E2084
      20F3218B21FF218B21FF0000000000000000000000001456149E218B21FF218B
      21FF196919C1218B21FF218B21FF218B21FF1B6F1BCC010901110722073E2084
      20F3218B21FF218B21FF1456149D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF1A691AC00006000B0925
      0944208620F6218B21FF0000000000000000000000001044107C218B21FF218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF1A6F1ACB010901110722
      073E208420F3218B21FF10421079000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF1A6F1ACB0310
      031E1B711BD0218B21FF0000000000000000000000000519052D218A21FE218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF1A6F1ACB0310
      031E1B711BD0218A21FE0617062B000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218B21FF218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF2087
      20F8218B21FF218B21FF00000000000000000000000000000000165E16AC218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF2087
      20F8218B21FF155C15A800000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000218A21FD218B
      21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF218B21FF218921FC00000000000000000000000000000000020902101B72
      1BD1218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF1B711BD00108010F00000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000000000001456149E2188
      21F9218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B21FF218B
      21FF218821F91455149C00000000000000000000000000000000000000000209
      0210165E16AD218B21FF218B21FF218B21FF218B21FF218B21FF218A21FE165D
      16AB0108010F0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000061A062F10471082155915A4155915A4114611810519052E0000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000424D3E000000000000003E000000
      2800000040000000100000000100010000000000800000000000000000000000
      000000000000000000000000FFFFFF0000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000}
  end
end
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ImgList, StdCtrls, CommCtrl, ShellAPI;

type
  TListView = class(comctrls.TListView)
  protected
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

  end;

  TForm1 = class(TForm)
    ListView1: TListView;
    ImageList1: TImageList;
    ListView2: TListView;
    Button1: TButton;
    Label1: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetLayout(DC: HDC): DWORD; stdcall; external 'gdi32.dll';
function SetLayout(DC: HDC; dwLayout: DWORD): DWORD; stdcall; external 'gdi32.dll';

procedure MakeRTL(const Handle: HWND);
begin
  SetWindowLong(Handle, GWL_EXSTYLE,
    GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL);
  InvalidateRect(Handle, nil, True);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRTL(ListView_GetHeader(ListView1.Handle));
  MakeRTL(ListView1.Handle);
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListView1.Items.Count - 1 do
  begin
    ListView1.Items[I].Checked := True;
    ListView2.Items[I].Checked := True;
  end;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  ShellExecute(0, 'open', 'https://icons8.com/icons/set/check', '', '', SW_SHOWNORMAL);
end;

{ TListView }

const
  LAYOUT_RTL = 1;
  LAYOUT_BITMAPORIENTATIONPRESERVED = 8;

procedure TListView.WMPaint(var Message: TWMPaint);
var
  Layout: DWORD;
  PS: TPaintStruct;
begin
  Message.DC := BeginPaint(Handle, PS);
  Layout := GetLayout(Message.DC);
  if (Layout and LAYOUT_RTL) <> 0 then
    SetLayout(Message.DC, Layout or LAYOUT_BITMAPORIENTATIONPRESERVED);
  inherited;
  EndPaint(Handle, PS);
end;

end.