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

Previous  Top  Next

    
 

 

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

Code:

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-поля.

 

©Drkb::03016

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

 

 


В обработчик события GetText TMemoField поместите следующую строку:

 

Text := GrabMemoAsString(TMemoField(Sender));

 

и поместите следующую функцию так, чтобы к ней можно было свободно обратиться:

Code:

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;

 

 

 

©Drkb::03017

       

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