QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3120|回复: 0
打印 上一主题 下一主题

DBGrid的小用法!

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组: 万里江山

    群组: sas讨论小组

    群组: 长盛证券理财有限公司

    群组: C 语言讨论组

    群组: Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2004-12-8 15:10 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    <>var
    9 F9 D" Y+ J! ~7 G0 ^  W1: array[1..8] of Integer;
    4 Z% |; C/ ~5 a" Q9 U) B, R* s  a  W2: array[1..8] of Integer;</P>8 z6 y2 x' w/ @: j7 B! |
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    ' O4 F1 P; }' W2 w# |  h" Avar
    2 ]2 Z$ H6 I& Q  colwidth,Max:Integer;
    " k* n- i. M% V. H* S- o: tbegin7 g- b1 F% ~- @
      colwidth:=5;- m2 d3 p+ g  P$ c$ c, \
      Max:=5;
    3 ?: \9 [; P# j8 p2 ]  if not(Column.Field is TBlobField ) then
    % j9 e3 \# ~9 X% r. z    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    5 m% T) p+ ]7 D( ?- O  [  else
    0 _$ ?+ w1 T6 u  W% D# T! R' ^  begin
    ! j3 S, M  j" W* D1 b+ V    Column.width := max+50;
      ~3 B: A( B3 n    exit;
    + a# Z, ?8 x% {/ A( e8 F4 P  end;
    # j* v  q( O1 l  ?5 E/ X# v, T5 k8 F  with Tadotable(Column.Field.DataSet) do9 z6 p% M  Q9 [) h- j
      begin! C+ ^- P# O5 C+ P
         case number of
    4 D; }2 c/ G' n0 I  B- N     1: begin
    # d1 K  r+ \- U4 ?# y2 g          case Column.ID of: k) n- `( V1 t! l
              3: begin
    : G$ p5 N1 H" H4 c  i. Q! q              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then: Q# E$ O( D; Z& W( Y) L0 }& r
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 D' |$ |- `, d" c$ f* [
                  else, v' p; ?  V5 }6 K0 r- G
                     Column.width :=w1[3]*8+5;
    " ?. X% D; {3 P" z5 ]+ `             end;
    , I  }* Q9 n' {" \          4: begin8 @: d7 o, k6 p" J" j3 g
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then2 l% Y4 ^* J* @- j) |
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; H: e  f2 b9 R3 T              else
    6 F, O& m' R8 a& T. {: d                 Column.width :=w1[4]*8+5;9 h; \) M8 n3 ]0 p4 h! ~
                 end;7 V( K' Y" |8 d" i: |# F
              7: begin
    1 p5 V( o7 A, Q1 W              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then9 n; M2 C8 b2 S2 Y' I5 q
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5* f! p2 [- ~( I% z  ?& H* j% a
                  else( ~( S- h) r) |
                     Column.width :=w1[7]*8+5;1 q3 A! P8 }, G$ ^
                 end;
    4 K+ ?! @& L4 V# A* h3 D- ^          else, Z5 N' u; |2 A! B+ `# G
                 begin
    ; }' x3 L5 d- ?# q2 ?# ]               first;
    7 k8 b; t1 R) Q% s4 T' Z               while not eof do
    4 ~& R2 |  N* c               begin' x) {& _# u! e  y9 c+ Q
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);' |! {9 v) A  ?8 K7 |
                      Max:=math.Max(colwidth,Max);
    7 N5 @1 P1 X* a( I8 \: Q                  Next;7 }# H% Y9 T% P/ P
                   end;
    6 @0 r4 a# E9 N& J( P7 d               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    / ^7 r& A+ F$ h% v                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 r/ R5 X7 w0 ]3 C% }
                   else
    : s, v8 I- W. L9 n                  Column.width := Max+5;! D* d! H  g3 L& ^6 A, T
                 end;
    - H. N& E4 w( z8 |' }' Q; e7 |          end;
    ; Y& ?" l! H/ n) [2 @1 U        end;
    9 ?) \3 t1 ?! ~# e: e( s     2: begin" y6 B, N! D9 ^% |* {, c, W& J3 e
              case Column.ID of
    2 G2 ^6 l6 m9 |* l          4: begin
    & D$ i& H5 v: s2 ~) @. p" `              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    # f' v/ j6 a7 I( a  n                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; b# H: S/ R0 @# ^8 m( \              else& J: d! `4 P6 z; _; R
                     Column.width :=w2[4]*8+5;
    % t, k* P+ s, n7 @             end;- a: V  n2 y* D. \- W. S
              5: begin* ]% _# P: ]- F, [2 E
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    * K* J9 T* X+ t& U& [                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % R( H/ N2 @/ F' Z) `9 I              else% w* ^+ ]  e( t% r+ z
                     Column.width :=w2[5]*8+5;0 h$ ]6 p* J  a+ ~
                 end;
    6 _3 R4 T5 x9 Y% m          6: begin2 Q  k/ p' Z0 X: p
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then# k1 g/ V4 Y- |- r* b
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    : w3 j/ _$ y0 z- `( F              else
    - D, i, L# w' Y                 Column.width :=w2[6]*8+5;- ?2 ?; v' u* \% T" d
                 end;
    - x; S% M& H2 m0 [7 _3 Z* o          else0 R0 b. }  Q, E: r2 p4 R* b
                 begin
    ' L! V% _5 M' t' K% w- c               first;
    " H" s1 r: y0 z               while not eof do
    6 y+ A6 ^5 C( C               begin
    + ?3 y( d$ ~7 G9 k$ v- n3 p                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);' d: H0 V: W, z% Q
                      Max:=math.Max(colwidth,Max);6 C0 U" Q( _. v
                      Next;' r8 ]- u! ^- f1 [  g
                   end;& {2 Z4 R4 J: a" F# b2 j# d
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    0 _; w" f8 U7 o- e' n( r2 ~                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    8 J1 t5 X/ R4 `, ?  Z3 p  w* ~               else  H; l/ @* A! R3 T9 i: K: I
                      Column.width := Max+5;
    5 }4 ]9 a- Y) H2 u7 n  C0 Y" L0 ~             end;
      u. Q+ r1 g/ ]) p( a. k, d: ]          end;
    - x8 Q2 V* c- B. X# i) A        end;" \9 M# r8 P& X. r! K- [+ v
         end;6 h- B( D' W7 z' M0 P! J
      end;
    & o3 R3 d+ p' H) rend;</P>
    8 E) x5 T" X7 ~! _; j<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);+ \/ R1 G( C6 T. `1 c( V
    begin& u( r: e- D+ n
      Orderby(suiDBGrid2,Column,2);
    ! F7 ^# Z- q) X. ^. @9 Pend;</P>& I2 i2 z7 o5 u' b+ \- ^8 J. G
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    4 t' j( }& z/ M& f% r* i+ X" }/ ]. L  const Rect: TRect; DataCol: Integer; Column: TColumn;$ R$ x" f- t+ i) I* `8 D% a. r
      State: TGridDrawState);
    4 u( D8 m# ~  P/ f( O& {7 c! jvar
    . _, w' D# [- ~# j; W3 F! p" O% E/ L   DrawString : String;$ k1 w% ]5 ~' g1 e- ]' I1 N$ Q
       sys:TSysOper;
    ( a7 g2 G3 [* i8 L# D9 Y; \begin0 Y, r# v; j- P" V
       if (gdSelected in State)then
    % k5 r: @( r# }: i. j# I% {3 M   begin
    0 ^6 q% Y/ l5 v; L2 W5 S) T     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    , ^( n$ i% _3 e% [   end8 k7 h; i' q! u* [  l  v6 ~
       else) y$ o( A! Y; R2 U8 U& W& q3 ~
         suiDBGrid1.Canvas.Brush.Color:=clWindow;
    ; }' Q' z  v% J! c   sys:=TSysOper.Create;
    # n7 w! _& D. L- J   try
    ( R% `% W: y4 y( @9 s     if Column.Field.IsNull=false then
    : F0 q+ x" w) C, ~# N     begin
    6 O3 Y4 M& I# _2 Z6 k5 d       case DataCol of7 `- v$ d( @! k
           3: begin
    2 p" b# |) B5 F+ J2 X+ r            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。  f5 ]# Z. v% ^( ~; H
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    : w* I3 j( F3 O, j' M0 z            w1[3]:=math.max(Length(DrawString),w1[3]);% {6 g4 G( z5 C1 m% ?) M
              end;
    / M. g) }: _3 U& Q4 i       4: begin' ]5 ^' f2 w/ |
                DrawString:=sys.getLoginMode(Column.Field.CurValue);( i) X0 ^' |/ f1 J- B7 y
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);4 X, h, k: J2 A9 K
                w1[4]:=math.max(Length(DrawString),w1[4]);4 p& G8 y/ V1 @+ [* `
              end;: x+ r9 b$ V. n. q$ W, u( M
           7:begin
    3 D3 I/ `( }- H4 ~+ e            DrawString:=TimeFormat(Column.Field.CurValue);
    9 Z3 N' x& R  k4 h& R3 P            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);& E9 P" h# j+ x; q* s+ t  \
                w1[7]:=math.max(Length(DrawString),w1[7]);
    ! o& @5 \  [6 v$ {; R          end;& W3 F4 U: g; P) U) X: A8 ]
           else7 F0 Q* E+ H) b6 P5 `7 x$ v
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    5 g( x, h( s! f! ]* g       end;
    " `% n3 k/ ^" x2 I& d    end
    + a$ E$ D6 i# |$ a* T6 r, B6 N    else" n3 W$ b, L  b! P
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    % S/ d- |. `0 n4 a  finally
    ( H+ @: {0 k! ], e/ E7 N, S    sys.Free;# Z% ]! k5 p' t6 U+ v9 v
      end;7 x' R, _: @. T$ [6 g4 u
    end;</P>
    . d9 d' h# @) M+ P7 J& L<>上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P>
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-10-25 04:51 , Processed in 0.795444 second(s), 51 queries .

    回顶部