3

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

我试过下面的代码

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

它可以正确显示选项卡,但会阻止 ttabcontrol 中的控件出现,因此它的使用受到一定的限制。

有任何想法吗?顺便说一句,我正在使用 Delphi 7。

TIA,诺姆

4

4 回答 4

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;
于 2011-02-11T07:17:26.977 回答
1

我用 D2007 尝试了代码,它在 windows7 上运行良好。

但是您可以使用 Raize 控件,它们的 PageControl 和 TabControl 可以从 RightToLeft 显示而无需任何代码。

于 2009-12-11T15:07:02.907 回答
0

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

我仍然会很感激在控件顶部有选项卡的答案,但与控件的右侧而不是左侧对齐。

于 2009-12-12T07:44:38.903 回答
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 的名称

于 2018-11-08T18:09:12.570 回答