Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
Delphi 5 Professional
|
Re: DBmemo in Grid
15. Jan 2004, 01:18
Hallo Hansa,
hier noch eine getestete Variante.
Code:
procedure TFDaSi.dbg1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
// Es werden die ersten 35 Zeichen des Memofeldes ausgelesen
iDisplayWidth = 35;
var
i : integer;
szTxt: array[0..iDisplayWidth] of char;
aBS: TBlobStream;
s : string;
sTxt: String[iDisplayWidth];
vTBlobField : TBlobField;
begin
vTBlobField := TBlobField.Create(Self);
{muß für jedes Feld der möglichen Tabellen einzeln definiert werden,
funktioniert also nur, wenn man genau weiß, wie die Felder heißen}
if Column.FieldName = 'InklFilter' then vTBlobField := Tab1InklFilter;
if Column.FieldName = 'ExklFilter' then vTBlobField := Tab1ExklFilter;
if (Column.Field is TMemoField) then begin
aBS := TBlobStream.Create(vTBlobField, bmRead);
FillChar(szTxt, SizeOf(szTxt), #0);
try
aBS.Read(szTxt, iDisplayWidth);
finally
aBS.Free;
end;
s := StrPas(szTxt);
sTxt := '';
i := 1;
while not ((i > length(s)) or (length(sTxt) >= iDisplayWidth)) do begin
if (ord(s[i]) > $20)
then sTxt := sTxt + s[i]
else
{nur wenn nicht zuvor bereits ein Leerzeichen steht}
if (length(sTxt)>0) and (sTxt[length(sTxt)] <> ' ')
then sTxt := sTxt + ' ';
inc(i);
end;
with (Sender as TDBGrid).Canvas do begin
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, sTxt);
end;
end;
end;
mfg
eddy
|
|
Zitat
|