Thema: Delphi DBmemo in Grid

Einzelnen Beitrag anzeigen

Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#7

Re: DBmemo in Grid

  Alt 15. Jan 2004, 00: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
  Mit Zitat antworten Zitat