2011-12-22 44 views
2

デルファイ7でDBgridコンポーネントを使用しています。
テーブルの列をグリッドに表示したいとします。
テーブルの列はqueryId,empid,empname and Queryです。 Queryカラムのデータ型はTextです。DelphiのDBGridの列の高さ

クエリ列には長い文字列が含まれることがあります。しかし、それは一行に表示されます。
私は列の幅を修正する必要があり、データに応じてその特定の行の高さが変わります。

DBGridで行の高さを変更することは可能ですか?Excelと同様に複数行の単一レコードを使用できますか?

+0

SMDBGridコンポーネントはRecore列をラップできますか? – Nalu

答えて

0

thisコードをご覧ください。これはTStringGrid用ですが、DBGridとStringGridはTCustomGridから派生しています。あなたは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; 
+0

返信ありがとうございます.. SetGridHeightはTstringGridプロシージャか何ですか? – Nalu

+0

私はインターネット上でこの手順のバリエーションを見てきましたが、SetGridHeight – user1355041

関連する問題