J'ai fait un exemple très grossier pour vous qui fonctionne, que vous pouvez ensuite essayer d'améliorer selon vos besoins.
Supprimez un contrôle TDBRichEdit sur votre formulaire et définissez sa propriété Visible sur False. Définissez les propriétés DataSource et DataField pour récupérer le champ approprié.
Dites le nom du champ qui contient le texte RTF est appelé « RTF »:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
DrawState: Integer;
DrawRect: TRect;
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = 'RTF') then
with DBRichEdit1 do
begin
Left := Rect.Left + DBGrid1.Left + 1;
Top := Rect.Top + DBGrid1.Top + 1;
Visible := True;
end;
end;
end;
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedField.FieldName = 'RTF' then
DBRichEdit1.Visible := False;
end;
Cela montrera le texte richedit complet, formaté dans une fenêtre pop-up lorsque vous cliquez sur la colonne dans la grille. Lorsque vous cliquez loin, il masque la fenêtre contextuelle.
Je n'ai pas utilisé ce code, mais j'ai utilisé le "contrôle d'édition riche sans fenêtre" sur lequel il est basé. J'ai fini par écrire un contrôle TRtfLabel juste comme ça, avec une fonction PaintRTF autonome, et j'étais content des résultats. C'est la solution parfaite pour les situations de tirage au sort. –