- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40957 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 23862
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 20501
- 主题
- 18182
- 精华
- 5
- 分享
- 0
- 好友
- 140
TA的每日心情 | 奋斗 2024-6-23 05:14 |
|---|
签到天数: 1043 天 [LV.10]以坛为家III
 群组: 万里江山 群组: sas讨论小组 群组: 长盛证券理财有限公司 群组: C 语言讨论组 群组: Matlab讨论组 |
< >var& j2 W; r' Y# u5 Q
W1: array[1..8] of Integer;
" b- u8 X# o4 j W2: array[1..8] of Integer;</P>5 O/ A* @5 ~ h# R1 L( ?/ f" |- P# N
< >procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
+ \6 p5 j2 h) V- @var
8 |' u7 [9 u- r( R8 U* H0 w4 I5 e colwidth,Max:Integer;
9 |' S: x7 N$ I' T% Q. r% I% Ebegin# a. U- z: @ E8 {* @
colwidth:=5;
7 F# M& Z C7 V7 q# B0 G Max:=5;( T* ~; s; @3 B# v: w, D5 ]
if not(Column.Field is TBlobField ) then
- w, l6 r4 f' c Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName( L( L6 C/ q2 ~0 R* u
else( s8 J+ T5 G7 D
begin
5 S5 m0 B/ `1 P$ x! D Column.width := max+50;
, M, f# O, O' Y J9 }& p exit;
9 ]# t V8 M* |. P u end;. f9 P2 T4 s0 U* c
with Tadotable(Column.Field.DataSet) do3 }: _+ L1 G$ q" X% J: {$ m+ {$ g- b
begin$ {* L6 `+ `# ]" z$ H- p
case number of3 h9 y! e& S1 t7 F) @4 @; Y1 L
1: begin
. ~% u5 V7 s' R1 k) B$ j case Column.ID of
, j2 J* V, P( f7 r 3: begin
' }+ A* c0 F# j if(w1[3]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then. ~1 P' V( ]1 ?1 K6 }& H
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% L- M' h: ]7 T m
else" q, A( K& S8 a4 X% @3 [
Column.width :=w1[3]*8+5;, b5 o! A. l. t# R, ]8 j# R
end;" `2 B% h- {) b3 y4 q3 L
4: begin
/ T! R- E. e5 A9 e( R M% ^# ^% w if(w1[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then" n' m( R0 U; \# }7 s5 ^
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 d. Q& i. T+ s; L, u* s9 b, @
else$ i8 L+ b Z8 N/ N- I
Column.width :=w1[4]*8+5;
& B1 t5 [! K9 t, J2 c# P8 s3 W/ O& Y end;% `2 @" f; H$ I6 o* w( Z+ E7 L' ]
7: begin: H. Y: y$ ?; Q, S
if(w1[7]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then# o% S& X0 E7 C. e& a! s
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5, n) l* f; T _2 J
else
5 {" O# H. u0 \2 [5 w' D0 M Column.width :=w1[7]*8+5;* j; b/ e$ p2 S8 j
end;
: [6 Y; I6 I$ v8 r else
+ r6 a. o$ B: v0 n$ [ begin) m1 D/ l& P& `
first;
1 Q" |. J% I ~1 D% u while not eof do
# ]- [. X5 v% P& \3 y8 X& e begin
7 B F3 J0 `# T9 a( R% e7 Q colwidth := grid.Canvas.TextWidth(Column.Field.AsString);2 S- p" ^* `5 E' b! ^/ [ s4 G7 j
Max:=math.Max(colwidth,Max);; y; @/ x$ v+ ~. ?% O$ L
Next;9 T8 S% }* }8 @ t: o% o2 `/ Y
end;2 d; b2 k L t0 E( z% {
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
+ o: Q0 R, |2 i, o7 E; G Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
3 u0 h/ t0 x w) W" P) r else0 U; z" l+ c# b8 `' ]' D5 h
Column.width := Max+5;+ o1 C9 G8 T3 U& P( E
end;
, P: a* {- i* A! w5 i5 ~2 D end;/ i% {4 D! q7 K( F
end;
, c& ^ {' `, Y 2: begin6 T6 c/ W$ P1 b7 x/ |; x
case Column.ID of
3 I% v- s4 g& a# u5 s& l/ \1 k 4: begin, W2 l/ W6 C, m2 V
if(w2[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
1 ?9 K& U$ g6 g0 {0 W( Q7 s Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
9 v, \) D4 a0 p: @, a4 Z7 y/ ] else
3 N0 h: R! Z ?( B3 P- _ Column.width :=w2[4]*8+5;
4 a- a, \7 z; j end;3 K5 V: S; b" p7 B+ z0 g& f
5: begin. R. p5 I J! F
if(w2[5]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then& D& l1 J, L* L& }
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
0 c6 b: K3 @- C$ _ else. ?8 \4 s# Z% c; v
Column.width :=w2[5]*8+5;8 @9 P0 J0 {' } N: _8 k
end;: W( ]$ ~/ x4 \
6: begin4 f% A7 u9 n% R% Y5 c) g: v$ g
if(w2[6]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
4 t' Z% v5 W7 e Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& i! p/ h( _$ \+ E0 E
else
, m/ j5 I3 M" k4 L9 h4 U Column.width :=w2[6]*8+5;
j3 R5 h$ g* { I7 W( F end;
K" h! S" [& w4 _' I+ ]. S else
9 r. Y7 M7 c( z' j w7 j2 U; q, \ begin
. `( l( q1 `8 _8 M w* C+ y first;, e$ Q' v+ D5 u
while not eof do7 F& ]: E: Z: v9 l$ K7 `
begin" x5 H5 [7 F! a' K
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" X, ]' c O3 |# y% @# D
Max:=math.Max(colwidth,Max);
, D! B3 E* ~" P% r3 k' N Next;
/ X) Z/ N0 n0 @* q end;3 S, r/ ?& X+ A, p
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
. M! M( B& F# M5 n. ]; @ Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
$ A- C& }. B9 n! ], e! m O else5 D& k3 k. L7 @- Z3 _
Column.width := Max+5;7 B1 y6 h+ z# I$ |' F+ s
end;
3 ?+ p) ?6 b; r8 y- b8 ? end;" u0 F4 [4 B3 |# B5 K2 |
end;& L4 M7 u. p* d5 Z1 W+ X
end;' f6 e- b$ S3 e& _1 {% g8 Z
end;- Y- u1 z6 z N7 O2 M
end;</P>
+ n( s! Z# x3 X _5 A( O! \0 ~< >procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);) w* R c. B: m+ t
begin
8 Q5 K# ^; X" U; H4 ? Orderby(suiDBGrid2,Column,2);
$ W; u) [/ f7 gend;</P>
* w4 V/ i, P7 M& }- }: H) q< >procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
+ k0 i8 b* Z6 B const Rect: TRect; DataCol: Integer; Column: TColumn;0 b* L1 m( e8 O* S* C/ s1 j
State: TGridDrawState);
( s/ ]9 f7 E+ T. i, ^' q% n- }var
3 W2 {. l% D3 Z) ^/ F* Q DrawString : String;
, n+ T9 `; q. y8 }! w- R* G sys:TSysOper;
3 n5 r/ P) L/ V* sbegin
, S) X/ b) {) J! x; \) V! {. \, R if (gdSelected in State)then
/ }; k7 @; I2 U5 n begin- v" w: D% o N* E# p
suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
, v1 t) e, \5 E3 P, e9 g4 l- Q& g end. y/ O3 k' z9 \5 U
else
' Y4 s8 W$ l T l2 ^. q suiDBGrid1.Canvas.Brush.Color:=clWindow;
9 {. U% i* ^4 C# h$ H2 C0 H sys:=TSysOper.Create;
5 Z4 f6 e. j) B% f% a try
' K: |$ F& A5 i7 ?! J0 P/ B2 w4 S if Column.Field.IsNull=false then! y' f+ }6 @: t4 F8 G, z
begin' y z7 u4 k7 e9 d4 t! d
case DataCol of& d/ f" G, {: p0 B, d1 ?
3: begin% g6 C9 k- B9 N! C
DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。; k, @: W5 \# c8 k; M
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
; n7 O3 ^0 \* }% | w1[3]:=math.max(Length(DrawString),w1[3]);
+ l& F- F" A* w' Q0 z. T end;
7 n3 z1 V9 j1 b8 }, `6 o 4: begin( u$ O# s6 J! ^( Z1 {8 X; N
DrawString:=sys.getLoginMode(Column.Field.CurValue);
# u9 s$ j$ Z2 \( H suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString); X! Z0 G. e3 U
w1[4]:=math.max(Length(DrawString),w1[4]);
- C$ T$ D6 }. G4 S& e2 q end;
7 m ?1 \8 r( G+ ^/ a# Z 7:begin# G" e7 b9 E+ c- R& a! n
DrawString:=TimeFormat(Column.Field.CurValue);
! f: n$ f8 a( h5 T z suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
3 ^: B. f+ Q" V4 ?, b- y w1[7]:=math.max(Length(DrawString),w1[7]);3 a& g( d8 o" ~# z% S4 X) u9 R
end;
/ g4 ?1 \ | |) f, X8 h3 N else( N% g% U6 D: s; [ @- r% z! J% d
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);1 D2 n5 c R7 I# p! }# M, z
end;' {* B9 f/ O- h f+ E6 q. H
end
! z [8 c Z5 L5 O6 l else. R8 Q+ |, k/ e* K6 D; `% F
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);& O1 j% h: j! Q5 Z! t9 U
finally x- s5 g5 T; `6 x# u) y
sys.Free;
" i4 }( O, C" Z, @; R end;
& C/ v( H; j# n; v; R9 m; u/ B% Eend;</P>- c# h8 F% v7 A3 n
< >上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P> |
zan
|