让delphi的DBGrid能自适应列宽

   ///////Begin   Source   
   uses   
       Math;   
     
   function    DBGridRecordSize(mColumn:   TColumn):    Boolean ;   
   {   返回记录数据网格列显示最大宽度是否成功   }   
   begin   
       Result   :=    False ;   
       if    not    Assigned(mColumn . Field)    then    Exit;   
       mColumn . Field . Tag   :=   Max(mColumn . Field . Tag,   
           TDBGrid(mColumn . Grid).Canvas . TextWidth(mColumn . Field . DisplayText));   
       Result   :=    True ;   
   end ;    {   DBGridRecordSize   }   
     
   function    DBGridAutoSize(mDBGrid:   TDBGrid;   mOffset:    Integer    =    5 ):    Boolean ;   
   {   返回数据网格自动适应宽度是否成功   }   
   var   
       I:    Integer ;   
   begin   
       Result   :=    False ;   
       if    not    Assigned(mDBGrid)    then    Exit;   
       if    not    Assigned(mDBGrid . DataSource)    then    Exit;   
       if    not    Assigned(mDBGrid . DataSource . DataSet)    then    Exit;   
       if    not    mDBGrid . DataSource . DataSet . Active    then    Exit;   
       for    I   :=    0    to    mDBGrid . Columns . Count   -    1    do    begin   
           if    not    mDBGrid . Columns[I].Visible    then    Continue;   
           if    Assigned(mDBGrid . Columns[I].Field)    then   
               mDBGrid . Columns[I].Width   :=   Max(mDBGrid . Columns[I].Field . Tag,   
                   mDBGrid . Canvas . TextWidth(mDBGrid . Columns[I].Title . Caption))   +   mOffset   
           else    mDBGrid . Columns[I].Width   :=   
               mDBGrid . Canvas . TextWidth(mDBGrid . Columns[I].Title . Caption)   +   mOffset;   
           mDBGrid . Refresh;   
       end ;   
       Result   :=    True ;   
   end ;    {   DBGridAutoSize   }   
   ///////End   Source   
     
   ///////Begin   Demo   
   procedure    TForm1 . DBGrid1DrawColumnCell(Sender:   TObject;    const    Rect:   TRect;   
       DataCol:    Integer ;   Column:   TColumn;   State:   TGridDrawState);   
   begin   
       DBGridRecordSize(Column);   
   end ;   
     
   procedure    TForm1 . Button2Click(Sender:   TObject);   
   begin   
       DBGridAutoSize(DBGrid1);   
   end ;   
   ///////End   Demo   

猜你喜欢

转载自blog.csdn.net/MY128/article/details/79699314
今日推荐