我正在希伯来语环境中进行编程,因此我希望从右到左显示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
答案 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
的名称