Come visualizzare rich text in un TDBGrid?
Domanda
Ho una tabella con un campo RTF al suo interno.
Come posso visualizzarlo in un TDBGrid in modo che mostri effettivamente il rich text e non solo (FMTMEMO) nella colonna?
Non voglio davvero usare un componente di terze parti per questo.
Grazie!
Soluzione
Ho fatto un esempio molto rozzo per te che funziona, che puoi quindi provare per cercare di migliorare di cui hai bisogno.
Rilascia un controllo TDBRichEdit sul modulo e imposta la proprietà Visible su False. Impostare le proprietà DataSource e DataField per selezionare il campo appropriato.
Dire che il nome del campo che contiene il testo RTF è chiamato " 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;
Questo mostrerà il testo richedit completo e formattato in una finestra pop-up quando si fa clic sulla colonna nella griglia. Quando fai clic, nasconde la finestra popup.
Altri suggerimenti
Non so se questo è trasferibile alla tua situazione, ma una volta ho usato OwnerDrawing per ottenere rich text. Se questa è un'opzione, controlla DrawRtfText nell'unità DrawRichText .
Se vuoi solo il testo nella colonna, il modo più semplice sarebbe aggiungere un campo calcolato al tuo set di dati di tipo String a una lunghezza ragionevole (diciamo 80) e nell'evento onCalculate per il set di dati tirare il testo normale dal campo RTF nel campo stringa. Utilizzare il campo stringa per la visualizzazione anziché il campo RTF.
Se desideri tutta la formattazione, questo diventa un po 'più complicato in quanto non esiste un supporto componente predefinito per il rendering di dati RTF diversi da TRichEdit e dai discendenti che sono wrapper attorno a un controllo Microsoft. Dovrai eseguire una gran parte dell'analisi RTF e utilizzare l'evento OnDrawDataCell per colorare il testo nella cella. Se segui questo approccio, il documento delle specifiche RTF sarà di grande aiuto.