- 在线时间
- 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
5 _, p# t1 l. }* |, l) K) y: n+ P W1: array[1..8] of Integer;4 V* W q, d# B W6 A# M6 ^
W2: array[1..8] of Integer;</P>
! x5 @: S: t: \! }2 j6 c2 i& i# B, ]7 D< >procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);9 V% s+ M* N+ v# Z& ?' u5 x" B; z
var4 y4 p, D! p1 v# n# u" ^& r
colwidth,Max:Integer;
' c; g- b! s/ D* V5 X. O- }begin
0 R* G6 _$ g8 F. ?& @9 W colwidth:=5;
4 z' S/ o4 r+ u$ W( Y4 v Max:=5;
7 J, N7 a& M- [2 O3 E+ B) w: \ ]7 E if not(Column.Field is TBlobField ) then( c) l, I/ Q7 i. H+ |7 P8 ?
Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
$ M4 E4 W9 D% a else
6 Z: v. h0 G& T' b& R8 K/ I0 j begin' S/ D! W2 f& y7 A; ^
Column.width := max+50;
& ^6 E5 |% A+ F, E- G exit;) {* z5 ]( F" W+ K
end;
6 i" s# S) q1 l: P7 o, D) z# }: z" | with Tadotable(Column.Field.DataSet) do
3 w( r6 W" y* ]" Y3 j begin
4 r, r; Y U) o+ | case number of
( j) e! E- T3 ?0 o 1: begin! \6 n; i3 I" c
case Column.ID of
1 t6 ~* e" x1 Q& p" p0 ^$ u8 B 3: begin3 E, Y+ H* b+ M4 s) Q7 k
if(w1[3]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then9 L$ Q$ w$ M! K4 U8 f- m
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5 i2 Q' r1 X# h8 n
else
4 F, ]9 f4 K6 M8 K S3 R/ l Column.width :=w1[3]*8+5;$ J1 z+ j" N+ T8 V# }( I; o* _
end;
( L" {: @1 }+ u* L; y3 _3 E 4: begin
3 @1 O+ m9 C0 H% b if(w1[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then3 ^( L' Z0 P4 I) `
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& y# W1 b X! ^% _' c# N9 `5 T2 o
else, {; z* X# }3 S" }, k* y" ]
Column.width :=w1[4]*8+5;
* F- W2 J# e# A( Z' x, Q end;
5 K( @7 |8 p/ j. w 7: begin( E7 C2 T5 y; i. _5 y* Y
if(w1[7]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
' y6 H$ p' [9 g Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- c% g5 e6 I0 e: ^* U% \
else
. | {5 d# `# y, h; W5 i$ R Column.width :=w1[7]*8+5;
9 ~/ N5 y+ ~4 \. k) a2 J6 V. g end;
7 A! C; w8 X7 C: k* S) R else
3 Q3 S. T/ x) h1 e8 C3 f [4 u' O begin8 I2 }# q7 [0 m
first;5 `$ [, K* y) j! ~
while not eof do
4 T; [7 t. V% s o1 p* K begin5 V8 B6 g! L* r& e, {6 U0 k
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);+ F( ]) |4 b4 L: H) e% f8 u t
Max:=math.Max(colwidth,Max);
4 E6 ], M* G: Q. }# d! F Next;6 g- H. X l) v1 V# d* u
end; d$ G/ S' _! Y. O7 o, V8 Q. {
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then' U8 m7 t$ R& H' K) a- C1 f
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
# Y1 ]- G& z7 ]# y! J j else: ~1 e3 }& X. v
Column.width := Max+5;
# `3 G% T$ d& s" [% e end;
$ |0 B( _, y* A end;! \: X: f9 Q# a) s% y
end;
! y8 P. W( j6 e$ s" h5 G 2: begin
; Z3 f* J |6 `! h& d case Column.ID of
6 j X( a9 S7 p: A# h, | 4: begin
& p5 l8 n" `( q if(w2[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
E: [4 F% u5 z% U Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+54 z5 w# j: w/ P) C. }; x
else: Z! m/ D9 L$ g) B5 k
Column.width :=w2[4]*8+5;
% g1 ]0 l$ x1 n) k" c end;
! Q5 M8 |8 z; }7 X 5: begin
+ D. y) i8 `3 Q% p if(w2[5]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
% y4 P' c5 w+ S3 k# E* B; T9 @ Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+52 u0 H3 l1 i& ]* t1 b# K/ K
else
0 c3 ^! s4 g2 M& } Column.width :=w2[5]*8+5;. A2 |) I/ Z/ d% c M) Y8 ~ g
end;7 a, k. c6 M) E. Y% Q0 V7 t
6: begin. |( v) ?, |5 p/ j( {, N
if(w2[6]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then( w$ J4 a2 h* W7 F) b$ W
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
% b3 v8 j6 }6 R7 D, `4 h5 x/ o, B, o7 J else
o( W- U! g. \ G1 x/ Q; S ^ Column.width :=w2[6]*8+5;
( n; S% T6 |% ]% x# {5 i: m end;3 Q, `8 e! T ~+ J$ Z
else" _& U3 P8 L) s" `# t
begin1 W2 i( v5 y) l
first;
: U1 I7 g7 f4 o- s7 C while not eof do1 J: m/ U4 S, n) i
begin) N) O* |" G( A5 x9 a5 a( |5 N
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
* l1 x* k9 s: t" ?0 O Max:=math.Max(colwidth,Max);
: S' z- Z/ n% {$ ^9 H: g Next;6 b; E( l; I% s
end;
; X4 `$ p8 t5 g if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
3 B5 }2 i* K, E: i+ s Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5 ?& v- d! j4 Z: {1 W
else4 F ^. g8 M4 }" \
Column.width := Max+5;
9 o6 A* q' c9 B end;+ l: @) U/ p% D d7 q0 \
end;
, m, w! {) y5 {3 Q end;
6 |) r( h2 M, L& h* D end;9 G9 I1 Q" x/ C3 x
end;
* O: N* y/ g/ y$ o5 [end;</P>
/ d6 f1 X# Q' z; |< >procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
. C4 X9 }/ P& f+ Fbegin) \( x+ t3 `& W
Orderby(suiDBGrid2,Column,2);( P) H7 ^ \# d. `9 C
end;</P>/ ?% X% _( W9 d1 r+ V
< >procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;0 v6 i, {1 x! W) F
const Rect: TRect; DataCol: Integer; Column: TColumn;6 |/ `& O7 P, X5 ]4 Q
State: TGridDrawState);
3 f3 r+ K7 L& C; J4 c7 |! P# p evar! O+ B5 p: J0 {) y3 C/ P+ n
DrawString : String;
' {* N$ @! q9 j- A6 K! H sys:TSysOper;% R1 e& U2 S& e+ B
begin% z! k3 j: T: \5 t, P
if (gdSelected in State)then
( _6 T* {$ Y+ f9 k( Z+ j) P begin& Z% h% w/ w) Y5 l7 U- d
suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
1 V7 X. e% O4 t6 a( W, j4 z Y end
+ ]# ?0 I7 Z7 ~. ?$ L% e+ n else
+ p* f4 m) T6 p% E suiDBGrid1.Canvas.Brush.Color:=clWindow;6 _: t- i$ t4 B
sys:=TSysOper.Create;
- _' t' h3 v" i0 O( C try
4 M% j4 p, t6 M/ D4 x) L% B if Column.Field.IsNull=false then- |+ N! y2 V3 o, n9 e7 f# q
begin2 ^# I' |! ?- e2 ]: R% d" Y; z
case DataCol of; j: }1 f) p& K' C* l1 q, q* W8 F
3: begin
% A( h; i/ u6 B$ k, n$ P DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
% E Z: Y7 t5 g2 }% {2 G suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);; q) z1 g. | W. }1 F$ M& t
w1[3]:=math.max(Length(DrawString),w1[3]);
$ l) P; G! a, B end;
2 m, U9 j& x! {. [) }* w" i; G 4: begin
: P2 j( [8 N% Q3 R# ^ a DrawString:=sys.getLoginMode(Column.Field.CurValue);+ A/ i7 Q- c$ M# w1 E: J$ m
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
6 F% k/ H6 r! K% z w1[4]:=math.max(Length(DrawString),w1[4]);) U4 w% \! i0 m( t+ C ^
end;
8 s6 b {) V8 G+ b" b, g& h 7:begin
+ a: F$ s d8 \- r5 ~2 u DrawString:=TimeFormat(Column.Field.CurValue);
' r$ f; X: D8 F3 N suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
# U, t1 e# e3 Q$ Z w1[7]:=math.max(Length(DrawString),w1[7]);
7 l; |# B' A) O9 L end;* ^! L1 J3 Y% D+ K, ]9 Q
else7 V1 _4 t8 {6 T$ e. }% h+ \0 h/ M
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);3 `8 _- n! O! |$ |: g w% O$ G+ M( h
end;; r) q( y" _2 b3 y9 V, n0 ~3 x: i5 G
end
% m2 C; H4 x3 o$ X, A else
( D$ L% s- x1 @3 m; m- H1 Y suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);; q$ P: C: Q3 ]( e& L
finally
" j$ }! p' H% g7 |: _8 \1 ~ sys.Free;4 h P2 J# {9 H1 @% }/ q" r0 q6 y
end;, T# K1 j0 d3 o- w
end;</P>
; y5 P/ X( c, Q( R< >上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P> |
zan
|