TTabControl:从右到左显示标签

时间:2009-12-11 13:58:17

标签: delphi hebrew

我正在希伯来语环境中进行编程,因此我希望从右到左显示TTabControl顶部的选项卡。 BiDiMode属性不会影响选项卡,而是影响控件中包含的文本。

我尝试过以下代码

SetWindowLong (tc.Handle, GWL_EXSTYLE,
               GetWindowLong(tc.Handle, GWL_EXSTYLE)  or
               WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

可以正确显示标签,但可以防止ttabcontrol中的控件出现,因此它的使用有限。

有什么想法吗?顺便说一下,我正在使用Delphi 7。

TIA, No'am

4 个答案:

答案 0 :(得分:2)

这不是我的代码。我找到的东西,但似乎有用。

procedure TForm1.FormCreate(Sender: TObject);
const
  LVM_FIRST = $1000;
  LVM_GETHEADER = LVM_FIRST + 31;
var
  header: thandle;
begin
  header:= SendMessage (TabControl1.Handle, LVM_GETHEADER, 0, 0);
  SetWindowLong (header, GWL_EXSTYLE,
                 GetWindowLong (header, GWL_EXSTYLE)  or
                 WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

  SetWindowLong (TabControl1.Handle, GWL_EXSTYLE,
                 GetWindowLong (lv.Handle, GWL_EXSTYLE)  or
                 WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);
  lv.invalidate;  
end;

答案 1 :(得分:1)

我尝试使用D2007的代码,它在windows7上工作正常。

但你可以使用Raize控件,他们的PageControl和TabControl可以在没有任何代码的情况下从RightToLeft显示。

答案 2 :(得分:0)

我找到了一个解决方案,虽然不理想,但总比没有好。我正在使用TabAlign = tbRight,并且所有者绘制标签,以使其文本在屏幕上显示为水平。这是一个指向选项卡控件屏幕截图的链接,如下所示: http://4.bp.blogspot.com/_rdlpltE1gDQ/SyNFvVNNe5I/AAAAAAAAAEQ/2DNVlKqRlWE/s1600-h/screen5.JPG)

我仍然会感谢一个答案,它在控件的顶部有标签,但是与控件的右侧而不是左侧对齐。

答案 3 :(得分:0)

我使用了以下代码,但效果很好

procedure TfrmCustomer.FormCreate(Sender: TObject);
const
  LVM_FIRST = $1000;
  LVM_GETHEADER = LVM_FIRST + 31;
var
  header: thandle;
begin
  header := SendMessage(pgTypes.Handle, LVM_GETHEADER, 0, 0);
  SetWindowLong(header, GWL_EXSTYLE, GetWindowLong(header, GWL_EXSTYLE) or
    WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

  SetWindowLong(pgTypes.Handle, GWL_EXSTYLE, GetWindowLong(pgTypes.Handle,
    GWL_EXSTYLE) or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);
  pgTypes.Invalidate;
end;

pgTypes是 TPageControl

的名称