Announcement

Collapse
No announcement yet.

DBGrid Schneidet Wörter ab

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBGrid Schneidet Wörter ab

    salut, <br>
    ich habe das problem, dass in einer spalte <br>
    des dbgrids unter umständen der inhalt nicht<br>auf max. groesse der spalte angezeigt <br> wird, weil das dbgrid automatisch einen zeilenumbruch <br> erzwingt. erst wenn ich mit dem cursor<br> auf dem satz stehe wird der inhalt<br> in der kompletten spalte angezeigt <br> gibt es eine option, die es ermöglicht, dass IMMER der gesamten <br> inhalt einer spalte gezeigt wird ?

    <br> <br>
    mfg<br>
    sascha lohaus

  • #2
    Hallo Sascha,

    wusste gar nicht, dass TDBGrid einen automatischen Wortumbruch hat...

    Folgende Lösungsmöglichkeiten für Dein Problem fallen mir ein:

    <B>(1) Delphi-konforme und sauberste Lösung:</B>
    Setze das Property DefaultDrawing auf false und nimm die Ausgabe in den einzelnen Zellen über das Event OnDrawColumnCell selber in die Hand. Der Eventhandler wäre sinngemäß folgendermaßen zu schreiben (ohne Gewähr, nicht explizit getestet...):

    <PRE>
    procedure TForm1.DBGrid1DrawColumnCell(Sender:TObject; const Rect:TRect;
    DataCol:integer; Column:TColumn; State:TGridDrawState);
    const
    AlignmentFlags : array[TAlignment] of integer
    = (DT_LEFT, DT_RIGHT, DT_CENTER);
    var
    txt : string;
    R : TRect;
    Flags : integer;
    begin
    if not Column.Field.IsNull then begin
    txt := Column.Field.AsString;
    R := Rect;
    InflateRect(R, -2, -2);
    Flags := AlignmentFlags[Column.Alignment]
    or DT_SINGLELINE or DT_NOPREFIX;
    DrawText(DBGrid1.Canvas.Handle, PChar(txt),
    Length(txt), R, Flags);
    end;
    end;
    </PRE>

    <B>(2) Hacker-Lösung:</B>
    Wenn Du den Quelltext der VCL-Units hast, könntest Du auch die Unit dbgrids.pas editieren. Wenn Du die bearbeitete Unit in Dein Projektverzeichnis kopierst, bleibt der Rest der VCL für alle anderen Projekte von der Änderung unbetroffen, und das ganze ist relativ risikolos. Also: Die Textausgabe für die Zellen geschieht intern in der Routine "WriteText", bei D6 ab Zeile 2150.
    Ersetze in der Deklaration des Konstantenarrays "AlignFlags" jeweils den Ausdruck "DT_WORDBREAK" durch "DT_SINGLELINE".

    <B>(3) Externe Lösung:</B>
    Das TExDBGrid von GJL Software (www.gjl-software.co.uk) bietet eine abschaltbare "MultilineRows"-Option. Freeware inkl. Source

    Gruß, Werne

    Comment

    Working...
    X