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!

È stato utile?

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 .

Delphi non ha un componente integrato che lo faccia.

Ci sono molti componenti esterni che possono farlo.

Una semplice query di Google ne abbastanza di loro.

- Jeroen

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top