Column height in DBGrid in Delphi

好久不见. 提交于 2019-12-08 02:38:09

问题


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?


回答1:


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; 


来源:https://stackoverflow.com/questions/8601848/column-height-in-dbgrid-in-delphi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!