Delphi - база знаний

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


Как показать содержимое 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.Top, hStr);  {заполняем ячейку данными из memo}
    end
  end
end


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

Взято с Исходников.ru





Содержание раздела