QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3062|回复: 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" X; M$ S* x( V
      W1: array[1..8] of Integer;
      V; h5 v# z" I! G' w  W2: array[1..8] of Integer;</P>2 A0 S0 o) f  W% S
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);7 t! X! l) L9 _; E" p/ q4 y0 @& k
    var: s, A! y, Z) i# A! T
      colwidth,Max:Integer;" N8 R% W8 V8 m3 ~3 j- n$ l$ j4 P
    begin
    ' Z) L" c0 O2 q2 g& B2 J6 L  colwidth:=5;0 w# M4 I/ f# x/ N* Z
      Max:=5;, r7 b, f& A# w, H
      if not(Column.Field is TBlobField ) then: U* l  ?$ g3 @) S* H  n
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName% ~7 C6 b$ E$ s! y/ L
      else/ y7 W8 @, E& s: w/ E- n
      begin
    9 L8 C2 R7 w3 R    Column.width := max+50;) w3 `! ?& Z7 k# Y" Y
        exit;
    ( ?/ P0 P6 t! X0 c. b8 ]* I5 J  end;
    * [8 x% m- R( ~  `4 w; x3 M1 }  with Tadotable(Column.Field.DataSet) do: A8 w1 K; Z/ j7 T
      begin: Q6 S- o# g7 c% f3 F
         case number of
    6 B3 F) f* q0 }7 P     1: begin, @3 r8 b3 C; [$ x/ Q
              case Column.ID of
    . W' u6 h3 b3 h) ]  h8 n          3: begin
    0 C, A! {- T7 J$ Z              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' S0 ~9 |, I& j! C                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+53 K0 L8 f" M4 u
                  else
    ' Z3 g/ y: t" i0 R- W+ V  A; u9 t                 Column.width :=w1[3]*8+5;
    , q. W/ Z8 ?/ h5 w9 b" X             end;
    4 h  Y( v( {! L0 f. u; f          4: begin6 U. S* I) [5 O* H- x
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then3 V" Z2 k* K8 U
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+58 [" k0 N% [/ L  y- n; o/ l
                  else
    0 |2 ~$ c( Z: x0 d                 Column.width :=w1[4]*8+5;
    6 t' c! {3 w" a+ G7 A$ O" w9 R, k             end;( z# e4 W( u- t) n' v$ d! p/ Y0 x
              7: begin
    8 X. x+ }) l- M- J) h1 d- G              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then, `6 q8 M8 ^" `* y1 ~
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- K, _- f$ J3 _6 c, T5 ?
                  else2 @3 O6 Y: o2 l/ w/ S# B9 x
                     Column.width :=w1[7]*8+5;
    2 W" L# o& c- @- Z% R# M# }             end;- k. T# G1 @* X; ^) q, o% N
              else
    - |7 K6 W& Q( b3 E" {$ _' T             begin, N3 M) V* T! j+ }) W0 F# u: B
                   first;
    1 p( m, h, s' x+ j               while not eof do
    4 p2 w* y0 o% v6 G! e' @               begin0 @+ D- \* e* F# @' Q, i2 _
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    ; z' Y( t  W  N0 M9 S3 p                  Max:=math.Max(colwidth,Max);
    . e" t8 u! d9 v" x% R  \                  Next;
    / e& s/ w& t2 O; q9 F; [: K               end;" C: I; `; z- z9 N' F+ V
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then' o& o+ |' d- S( r8 o" h/ p5 z
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    * w" u  E6 e  ~               else
    1 S" g9 R, M6 D$ e( {- u$ A                  Column.width := Max+5;
    : M! I9 {# F; Z0 k( }, k9 a             end;
    8 `/ M9 X" c' v  e. K& h2 Q4 x4 s          end;
    ; I" i  m1 W+ M; P1 C- N( q        end;
    4 M3 |* n& C4 H! |; K     2: begin
    ' n0 m) Q$ k1 [! o) [, e* h- Y) Q          case Column.ID of5 C7 ?* o1 w' e& D4 n
              4: begin
    9 `# F# h( S$ p' G0 H              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* I" @# J: i: l0 q$ s
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ! y/ e1 w$ R# E6 Q2 b; L' Y              else. K% }4 g5 `& ]7 ]
                     Column.width :=w2[4]*8+5;( U- \; K  W8 S, Y1 E9 z7 N
                 end;
    ! n; a5 V9 U; s9 H1 V0 }7 d3 V          5: begin
    0 l. K  x* r! v. G              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    7 ]; u2 J7 R* {$ {4 M3 k; A% [5 q. x                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % q( F/ E* p' o9 u              else
    # T' H9 k9 V1 f% k( Y1 @: E                 Column.width :=w2[5]*8+5;
    1 I) _8 l$ P% \) I- d             end;
    - J0 T; x; U& U3 P& ~7 ?          6: begin) \& l; E, C, r- ~8 G; w4 }
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then2 e* Q2 ?: W0 b  K" u4 V& D
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ R9 _2 Q. r9 X) H6 u* Z( R9 I
                  else; F/ q$ C% @' o7 ?: f5 O
                     Column.width :=w2[6]*8+5;1 }7 I. n: L' `( N
                 end;
    - [; J& P3 x4 @7 G8 I2 \( [3 o/ c          else  t* b' `3 G( b" m
                 begin
    " P1 `7 Y1 _8 [; f- G5 w               first;
    ( ?6 R1 ~3 h8 o, v* J               while not eof do( |- [$ O0 M. q* L1 k! p$ \/ H
                   begin
    : ~, `1 s3 x' |) v                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);  U  ]# \, C! I8 C
                      Max:=math.Max(colwidth,Max);0 ?: `$ a8 ~+ z" ]. T% O) U
                      Next;# P! y, s8 k' s, b: K: S  H
                   end;! [1 w5 {( T! t% B. S& z$ d
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    * n  s; E+ [- e+ \                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5; A. j# q4 _- S, N: X0 j! P
                   else
    ! E( d1 l, L0 H. I0 m                  Column.width := Max+5;  k# G1 w9 r# i! m- D  d
                 end;
    ' R. N. [; R: |+ G* v& V; ?          end;9 t" F  q$ _$ s+ F
            end;" d3 s/ l1 f3 P+ l, x% f2 P8 ]( M
         end;
    $ @: c  A/ f# x8 Z/ ^" j  end;  r: D, {) }* m6 [! A  ~
    end;</P>
    - m+ e. ^. d# a+ j7 U<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);* y$ }2 U1 ?- r5 t
    begin7 }, U% ^. |6 z6 s6 X8 r
      Orderby(suiDBGrid2,Column,2);7 `+ `4 [- l6 l$ r
    end;</P>
    , E% `/ s1 G8 t<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;; ]) l. D8 _  ?3 p
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    $ J1 e, |2 p0 z$ J) j. x  State: TGridDrawState);
    7 W1 D9 C& Q5 ]" g' K, Q4 Uvar8 C6 M; v% B! d) X
       DrawString : String;1 C) h* \8 P7 F6 V! O
       sys:TSysOper;3 o! S7 ^6 G- Y2 S. `! @
    begin& j: D6 p' x7 J* p% L
       if (gdSelected in State)then/ g4 S3 ]- _% L- R8 J
       begin
    ) b7 G8 \# y9 d( v' C) s1 Z     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    : I$ p; p% K3 `; O% R& v& k; h7 M' o   end
    # @; @' d0 [3 W) M3 P   else
    3 F% R' l: r6 Z/ _4 m6 d     suiDBGrid1.Canvas.Brush.Color:=clWindow;9 S& Z" _' y# B0 B( O3 s- Z3 P' z
       sys:=TSysOper.Create;' O" _& \5 I" E0 d4 q
       try% I9 g2 _* h& c& [# ]( {( I
         if Column.Field.IsNull=false then
    - y; F. U2 b% N" p) D     begin* k8 e% Y8 m4 P+ C9 l9 m1 t
           case DataCol of
    ( J* J. P" \! H/ }7 ?- W: ]       3: begin
    ( t& g( B, t+ m            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    2 p. }0 ]  ~+ T6 t) j            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);" t6 ?/ D) h! x) L1 Z! `
                w1[3]:=math.max(Length(DrawString),w1[3]);8 U7 k% ~! j+ j
              end;2 H& L$ Q/ m( K  v
           4: begin; c5 \4 n% \) C- S' G2 x
                DrawString:=sys.getLoginMode(Column.Field.CurValue);; f3 {1 Q3 V$ u, q8 t" ^
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);/ }/ z: ?2 O+ t, S6 e$ Y' {7 c
                w1[4]:=math.max(Length(DrawString),w1[4]);
    & I& e$ c' f5 Z) x. t0 v5 [% b3 p! l          end;
    2 ?& d8 z( N, W/ H7 t& b' y0 Y       7:begin
    8 x' o6 n3 o5 r: V' c. t            DrawString:=TimeFormat(Column.Field.CurValue);" F9 E/ A$ k+ Z! ~6 S9 o' z3 s8 m
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    - z# l% e2 }% D1 g0 ?% a$ `  i' e            w1[7]:=math.max(Length(DrawString),w1[7]);
    ( r8 o; N) z7 j7 W  O, e" k! {  x          end;
    % C# j% n# e$ d  Y2 c, Y3 I       else
    / x0 Q5 L( c/ }          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    4 A! q( u; X! @( W# {0 Z0 q       end;) n, i( m+ j0 }8 ?" n
        end
    6 o0 e: w% n1 Y: \    else& O+ k5 V7 O- v% ~2 @) `$ y! W; ?
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    ) M) \$ {2 a. A: s/ S$ ?' M' |  finally
    8 I, _2 p; ?8 Y1 \6 y9 R, a    sys.Free;: J/ d' C0 l( S  ^0 H. I  W( S" |
      end;8 j& m' ]# S% J  `* B
    end;</P>: D" I- X) ]& G% Z7 V$ f1 f) r) s
    <>上面是操作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-6-14 03:24 , Processed in 0.417075 second(s), 51 queries .

    回顶部