如题目: 我现在 是做了一个循环
for i :=0 to List.cout -1 do
begin
Stringlist .Cell[4,i] := ObjectList.Buybook[i-1].Money;
Stringlist .Cell[5,i] := ObjectList.Buybook[i-1].bookNum; end;这样的话,如果数量20万,需要很长时间才能 填充完毕,有没有更快的版本 填充?
for i :=0 to List.cout -1 do
begin
Stringlist .Cell[4,i] := ObjectList.Buybook[i-1].Money;
Stringlist .Cell[5,i] := ObjectList.Buybook[i-1].bookNum; end;这样的话,如果数量20万,需要很长时间才能 填充完毕,有没有更快的版本 填充?
好像只有循环导入,谁有更快的方法,我也很想知道
BmpGrid:TBitMap;//防止重绘时闪烁procedure TfrmFixIE.FormCreate(Sender: TObject);
begin
...
BmpGrid := TBitmap.Create;
...
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
ACanvas: TCanvas;
ARect, R: TRect;
Text: string;
begin
if (ACol = 4) or (ACol = 5) then
try
ARect := Rect;
OffsetRect(ARect, -ARect.Left, -ARect.Top);
BmpGrid.Width := ARect.Right;
BmpGrid.Height := ARect.Bottom;
ACanvas := BmpGrid.Canvas;
ACanvas.Font := Font;
ACanvas.Brush.Color := clWhite;
ACanvas.Brush.Style := bsSolid;
ACanvas.FillRect(ARect);
if gdSelected in State then
begin //选中时处理
ACanvas.Brush.Color := clBlue; // $00F9F7F6;
ACanvas.FillRect(ARect);
ACanvas.Brush.Style := bsClear;
ACanvas.Font.Color := clWhite;
end
else if ARow mod 2 = 0 then
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := $00F0FFFF; // $00F9F7F6;
ACanvas.FillRect(ARect);
end
else
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := clWhite;
ACanvas.FillRect(ARect);
end; case ACol of
4: Text := ObjectList.Buybook[ACol-1].Money; ;
5: Text := ObjectList.Buybook[ACol-1].bookNum;
end;
r:=ARect ;
DrawText(
ACanvas.Handle,
PCHAR(Text),
Length(Text),
r,
DT_SINGLELINE or DT_END_ELLIPSIS or DT_LEFT or DT_VCENTER);
finally
TStringGrid(Sender).Canvas.Draw(Rect.Left, Rect.Top, BmpGrid);
end;
end;以上代码你直接引用就可以用了
1、先设好StringGrid的RowCount
2、循环前beginupdate或lock——不知道stringgrid有没有这样的函数,或者先隐藏看看是不是能快