简体   繁体   中英

Column height in DBGrid in Delphi

I am using DBgrid Component in delphi 7.
I want to display my table columns to grid.
Table Columns are queryId,empid,empname and Query . Query column has datatype as Text.

The Query column may contain a long string. But it's displayed in a single line.
I need to fix the width of columns and depending upon the data the height will vary for that particular row.

Is it possible in DBGrid to change the height of a row like it allows multiline in single record similar to Excel?

Look this code. It's for TStringGrid, but you know DBGrid and StringGrid are derived from TCustomGrid. Sou you can use the code for DBGrid.

procedure DrawSGCell(Sender : TObject; C, R : integer; Rect : TRect; 
          Style : TFontStyles; Wrap : boolean; Just : TAlignment; 
          CanEdit : boolean); 
  { draws formatted contents in string grid cell at col C, row R; 
    Style is a set of fsBold, fsItalic, fsUnderline and fsStrikeOut; 
    Wrap invokes word wrap for the cell's text; Just is taLeftJustify, 
    taRightJustify or taCenter; if CanEdit false, cell will be given 
    the background color of fixed cells; call this routine from 
    grid's DrawCell event } 
var 
  S        : string; 
  DrawRect : TRect; 
begin 
  with (Sender as tStringGrid), Canvas do begin 
    { erase earlier contents from default drawing } 
    if (R >= FixedRows) and (C >= FixedCols) and CanEdit then 
      Brush.Color:= Color 
    else 
      Brush.Color:= FixedColor; 
    FillRect(Rect); 
    { get cell contents } 
    S:= Cells[C, R]; 
    if length(S) > 0 then begin 
      case Just of 
        taLeftJustify  : S:= ' ' + S; 
        taRightJustify : S:= S + ' '; 
        end; 
      { set font style } 
      Font.Style:= Style; 
      { copy of cell rectangle for text sizing } 
      DrawRect:= Rect; 
      if Wrap then begin 
        { get size of text rectangle in DrawRect, with word wrap } 
        DrawText(Handle, PChar(S), length(S), DrawRect, 
          dt_calcrect or dt_wordbreak or dt_center); 
        if (DrawRect.Bottom - DrawRect.Top) > RowHeights[R] then begin 
          { cell word-wraps; increase row height } 
          RowHeights[R]:= DrawRect.Bottom - DrawRect.Top; 
          SetGridHeight(Sender as tStringGrid); 
          end 
        else begin 
          { cell doesn't word-wrap } 
          DrawRect.Right:= Rect.Right; 
          FillRect(DrawRect); 
          case Just of 
            taLeftJustify  : DrawText(Handle, PChar(S), length(S), DrawRect, 
                               dt_wordbreak or dt_left); 
            taCenter       : DrawText(Handle, PChar(S), length(S), DrawRect, 
                               dt_wordbreak or dt_center); 
            taRightJustify : DrawText(Handle, PChar(S), length(S), DrawRect, 
                               dt_wordbreak or dt_right); 
            end; 
          end 
        end 
      else 
        { no word wrap } 
        case Just of 
          taLeftJustify  : DrawText(Handle, PChar(S), length(S), DrawRect, 
                             dt_singleline or dt_vcenter or dt_left); 
          taCenter       : DrawText(Handle, PChar(S), length(S), DrawRect, 
                             dt_singleline or dt_vcenter or dt_center); 
          taRightJustify : DrawText(Handle, PChar(S), length(S), DrawRect, 
                             dt_singleline or dt_vcenter or dt_right); 
          end; 
      { restore no font styles } 
      Font.Style:= []; 
      end; 
    end; 
end; 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM