QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3057|回复: 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
    ; u$ N: ~# |# U! ^  W1: array[1..8] of Integer;
    2 u) [- L) N1 h/ ^3 Z# F$ j/ R  W2: array[1..8] of Integer;</P>
    1 s0 P0 w& ^% N% |" d# B; X) i<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);$ C8 e6 ]& }  V' r% M' Y! x2 O
    var
    % l$ B" t7 W, N! k1 D; Z  colwidth,Max:Integer;
    / R5 q7 U2 v2 |3 W+ Z( `  ^( qbegin
    # n) ~3 J' R6 T" P3 M  colwidth:=5;. G2 q; T/ T8 t; c2 o5 f
      Max:=5;- D4 T( a+ c4 ]& L$ P+ U
      if not(Column.Field is TBlobField ) then
    , [+ w+ N0 o' h1 W! f    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName2 M5 _' F% B" k6 d* |
      else) [7 H  d1 j/ i; i
      begin
    3 I6 h& a7 @, b' f- N/ _    Column.width := max+50;
    1 A8 ^) Z' t/ Y* {# H& C7 q8 g    exit;. W5 t% t+ N8 P- i$ ^3 b
      end;
    7 A+ r4 t$ a, @  with Tadotable(Column.Field.DataSet) do
    / g; d; l- F0 Q# m5 K  begin
    ! r& c! ~8 A% y+ r0 v; g: a2 d4 x     case number of
    8 @5 a4 q: c" f0 @$ W8 \& H, H     1: begin6 g! ~/ h, k) D) K
              case Column.ID of
    $ E+ @' ~5 D3 _+ C+ y+ p          3: begin
    3 O* p, E8 e5 A; L+ j* I              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    7 j3 U& ?6 j7 K3 H                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ( I8 f2 L% ^* B, L4 Q              else
    # h- U, x/ ]5 P* _. a/ @                 Column.width :=w1[3]*8+5;
    ( P) d- {# W/ H) Q$ a             end;
    / ]/ j& y! r& f  E! d2 I          4: begin
    ) K/ G- `& g: a; F              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then6 G2 R$ s4 W5 h" B) G5 I# e, {3 l: [4 t
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5' g8 B! I* H& x6 E
                  else) @4 J' ?- ~! X0 r/ h
                     Column.width :=w1[4]*8+5;+ i+ l$ B, I5 l3 g* U1 O; v! J
                 end;
    3 i. k$ l& O5 p) f9 X* t          7: begin
    , U! ^$ H0 `7 y+ g6 v# }              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    6 e8 O! T0 [0 j5 [8 N8 _                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% E. x# g# ?/ C2 L3 H4 c
                  else
    # G) C! a9 `& H                 Column.width :=w1[7]*8+5;
    ( D) }6 J& a9 \( y2 ~3 s             end;$ F+ U) q) u5 e( s2 K- d
              else" Q1 E# H. t9 r3 l& w% |- C
                 begin
    ( i/ h  h4 A+ t& c( I" q               first;) Z0 K$ l) E6 g* V" m
                   while not eof do( }* D2 m5 C. u, q6 K  _$ G8 l
                   begin0 s+ z% g( m9 i+ k2 _
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    6 l1 s0 u- G; Q) J. R                  Max:=math.Max(colwidth,Max);/ Z: Y5 l5 v, X# R) E
                      Next;
    ! @8 `# r! U5 `2 F+ l- D               end;8 ]$ L; S0 |% Y+ _( _
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    , f# y& }1 E( `; X0 `5 @* E                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ( [7 G5 ?$ m: B8 w5 ~. B! A               else
    ( J8 z! v  I9 j( t7 b# A: \                  Column.width := Max+5;# \) @- ]: t- C3 l
                 end;  m) S1 C5 P  f! R( `
              end;" i3 \9 f$ ^: j. y% k7 M3 }
            end;
    3 g7 c# ^9 S0 Z4 G( c6 ?7 g     2: begin
    9 J7 {- ~( A( {          case Column.ID of* D7 I$ e/ K  q2 p; ?  g
              4: begin% t3 Q- Y, H. B* Z* X) C: ~. f
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then; K  H$ H4 e* j5 G4 V
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& N  x! b# b7 p; }4 a8 y  G
                  else- L" u; }, b9 t/ H7 p$ e6 I
                     Column.width :=w2[4]*8+5;
    8 i( X" Y  Y# a             end;+ Q' O/ ^" I# ^: c1 W. ~% G, \
              5: begin
    # \) k6 a9 h- e# s+ B2 E              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* \- O( W0 Y8 t
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ! @2 i% n* m8 P6 j' \" |* g              else
      u' d; C9 v7 s, E' I  g. l                 Column.width :=w2[5]*8+5;1 a: C) [) {1 y
                 end;. _1 U3 m7 L8 e
              6: begin
    6 ^+ m3 o. `3 [* O6 z+ o1 |              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    9 Y# P9 L, `( ~, W                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5+ Q% w8 r! t5 M0 D
                  else
    - d; G2 `' Q# C& ?  l8 U' E7 n* e/ @                 Column.width :=w2[6]*8+5;5 o4 m2 J& E' D0 v' h2 h  E+ i+ ]% ]
                 end;. L5 W0 _  P; b' l6 t
              else
    ! ^  ?: w3 ^8 m$ ~             begin
    # ?# S, j( Y9 e               first;9 b2 Y, W: b1 x0 g
                   while not eof do9 c/ @( Q7 ~1 C) b
                   begin
    5 b8 z# ?9 k; a7 _: }- V/ n. A2 r                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    , n% s% j# d; s' K! B. A6 D                  Max:=math.Max(colwidth,Max);
    1 P$ v+ O+ ~5 L  Z; T" a( Q                  Next;
    . r1 O0 h0 r2 K# T) p               end;1 B+ E; F! B/ B4 K  O
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    # t5 u% e7 A- S                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5" n0 j$ B; K. _. e# R
                   else
    ) u) ]! j: ]! e" `0 w- A; ^                  Column.width := Max+5;* {0 ]  b5 A0 p% J6 m( i. G' L
                 end;
    * [+ a2 h$ v" x% M; @          end;
    ' n/ U( n/ I- k4 q        end;
    ; G. F6 @1 \# u2 m     end;. n+ P6 p0 e7 j% {; O6 A! J' @
      end;
    - C- S6 X; ]% pend;</P>1 l" a: T& L# o  n
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    2 ^' [# p7 f$ N, K% qbegin
    " Z. L9 z5 w3 r% p  Orderby(suiDBGrid2,Column,2);4 [& N. ?' U/ b$ t# O
    end;</P>
    9 Q% R, L% P3 D2 [9 x! j+ L% F<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    2 e7 ]9 S; ]1 Z+ u7 I  O  const Rect: TRect; DataCol: Integer; Column: TColumn;
    : ?& V4 S8 [  q0 w9 O) p2 H  State: TGridDrawState);. K7 k) W4 ]6 o  T: j* K, ]* d
    var
    3 ^* u: _+ v6 L; W6 e0 @   DrawString : String;7 ?7 ?$ D: r, n! J# v- l
       sys:TSysOper;$ N0 \& M5 J$ C
    begin
    ! c% L& ^" q+ |/ t& e   if (gdSelected in State)then" K' I5 J3 F7 s- B4 E! i6 ?
       begin: h) {" ~6 O- j5 V; U: h2 V$ g+ `- x
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色* p0 b6 R3 H6 D! Y
       end  q' W8 X2 D7 L1 }+ h6 Z9 x
       else
    ! N- k: h; \. S$ _: @9 N8 V' T     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    9 f1 p" _% \0 F% G4 S   sys:=TSysOper.Create;
    6 E3 {+ G; G2 U" N   try
      z8 W2 I0 M5 x+ C6 x" m' {     if Column.Field.IsNull=false then
    , H" C2 M  L  z/ c# I     begin
    / Z1 ?, V) t: Y6 A0 E! t( A) k       case DataCol of1 Z9 {7 u3 s4 M% X
           3: begin4 m1 F" u! \" P8 P& ]1 J& y. |+ K. q
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。- n# y7 `! U+ h& p2 a
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);' C$ {: Q; W, I, h$ ~, A+ ~# ]) v
                w1[3]:=math.max(Length(DrawString),w1[3]);9 O3 h0 D7 \: a* a! _$ F, r
              end;# D( ]( P8 m1 l( ]
           4: begin
    + G# Q9 l! C/ G/ F. I% S' r/ M  y+ @            DrawString:=sys.getLoginMode(Column.Field.CurValue);7 B, s* \! ?. J0 t8 p0 g
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
      D% Q6 Y# L6 f" E& a/ O            w1[4]:=math.max(Length(DrawString),w1[4]);! x. {" h: `; V/ u
              end;
    % y: |+ L* J0 W# _       7:begin2 p/ B0 L$ R( o3 S2 k
                DrawString:=TimeFormat(Column.Field.CurValue);6 U2 _4 A5 V) g: j: b5 l
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);# }% d% `# j- S7 ?* @  ]
                w1[7]:=math.max(Length(DrawString),w1[7]);
    6 S3 i4 o* h( G! Y3 U+ f          end;# o+ x) Y4 `: _1 ~' f, I
           else
    ! F, L2 ]/ O: a" ?$ i/ e          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    9 U; O1 Z. ]+ A( H       end;
    ; W! d8 ^2 S& j, w9 x' v! T9 Y) N! f1 }    end
    & k+ n. i$ y  K7 m3 S    else
    1 ], l0 g) T7 ~" h       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);: G8 [$ R: H  G$ h, ]! o
      finally
      y" P" B9 v3 F0 u    sys.Free;7 b' `2 x8 `' k3 x- b$ r9 h* e( r
      end;- {6 @' b) X0 S# ~- H
    end;</P>
    8 `- F8 N" V0 p3 @; P1 o<>上面是操作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-12 10:11 , Processed in 0.617728 second(s), 52 queries .

    回顶部