QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3036|回复: 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$ O/ \9 C4 u$ \  j$ J+ ?
      W1: array[1..8] of Integer;- p3 }7 S: R/ b0 r; ]$ X
      W2: array[1..8] of Integer;</P>
    * w5 z7 Z4 w0 |- Z9 t<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);/ i1 T  F' Q: D/ I. I7 s
    var7 p. T! H2 S5 a" m& \5 p( r
      colwidth,Max:Integer;
    . ^$ V2 G. R5 o" G+ I% ybegin
    9 J* n) A6 R" g( Q3 I! z  colwidth:=5;1 V6 \+ n/ ]3 ]
      Max:=5;
    $ Y7 \* a8 J0 w  X: _. k7 n* ~  if not(Column.Field is TBlobField ) then8 G# [9 `( _% p5 B5 e/ k- C
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    * ~$ m( y* h# K  else9 g# t0 P/ q8 k1 [
      begin
    . U2 l% h( j2 B% a! r( K8 H1 b    Column.width := max+50;! P  e6 e6 d8 u& L. m
        exit;; Y% B0 A- j/ R* q! p; {
      end;
    6 S9 H* r8 }0 d/ B  with Tadotable(Column.Field.DataSet) do
    ! J" T9 H7 _5 @) o8 e  h  begin' b3 h- W2 C) F/ g3 B0 v
         case number of
    * b& v8 E% f3 @+ V% p     1: begin4 V7 q! V9 w' Q6 g  j0 i
              case Column.ID of
    3 a/ P1 b4 p7 o; ~# ~          3: begin
    , u! |. z$ `! n5 G; e              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    / i4 }  T7 G/ E6 f, Z" \: e                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; P7 }+ ^' `0 L6 ]# [5 S$ F0 R8 N0 P5 J7 ]              else
    6 u+ Z! f: l; Y# q' y$ |4 P& ^9 p                 Column.width :=w1[3]*8+5;
    * Q, v4 {  |4 s( S* q3 s             end;/ D. k4 l5 k/ I" S$ `. t5 l3 R0 U
              4: begin
    - @) ~" I% v- Y  |$ S  ]; C4 E              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then: k0 F- c* o7 L0 R: H5 M
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5# g, B3 M1 e9 Z$ x
                  else
    / V! R! A2 L' e" C% C- ~                 Column.width :=w1[4]*8+5;2 H% e2 q  X3 y. ^
                 end;3 i; U5 g8 f3 s' b+ h
              7: begin8 k2 ]' Q% a4 X; X+ `
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then" w7 Z+ C% B9 Q* w: Q% m; W% q0 T/ k
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    . _* u6 i3 ?+ s              else
    1 h5 t3 B( l* m4 D) E, g                 Column.width :=w1[7]*8+5;
    * d: z, y2 u! b( t             end;
    . k; U) B5 F4 `) d          else
    1 W) S" \% W* u( c+ D& \+ o6 O             begin: L8 G/ }$ D, L6 X' }) q
                   first;
    * |# _; @: y0 j0 j" x6 Q               while not eof do2 p' K+ o6 U, b( L
                   begin2 C4 e9 E- l; d, c3 H
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" L2 m$ {. |# k2 d! C% j1 `
                      Max:=math.Max(colwidth,Max);
    7 p* o# t0 X; r% Y; c                  Next;
    , [: p9 x0 L" U: K( |; L% |               end;( s2 S+ w" d" D. [4 p& U
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then2 w/ T, |: ~) Y; k4 g
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+59 j4 P) g' G- d; j/ p# s8 k& ^
                   else6 }) Y. H! z) r# `& i+ `! p
                      Column.width := Max+5;0 o8 g* u% d" W2 n7 P
                 end;
    1 b6 K9 D0 g" l3 a* L- e          end;
    7 N* Y2 I& I: G% [; D4 R/ }# A        end;
    , z. n7 r0 ^, W& V3 c9 p! A9 f     2: begin
    9 F  e6 Y7 I0 V% ~          case Column.ID of% o/ e5 j7 J& I# \. |, D2 ~. ]1 c  `$ [
              4: begin
      l2 X1 L3 d3 g4 u* t8 T              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then# V4 n: {6 N0 _; q8 l8 S
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& |# Q0 ]0 K& ]4 f3 U9 d& G
                  else
    ! q; S/ E/ a! H" _- }& q                 Column.width :=w2[4]*8+5;
    4 B! y. v7 S: M5 v6 E# _             end;
    1 g2 e& n* w, Z          5: begin
    $ x# C, ]! L  S              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    - A0 R, \4 C8 O0 I! R                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 I/ F" J& Z! ]9 V
                  else
    3 Q+ j% @3 O8 t0 F: B5 G: Y9 b                 Column.width :=w2[5]*8+5;
    + {# T  q& i) L7 S. l$ h             end;% F& q; k& s: _. i2 l
              6: begin
    3 g4 D" v8 z! o! U, e              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    / K' ^; s0 G5 H$ J: B5 x: H                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    * x  G$ |2 c+ ~$ `4 ^              else
    1 r- [: H0 e( O2 E. x! R                 Column.width :=w2[6]*8+5;& c# [! ]  c( f
                 end;
    $ w3 c& ]) h0 `          else
    7 ?, p, Z! v8 O9 [2 Y             begin
    1 r4 j* Z3 I5 k  M               first;# p! u/ ^5 [7 e4 W- U
                   while not eof do/ K& R/ _& ?7 P7 ]5 l" Y- c6 J
                   begin
    1 R2 f6 r! Z( e; W, l* ]                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    ( a& j- [% _  _                  Max:=math.Max(colwidth,Max);: ]; ~8 _" J7 k$ t8 }
                      Next;# b( l0 O' y  w0 |& U. @
                   end;
    1 [) [# M3 h( I/ {3 e5 l# H               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    & ~9 `# `0 b, B& a9 O- D                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+57 s& z2 D0 `8 U9 p* a. X& I
                   else
    & K. W! O$ t* a) Q1 x0 ~7 ?                  Column.width := Max+5;9 Q" b# V& s+ X3 B8 Y& }! j; F8 f' d" `
                 end;
    $ I% E6 l3 u) d          end;) F) k' k" y, t! O! `: }
            end;
    . N" V: `. f+ l2 [1 F3 k     end;  v5 a) \. w5 L" e  N
      end;
    ( g9 ^. a  @3 q$ U# |, u: w  Cend;</P>
    $ V: V* V5 z) m$ i/ U<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);$ T0 z+ u2 b6 ^. s
    begin
    , O- |- X: u0 ^) N; p) M0 K  Orderby(suiDBGrid2,Column,2);+ p0 h2 i( x3 f6 T) f
    end;</P>0 S9 P6 ^! N  L, x. u  o2 N$ n5 z
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;, f0 i3 R+ l7 d4 [4 Z# J4 X
      const Rect: TRect; DataCol: Integer; Column: TColumn;6 s& k: ^! E9 |1 `! P- l
      State: TGridDrawState);* d; w8 P# _4 R3 Z( N
    var, Z$ J6 p+ H' p" a! s6 n7 h
       DrawString : String;, J2 u3 q) L1 L
       sys:TSysOper;; C# d, v# V0 [
    begin
    ( B/ X  h/ Q6 Q   if (gdSelected in State)then) G: S% p3 x0 b5 J8 ~: D8 i( n
       begin
    4 f3 f( n. I5 v, b" n' Q     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色8 l/ ~5 z9 W4 d' r% x
       end$ a& L) Y- u" Q# x' |& `+ w6 s
       else
    1 K3 ^+ J- a# t  d: m# d, ~     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    1 u6 y0 ^% G1 Z   sys:=TSysOper.Create;6 z, o  y1 M1 J% s) q* }$ {
       try+ \/ B  y" y/ f; d
         if Column.Field.IsNull=false then
    ' D' E, h; u7 H     begin5 W8 Y. J0 J2 N, _
           case DataCol of  ^$ L& i8 w6 v3 c. @5 |8 o' D) }
           3: begin( B9 c# }7 s: y' k
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。0 h; Y' ?  S, k9 S+ D& G. Z
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);0 h4 u/ b) Q4 h( p! F7 t
                w1[3]:=math.max(Length(DrawString),w1[3]);
    % c3 L$ B: ~6 h" O  p; I          end;
    1 ], K2 S; d9 F# r       4: begin  X& a& `! K; O: C. w/ w
                DrawString:=sys.getLoginMode(Column.Field.CurValue);: U; N$ c4 p0 e/ X1 ~1 b) x
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    ! ]2 B7 E" Z3 a& v7 E1 D            w1[4]:=math.max(Length(DrawString),w1[4]);
    + z% P* z7 @+ G- |          end;
    * u2 @1 i+ v. P2 D, {+ S       7:begin
    ! V- K0 @: }0 D: {: `1 b            DrawString:=TimeFormat(Column.Field.CurValue);
    1 i0 c% Y+ h8 B( X. ^3 B            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);# k8 z# J6 D9 p: C; Z# `$ p- l
                w1[7]:=math.max(Length(DrawString),w1[7]);' i; L6 b: w; R5 K( g) @+ E+ x
              end;( V0 w9 z- k4 t9 I' N: @
           else8 z1 o0 G" N! q/ a( S
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    % k7 v% T& X4 g0 M       end;7 d; W' f: z- K1 b0 l
        end) h+ f1 T$ y' F7 Q& t
        else
    $ Y4 n6 h' _$ J% ~0 l       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);8 [2 X) O( x; O; x' y
      finally
    * b: c3 l: o# o( n    sys.Free;2 S, C# `  s: k7 f2 ~& B1 N0 B
      end;
    % z& n- _; F2 j) j$ Iend;</P>- r2 x) c$ S- [* Q) {
    <>上面是操作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-4-20 06:15 , Processed in 0.312993 second(s), 51 queries .

    回顶部