Bonjour,
Il ne s'agit pas de simplement changer le texte, ce qu'un simple Label.Text:='Hello world'; ferait mais de changer la présentation du texte (future prise en compte de balises html par exemple, ou encore utiliser du RTL.
pour cela j'ai écrit cet évènement
seulement, comme vous pouvez le constater sur l'image, il faut que j'efface l'ancien contenu du canvas
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 procedure TForm1.Label1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var ATextLayout : TTextLayout; begin var ATextLayout : TTextLayout; begin ATextLayout:=TTextLayoutManager.TextLayoutByCanvas(Canvas.ClassType).Create(Canvas); try ATextLayout.BeginUpdate; ATextLayout.Text:='Hello world'; ATextLayout.Color:=TAlphaColors.Black; //ATextLayout.LayoutCanvas.FillRect(ARect,1,TBrush.Create(TBrushKind.Solid,TAlphaColors.Red)); ATextLayout.TopLeft:=Arect.TopLeft; ATextLayout.MaxSize := PointF(ARect.Width, Arect.Height); ATextLayout.VerticalAlign:=TTextAlign.Trailing; ATextLayout.EndUpdate; // utilisation (future) d'un helper // Canvas.LugFillText(AtextLayout,ARect,'Hello world',false,1,[],TTextAlign.Leading,TTextAlign.Trailing); ATextLayout.RenderLayout(Canvas); finally ATextLayout.Free; end; end;
d'où l'instruction commentée //ATextLayout.LayoutCanvas.FillRect(ARect,1,TBrush.Create(TBrushKind.Solid,TAlphaColors.Red));décommentée dans cette seconde image
la question qui se pose est quel fillrect utiliser pour que cela reste compatible avec le style en cours ? (non, ce n'est pas TAlphaColors.null)
Bien sûr cet exemple est un peu tiré par les cheveux mais montre bien le problème qui se pose avec cette technique
démonstration avec mon futur helper et la prise en charge de RTL
Partager