Bonjour,
Ma question en fait une demande de test est surtout destiné à nos amis arabisants nombreux sur le forum, je ne sais si ces derniers connaissent cette astuce.
Avec une version Tokyo ou Berlin je voudrais qu'une colonne d'une TGrid (voire même une TStringGrid) soit affichée en BiDi en théorie je sais comment faire reste à le tester.
Pour cela il vous faut une forme contenant une grille avec au minima une colonne que vous nommerez 'bdicol' qui contiendra du texte soit en "occidental" soit en "oriental" (c'est là où je bloque pour le test).
Ensuite il vous faut ajouter un "simple" évènement OnDrawCell pour la grille
en PJ ma tentative qui me semble infructueuse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 uses ..., FMX.TextLayout; procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var aTextLayout : TTextLayout; begin if SameText(Column.Name,'bidicol') then begin Canvas.Fill.Color:=TAlphaColors.Black; Canvas.FillText(Bounds,Value.ToString,false,1,[TFillTextFlag.RightToLeft],TTextAlign.Leading); { pour info FillText est marqué comme : "deprecated, use TTextLayout" dans les sources (FMX.Graphics) utiliser un TTextLayout permet plus de possibilités mais au détriment de la longueur du code } { code avec TextLayout} //ATextLayout:=TTextLayoutManager.TextLayoutByCanvas(Canvas.ClassType).Create(Canvas); //ATextLayout.BeginUpdate; //ATextLayout.Text:=Value.ToString; //ATextLayout.Color:=TAlphaColors.Black; //ATextLayout.TopLeft:=Bounds.TopLeft; //ATextLayout.MaxSize := PointF(Bounds.Width, Bounds.Height); //ATextLayout.VerticalAlign:=TTextAlign.Center; // c'est ici que ça se passe //ATextLayout.RightToLeft := True; //ATextLayout.EndUpdate; //ATextLayout.RenderLayout(Canvas); end; end;
Partager