Как показать содержимое Memo-поля в DBGrid?

Поумолчанию, DBGrid не может отображать memo-поля. Однако, проблему можно решить при помощи события OnDrawDataCell в DBGrid.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const

  Rect: TRect; Field: TField; State:

  TGridDrawState);

var

 P: array [0..50] of char; {размер массива, это количество необходимых символов}

 bs: TBlobStream; {из memo-поля}

 hStr: String;

begin

 if Field is TMemoField then

 begin

  with (Sender as TDBGrid).Canvas do

  begin  {Table1Notes это TMemoField}

  bs := TBlobStream.Create(Table1Notes, bmRead);

  FillChar(P,SizeOf(P),#0); {строка завершается нулём}

  bs.Read(P, 50); {читаем 50 символов из memo в blobStream}

  bs.Free;

  hStr := StrPas(P);

  while Pos(#13, hStr) > 0 do {удаляем переносы каретки и}

  hStr[Pos(#13, hStr)] := ' ';

  while Pos(#10, hStr) > 0 do {отступы строк}

  S[Pos(#10, hStr)] := ' ';

  FillRect(Rect); {очищаем ячейку}

  TextOut(Rect.Left, Rect., hStr); {заполняем ячейку данными из memo}

  end;

 end;

end;

Замечание: перед тем, запустить пример, создайте объект TMemoField для memo-поля двойным кликом по компоненту TTable и добавлением memo-поля.

Взято из http://forum.sources.ru

В обработчик события GetText TMemoField поместите следующую строку:
Text := GrabMemoAsString(TMemoField(Sender));
и поместите следующую функцию так, чтобы к ней можно было свободно обратиться:

function GrabMemoAsString(TheField: TMemoField): string;

begin

 if TheField.IsNull then

  Result := ''

 else

  with TBlobStream.Create(TheField, bmRead) do

  begin

  if Size >= 255 then

  begin

  Read(Result[1], 255);

  Result[0] := #255;

  end

  else

  begin

  Read(Result[1], Size);

  Result[0] := Chr(Size);

  end;

  Free;

  while Pos(#10, Result) > 0 do

  Result[Pos(#10, Result)] := ' ';

  while Pos(#13, Result) > 0 do

  Result[Pos(#13, Result)] := ' ';

  end;

end;


Взято с http://delphiworld.narod.ru

1. Что значит: "В обработчик события GetText TMemoField поместите следующую строку:" - как это?

2. Ругается на "GrabMemoAsString"

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...