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
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;
seulement, comme vous pouvez le constater sur l'image, il faut que j'efface l'ancien contenu du canvas
Nom : Capture.PNG
Affichages : 228
Taille : 1,5 Ko
d'où l'instruction commentée //ATextLayout.LayoutCanvas.FillRect(ARect,1,TBrush.Create(TBrushKind.Solid,TAlphaColors.Red));décommentée dans cette seconde image
Nom : Capture.PNG
Affichages : 224
Taille : 1,4 Ko

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
Nom : Capture.PNG
Affichages : 227
Taille : 1,4 Ko