2009-12-11 6 views
3

Je suis programmation dans un environnement hébreu et je veux que les onglets en haut d'un TTabControl à afficher de droite à gauche. La propriété BiDiMode n'affecte pas les onglets, mais plutôt le texte contenu dans le contrôle.TTabControl: onglets affichés droite à gauche

J'ai essayé le code suivant

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

qui obtient les onglets affichés correctement, mais empêche les contrôles détenus dans le TTabControl d'apparaître, et son utilisation est quelque peu limitée.

Des idées? BTW, j'utilise Delphi 7.

TIA, No'am

Répondre

0

J'ai trouvé une solution qui, même si elle n'est pas idéale, vaut mieux que rien. J'utilise TabAlign = tbRight, et le propriétaire dessinant les onglets pour que leur texte apparaisse sur l'écran comme horizontal. Voici un lien vers la capture d'écran du contrôle onglet comme il est à l'heure actuelle: http://4.bp.blogspot.com/_rdlpltE1gDQ/SyNFvVNNe5I/AAAAAAAAAEQ/2DNVlKqRlWE/s1600-h/screen5.JPG)

je serais toujours reconnaissant d'une réponse qui a les onglets en haut du contrôle, mais aligné à droite de la contrôle au lieu de à gauche.

1

J'ai essayé le code avec D2007 et il fonctionne très bien sur Windows7.

Mais vous pouvez utiliser les contrôles Raize, leur PageControl et TabControl peuvent être affichés à partir de RightToLeft sans aucun code.

+0

J'ai besoin d'une solution qui fonctionne avec Delphi 7 et Windows XP. –

+0

+1 pour les contrôles Raize, et de nombreux autres composants peuvent aider à faire briller votre programme. http://www.raize.com – skamradt

+0

No'am, Raize résoudra votre problème à n'importe quelle version de Delphi ou à toutes les fenêtres, à côté de cela vous donnera une meilleure interface et des contrôles plus avancés. –

2

Ce n'est pas mon code. Quelque chose que j'ai trouvé, mais cela semble fonctionner.

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; 
Questions connexes