Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TTabControl: tabs displayed right to left

Tags:

delphi

hebrew

I am programming in a Hebrew environment and so I want the tabs on the top of a TTabControl to be displayed from right to left. The BiDiMode property doesn't affect the tabs, but rather text contained within the control.

I have tried the following code

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

which gets the tabs displayed correctly, but prevents the controls held within the ttabcontrol from appearing, and so its use is somewhat limited.

Any ideas? BTW, I'm using Delphi 7.

TIA, No'am

like image 365
No'am Newman Avatar asked Dec 11 '25 12:12

No'am Newman


2 Answers

This isn't my code. Something I found, but it seems to work.

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;
like image 183
Avishai Avatar answered Dec 13 '25 00:12

Avishai


I tried the code with D2007 and it's working fine on windows7.

But you could use Raize controls, their PageControl and TabControl could be showed from RightToLeft without any code.

like image 33
Mohammed Nasman Avatar answered Dec 13 '25 02:12

Mohammed Nasman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!