procedure TFrmauto.IGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
vText:PChar;
begin
with Tstringgrid(sender) do
begin
if ARow=0 then
vText := PChar(trim(Cells[ACol, ARow]));
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, vText, StrLen(vText), Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
Rect: TRect; State: TGridDrawState);
var
vText:PChar;
begin
with Tstringgrid(sender) do
begin
if ARow=0 then
vText := PChar(trim(Cells[ACol, ARow]));
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, vText, StrLen(vText), Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
Txt:String;
begin
Txt:=FieldGrid.Cells[ACol,ARow];
FieldGrid.Canvas.Rectangle(Rect);
DrawText(FieldGrid.Canvas.Handle,
Pchar(Txt),
Length(Txt),
Rect,
DT_CENTER);
var
Txt:String;
begin
Txt:=StringGrid1.Cells[ACol,ARow];
FieldGrid.Canvas.Rectangle(Rect);
DrawText(StringGrid1.Canvas.Handle,
Pchar(Txt),
Length(Txt),
Rect,
DT_CENTER or DT_VCenter or DT_SingleLine);
使用了你的代码后,StringGrid上的数据丢失了.
删除一行的方法:供参考
for l:=i to stringgrid1.rowcount-2 do
for k:=1 to stringgrid1.colcount-2 do
stringgrid1.cell[k,l]:=stringgrid1.cell[k,i+1];
stringgrid1.rowcount:=stringgrid1.rowcount-1;
至于那一行那一列,只要控制ACol和ARow两个参数就行了
procedure TFrm_dktj.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
TmpPchar: array[0..2047] of char;
RectX: TRect;
begin
RectX.Left:= Rect.Left+2;
RectX.Right:= Rect.Right-2;
RectX.top:= Rect.top+2;
RectX.Bottom:= Rect.Bottom-2;
Sg.Canvas.FillRect(Rectx);
StrPcopy(TmpPchar,Sg.cells[ACol,ARow]);
DrawText(Sg.Canvas.Handle,tmppchar,-1,rectx,DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;