DBGrid mit Memofeld

dfp

Mitglied
Hallo, habe mal eine Frage.

Bei meinem Programm bekommt man nach einer Vorauswahl (Haupt- und Unterkategorie), die entsprechenden Datensätze angezeigt.
Diese werden in einem DBGrid angezeigt.
Da zwei der Felder große Textmengen enthalten können, habe ich aus diesen Memo-Felder gemacht. Jetzt zeigt das DBGrid bei diesen Feldern (Memo) [wenn leer] bzw. (MEMO) [wenn voll] an. Gibt es eine Möglichkeit, z.b. die ersten 20 Zeichen in dem Feld anzuzeigen, und ggf. mit "..." auf einen weiteren Text hinweisen? Hoffe das war verständlich?!

Danke.
 

dfp

Mitglied
Also habe jetzt eine Lösung und auch gleich ein neues Problem... :[

Ich benutze folgenden Code:

procedure Thaupt.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
i, weite: integer;
s, t: string;
nRect: TRect;
begin
if Field is TMemoField then
begin
with dbgrid3.Canvas do
begin
weite := Rect.Right - Rect.Left - TextWidth('...');
s := Field.AsString;
i := 0;
repeat
inc(i);
t := Copy(s, 1, i);
until TextWidth(t) > weite;
t := Copy(s, 1, i - 1);
FillRect(Rect);
TextRect(Rect, Rect.Left + 1, Rect.Top + 2, t + '...');
end;
end;
end;

Das klappt auch, aber wenn ich diesen Code auf ein DBGride anwende das nach einer SQL Abfrage gefüllt wird, steigt die CPU-Belastung auf 100% und das Programm stürzt ab. Was mache ich falsch?