delphi 样式化页面上的“翻转”标题控制为RTL

ccgok5k5  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(118)

我使用 Delphi 10.3,一些风格(只有RAD)我写的从右到左的桌面应用程序。与“正常”窗口。
pagecontrol从左到右绘制标签表,如下所示

但我希望页面控件从右向左绘制自己,如下所示

为此,我使用代码

procedure TMasterOfAllFrm.SetPageControlRightToLeft(PC : TPageControl);
const
  LVM_FIRST = $1000;
  LVM_GETHEADER = LVM_FIRST + 31;
var
  header: thandle;
begin
// START - to restore - open all lines
  header := SendMessage(PC.Handle, LVM_GETHEADER, 0, 0);
  SetWindowLong(header, GWL_EXSTYLE, GetWindowLong(header, GWL_EXSTYLE) or
    WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

  SetWindowLong(PC.Handle, GWL_EXSTYLE, GetWindowLong(PC.Handle,
    GWL_EXSTYLE) or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);
// END - to restore - open all lines
end;

它工作正常,但是当我使用STYLE时,标签页的标题是“作为镜像视图翻转”,就像这样

如何旋转标题,我试着翻转字体,从页面控制中删除[sefont],翻转字符串.... nada.没有成功。
有人有更好的主意吗?

c2e8gylq

c2e8gylq1#

type
   TPageControl = class(ComCtrls.TPageControl)
   private
    tc : TTabControl;
    procedure tcChange(Sender : TObject);
   protected
     procedure loaded; override;
   end;

implementation

{$R *.dfm}

Procedure SetRTL(Control : TWinControl);
begin
  SetWindowLong (Control.Handle, GWL_EXSTYLE,
                 GetWindowLong (Control.Handle, GWL_EXSTYLE)  or
                 WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);
  Control.invalidate;
end;

procedure TPageControl.loaded;
var i,j : integer;
begin
  inherited loaded;
  tc := TTabControl.Create(Self.Owner);
  tc.Parent := Parent;
  tc.Width := Width;
  tc.Height := height;
  tc.Top := Top;
  tc.Left := Left;
  tc.Align := Align;
  SetRTL(tc);
  Self.Parent := tc;
  Self.Align := alclient;
  Self.Style := tsFlatButtons;
  j := ActivePageIndex;
  for i := 0 to PageCount-1 do
    tc.Tabs.Add(Pages[i].Caption);
  tc.OnChange := tcChange;
  tc.TabIndex := j;
end;

procedure TPageControl.tcChange(Sender : TObject);
begin
 ActivePageIndex := tc.TabIndex;
end;

相关问题