- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40960 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 23863
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 20501
- 主题
- 18182
- 精华
- 5
- 分享
- 0
- 好友
- 140
TA的每日心情 | 奋斗 2024-6-23 05:14 |
|---|
签到天数: 1043 天 [LV.10]以坛为家III
 群组: 万里江山 群组: sas讨论小组 群组: 长盛证券理财有限公司 群组: C 语言讨论组 群组: Matlab讨论组 |
< >var
9 F9 D" Y+ J! ~7 G0 ^ W1: array[1..8] of Integer;
4 Z% |; C/ ~5 a" Q9 U) B, R* s a W2: array[1..8] of Integer;</P>8 z6 y2 x' w/ @: j7 B! |
< >procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
' O4 F1 P; }' W2 w# | h" Avar
2 ]2 Z$ H6 I& Q colwidth,Max:Integer;
" k* n- i. M% V. H* S- o: tbegin7 g- b1 F% ~- @
colwidth:=5;- m2 d3 p+ g P$ c$ c, \
Max:=5;
3 ?: \9 [; P# j8 p2 ] if not(Column.Field is TBlobField ) then
% j9 e3 \# ~9 X% r. z Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
5 m% T) p+ ]7 D( ?- O [ else
0 _$ ?+ w1 T6 u W% D# T! R' ^ begin
! j3 S, M j" W* D1 b+ V Column.width := max+50;
~3 B: A( B3 n exit;
+ a# Z, ?8 x% {/ A( e8 F4 P end;
# j* v q( O1 l ?5 E/ X# v, T5 k8 F with Tadotable(Column.Field.DataSet) do9 z6 p% M Q9 [) h- j
begin! C+ ^- P# O5 C+ P
case number of
4 D; }2 c/ G' n0 I B- N 1: begin
# d1 K r+ \- U4 ?# y2 g case Column.ID of: k) n- `( V1 t! l
3: begin
: G$ p5 N1 H" H4 c i. Q! q if(w1[3]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then: Q# E$ O( D; Z& W( Y) L0 }& r
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 D' |$ |- `, d" c$ f* [
else, v' p; ? V5 }6 K0 r- G
Column.width :=w1[3]*8+5;
" ?. X% D; {3 P" z5 ]+ ` end;
, I }* Q9 n' {" \ 4: begin8 @: d7 o, k6 p" J" j3 g
if(w1[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then2 l% Y4 ^* J* @- j) |
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
; H: e f2 b9 R3 T else
6 F, O& m' R8 a& T. {: d Column.width :=w1[4]*8+5;9 h; \) M8 n3 ]0 p4 h! ~
end;7 V( K' Y" |8 d" i: |# F
7: begin
1 p5 V( o7 A, Q1 W if(w1[7]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then9 n; M2 C8 b2 S2 Y' I5 q
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5* f! p2 [- ~( I% z ?& H* j% a
else( ~( S- h) r) |
Column.width :=w1[7]*8+5;1 q3 A! P8 }, G$ ^
end;
4 K+ ?! @& L4 V# A* h3 D- ^ else, Z5 N' u; |2 A! B+ `# G
begin
; }' x3 L5 d- ?# q2 ?# ] first;
7 k8 b; t1 R) Q% s4 T' Z while not eof do
4 ~& R2 | N* c begin' x) {& _# u! e y9 c+ Q
colwidth := grid.Canvas.TextWidth(Column.Field.AsString);' |! {9 v) A ?8 K7 |
Max:=math.Max(colwidth,Max);
7 N5 @1 P1 X* a( I8 \: Q Next;7 }# H% Y9 T% P/ P
end;
6 @0 r4 a# E9 N& J( P7 d if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
/ ^7 r& A+ F$ h% v Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 r/ R5 X7 w0 ]3 C% }
else
: s, v8 I- W. L9 n Column.width := Max+5;! D* d! H g3 L& ^6 A, T
end;
- H. N& E4 w( z8 |' }' Q; e7 | end;
; Y& ?" l! H/ n) [2 @1 U end;
9 ?) \3 t1 ?! ~# e: e( s 2: begin" y6 B, N! D9 ^% |* {, c, W& J3 e
case Column.ID of
2 G2 ^6 l6 m9 |* l 4: begin
& D$ i& H5 v: s2 ~) @. p" ` if(w2[4]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
# f' v/ j6 a7 I( a n Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
; b# H: S/ R0 @# ^8 m( \ else& J: d! `4 P6 z; _; R
Column.width :=w2[4]*8+5;
% t, k* P+ s, n7 @ end;- a: V n2 y* D. \- W. S
5: begin* ]% _# P: ]- F, [2 E
if(w2[5]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then
* K* J9 T* X+ t& U& [ Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
% R( H/ N2 @/ F' Z) `9 I else% w* ^+ ] e( t% r+ z
Column.width :=w2[5]*8+5;0 h$ ]6 p* J a+ ~
end;
6 _3 R4 T5 x9 Y% m 6: begin2 Q k/ p' Z0 X: p
if(w2[6]*8+5)< grid.Canvas.TextWidth(Column.Title.Caption) then# k1 g/ V4 Y- |- r* b
Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
: w3 j/ _$ y0 z- `( F else
- D, i, L# w' Y Column.width :=w2[6]*8+5;- ?2 ?; v' u* \% T" d
end;
- x; S% M& H2 m0 [7 _3 Z* o else0 R0 b. } Q, E: r2 p4 R* b
begin
' L! V% _5 M' t' K% w- c first;
" H" s1 r: y0 z while not eof do
6 y+ A6 ^5 C( C begin
+ ?3 y( d$ ~7 G9 k$ v- n3 p colwidth := grid.Canvas.TextWidth(Column.Field.AsString);' d: H0 V: W, z% Q
Max:=math.Max(colwidth,Max);6 C0 U" Q( _. v
Next;' r8 ]- u! ^- f1 [ g
end;& {2 Z4 R4 J: a" F# b2 j# d
if (Max < grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
0 _; w" f8 U7 o- e' n( r2 ~ Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
8 J1 t5 X/ R4 `, ? Z3 p w* ~ else H; l/ @* A! R3 T9 i: K: I
Column.width := Max+5;
5 }4 ]9 a- Y) H2 u7 n C0 Y" L0 ~ end;
u. Q+ r1 g/ ]) p( a. k, d: ] end;
- x8 Q2 V* c- B. X# i) A end;" \9 M# r8 P& X. r! K- [+ v
end;6 h- B( D' W7 z' M0 P! J
end;
& o3 R3 d+ p' H) rend;</P>
8 E) x5 T" X7 ~! _; j< >procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);+ \/ R1 G( C6 T. `1 c( V
begin& u( r: e- D+ n
Orderby(suiDBGrid2,Column,2);
! F7 ^# Z- q) X. ^. @9 Pend;</P>& I2 i2 z7 o5 u' b+ \- ^8 J. G
< >procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
4 t' j( }& z/ M& f% r* i+ X" }/ ]. L const Rect: TRect; DataCol: Integer; Column: TColumn;$ R$ x" f- t+ i) I* `8 D% a. r
State: TGridDrawState);
4 u( D8 m# ~ P/ f( O& {7 c! jvar
. _, w' D# [- ~# j; W3 F! p" O% E/ L DrawString : String;$ k1 w% ]5 ~' g1 e- ]' I1 N$ Q
sys:TSysOper;
( a7 g2 G3 [* i8 L# D9 Y; \begin0 Y, r# v; j- P" V
if (gdSelected in State)then
% k5 r: @( r# }: i. j# I% {3 M begin
0 ^6 q% Y/ l5 v; L2 W5 S) T suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
, ^( n$ i% _3 e% [ end8 k7 h; i' q! u* [ l v6 ~
else) y$ o( A! Y; R2 U8 U& W& q3 ~
suiDBGrid1.Canvas.Brush.Color:=clWindow;
; }' Q' z v% J! c sys:=TSysOper.Create;
# n7 w! _& D. L- J try
( R% `% W: y4 y( @9 s if Column.Field.IsNull=false then
: F0 q+ x" w) C, ~# N begin
6 O3 Y4 M& I# _2 Z6 k5 d case DataCol of7 `- v$ d( @! k
3: begin
2 p" b# |) B5 F+ J2 X+ r DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。 f5 ]# Z. v% ^( ~; H
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
: w* I3 j( F3 O, j' M0 z w1[3]:=math.max(Length(DrawString),w1[3]);% {6 g4 G( z5 C1 m% ?) M
end;
/ M. g) }: _3 U& Q4 i 4: begin' ]5 ^' f2 w/ |
DrawString:=sys.getLoginMode(Column.Field.CurValue);( i) X0 ^' |/ f1 J- B7 y
suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);4 X, h, k: J2 A9 K
w1[4]:=math.max(Length(DrawString),w1[4]);4 p& G8 y/ V1 @+ [* `
end;: x+ r9 b$ V. n. q$ W, u( M
7:begin
3 D3 I/ `( }- H4 ~+ e DrawString:=TimeFormat(Column.Field.CurValue);
9 Z3 N' x& R k4 h& R3 P suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);& E9 P" h# j+ x; q* s+ t \
w1[7]:=math.max(Length(DrawString),w1[7]);
! o& @5 \ [6 v$ {; R end;& W3 F4 U: g; P) U) X: A8 ]
else7 F0 Q* E+ H) b6 P5 `7 x$ v
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
5 g( x, h( s! f! ]* g end;
" `% n3 k/ ^" x2 I& d end
+ a$ E$ D6 i# |$ a* T6 r, B6 N else" n3 W$ b, L b! P
suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
% S/ d- |. `0 n4 a finally
( H+ @: {0 k! ], e/ E7 N, S sys.Free;# Z% ]! k5 p' t6 U+ v9 v
end;7 x' R, _: @. T$ [6 g4 u
end;</P>
. d9 d' h# @) M+ P7 J& L< >上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P> |
zan
|