Как показать содержимое Memo-поля в DBGrid.
Компилятор: Delphi
Поумолчанию, 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-поля.
|