Я забыл источник этого, но это то, что я делаю с мемо-полями в tdbgrid.
bluish прав насчет события gettext, вот как его реализовать в коде:
Создайте класс с именем MemoDifier:
MemoDifier = class
public
procedure DBGridOnGetText(Sender: TField; var aText: string;
DisplayText: boolean);
end;
В разделе реализации вашего кода поместите это:
procedure MemoDifier.DBGridOnGetText(Sender: TField; var aText: string;
DisplayText: boolean);
begin
if (DisplayText) then
aText := Sender.AsString;
end;
Затем щелкните элемент управления tdbgrid в своей форме и в Инспектор объектов (Lazarus IDE) перейдите на вкладку События, прокрутите ниже, чтобы найти событие OnPrepareCanvas. Дважды щелкните по нему, чтобы сгенерировать код. Затем измените код в соответствии с вашими потребностями, например, именем вашего элемента управления tdbgrid:
procedure Tmainui.TDBGrid1PrepareCanvas(sender: TObject;
DataCol: Integer; Column: TColumn; AState: TGridDrawState);
var
MemoFieldReveal: MemoDifier;
begin
if (DataCol = 1) then
begin
try
TDBGrid1.Columns.Items[0].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
TDBGrid1.Columns.Items[1].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
TDBGrid1.Columns.Items[2].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
except
On E: Exception do
begin
ShowMessage('Exception caught : ' + E.Message);
end;
end;
end;
end;
Переменная MemoFieldReveal указывает на класс MemoDifier. Не забудьте изменить индекс (Items [x]), чтобы он указывал на ваш индексный номер элементов / полей tdbgrid, в котором отображается текст (MEMO).