2005. február 23., szerda

How to display memo fields in a TDBGrid


Problem/Question/Abstract:

How to display memo fields in a TDBGrid

Answer:

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
  P: array[0..50] of char; {array size is number of characters needed}
  BS: tBlobStream; {from the memo field}
  S: string;
begin
  if Field is TMemoField then
  begin
    with (Sender as TDBGrid).Canvas do
    begin
      BS := tBlobStream.Create(TBlobField(Field), bmRead);
      FillChar(P, SizeOf(P), #0); {terminate the null string}
      BS.Read(P, 50); {read 50 chars from memo into blobStream}
      BS.Free;
      S := StrPas(P);
      while Pos(#13, S) > 0 do
        S[Pos(#13, S)] := ' ';
      while Pos(#10, S) > 0 do
        S[Pos(#10, S)] := ' ';
      FillRect(Rect); {clear the cell}
      TextOut(Rect.Left, Rect.Top, S); {fill cell with memo data}
    end;
  end;
end;

For mouse right click behavior you need to intercept the right click mouse message.

Nincsenek megjegyzések:

Megjegyzés küldése