L
LanderLiu
Unregistered / Unconfirmed
GUEST, unregistred user!
题是这样的,STRG_TableState是一个显示房态的StringGrid:
1:调用如下:
procedure TF_CashMain.STRG_TableStateDrawCell(Sender: TObject;
ACol,
ARow: Integer;
Rect: TRect;
State: TGridDrawState);
begin
RefreshStringGrid(arow,acol,Rect);
end;
2:实调用的函数RefreshStringGrid如下:其中P_OpenADOQueryWithC2为一函数根据传入的ADOQuery,表名,条件字段名1,条件字段值1,条件字段名2,条件字段值2,两个条件打开一个表.
procedure RefreshStringGrid(row,col:integer;Rect: TRect);
//根据传入的参数确定StringGrid显示内容
begin
P_OpenADOQueryWithC2(DM_1.ADOQ_RoomState,'RoomState','F_RS_DeptCode',inttostrM_DeptID),'F_RS_Code',RightStr('000'+inttostr(row*8+col+1),3));
if DM_1.ADOQ_RoomState.RecordCount = 0 then
exit;
with DM_1.ADOQ_RoomStatedo
begin
case strtoint(FieldByName('F_RS_StateCode').AsString) of
1: begin
STRG_TableState.Canvas.Brush.color:=clred;
end;
2: begin
STRG_TableState.Canvas.Brush.color:=clwhite;
end;
3: begin
STRG_TableState.Canvas.Brush.color:=clSilver;
end;
4: begin
STRG_TableState.Canvas.Brush.color:=clGradientActiveCaption;
end;
end;
//case
STRG_TableState.Canvas.FillRect(rect);
STRG_TableState.Canvas.Brush.Style:=bssolid;
STRG_TableState.Canvas.textOut(col*65+5,row*42,fieldbyname('F_RS_Code').asstring);
STRG_TableState.Canvas.textOut(col*65+5,row*42+15,fieldbyname('F_RS_Name').asstring);
end;
//with
end;
3:现在的问题是如果表中的数据即房间多的时候刷新会变得很慢,而且如果这个StringGrid要滚动的话下面的就不会显示文字而且点上面的文字时文字也会不见,我试验的数据刚100个已经刷新很慢了,如果再多了有了滚动就糟了.我查了一些书但关于这方面的介绍了了无几, 我也找不出一个好的解决方法和思路,现高分向各位FW求救,如果方便请贴出来,也可以发到我的邮箱 liuyongsheng2003@hotmail.com ,如果能帮我解决我可以再送200分.
1:调用如下:
procedure TF_CashMain.STRG_TableStateDrawCell(Sender: TObject;
ACol,
ARow: Integer;
Rect: TRect;
State: TGridDrawState);
begin
RefreshStringGrid(arow,acol,Rect);
end;
2:实调用的函数RefreshStringGrid如下:其中P_OpenADOQueryWithC2为一函数根据传入的ADOQuery,表名,条件字段名1,条件字段值1,条件字段名2,条件字段值2,两个条件打开一个表.
procedure RefreshStringGrid(row,col:integer;Rect: TRect);
//根据传入的参数确定StringGrid显示内容
begin
P_OpenADOQueryWithC2(DM_1.ADOQ_RoomState,'RoomState','F_RS_DeptCode',inttostrM_DeptID),'F_RS_Code',RightStr('000'+inttostr(row*8+col+1),3));
if DM_1.ADOQ_RoomState.RecordCount = 0 then
exit;
with DM_1.ADOQ_RoomStatedo
begin
case strtoint(FieldByName('F_RS_StateCode').AsString) of
1: begin
STRG_TableState.Canvas.Brush.color:=clred;
end;
2: begin
STRG_TableState.Canvas.Brush.color:=clwhite;
end;
3: begin
STRG_TableState.Canvas.Brush.color:=clSilver;
end;
4: begin
STRG_TableState.Canvas.Brush.color:=clGradientActiveCaption;
end;
end;
//case
STRG_TableState.Canvas.FillRect(rect);
STRG_TableState.Canvas.Brush.Style:=bssolid;
STRG_TableState.Canvas.textOut(col*65+5,row*42,fieldbyname('F_RS_Code').asstring);
STRG_TableState.Canvas.textOut(col*65+5,row*42+15,fieldbyname('F_RS_Name').asstring);
end;
//with
end;
3:现在的问题是如果表中的数据即房间多的时候刷新会变得很慢,而且如果这个StringGrid要滚动的话下面的就不会显示文字而且点上面的文字时文字也会不见,我试验的数据刚100个已经刷新很慢了,如果再多了有了滚动就糟了.我查了一些书但关于这方面的介绍了了无几, 我也找不出一个好的解决方法和思路,现高分向各位FW求救,如果方便请贴出来,也可以发到我的邮箱 liuyongsheng2003@hotmail.com ,如果能帮我解决我可以再送200分.