FillRect不会TStringGrid在Delphi XE2中绘制完整的单元格.默认颜色左侧有3个像素的间隙(BiDiMode设置为bdLeftToRight).在我之前使用过的Delphi 6中不存在这个问题.
procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  Stringgrid1.Canvas.Brush.Color:=$00FF80FF;
  StringGrid1.Canvas.FillRect(Rect);
end;
我试图更改所有属性(包括DrawingStyle)和不同的画笔样式,绘制的矩形不会填充整个单元格.
我正在使用VCL控件在Borland C++ Builder IDE中工作.我试图让一个TStringGrid组件向下滚动到一行,并根据不同形式的用户输入突出显示该行.我完成了高亮部分,但我无法弄清楚如何将网格向下滚动到正确的行.这里有人知道吗?
我能走远路,遍历每一行,获得了TRect从CellRect(col, row),然后查询其State为gdSelected...
但是,有没有更快的方法来获取当前所选行的行号,如果有的话?
Delphi的一个较弱的区域是网格(例如TStringGrid),虽然它做了一个很好的基本工作,但是当你需要打印它或定制它的外观时它会变得更难.我已经使用它大约15年,因此它非常嵌入我的应用程序中,随着时间的推移,我推出了TGrid-to-RTF转换的家庭解决方案(通过MSWord进行打印),并使用TDrawGrid进行更多定制.我的解决方案(仍然)必须在Delphi 7和Delphi XE中工作.碰巧的是,我的网格都不是DB绑定的,它们都是用代码填充的.
现在我打算整理我的报告和'漂亮'我的表单,这意味着用更强大的实现替换网格.那里有负载,我有两个Developer Express Quantum Grid和TMS Grid Pack.虽然通过字体,颜色和打印的经验,时间非常有限,我将不胜感激,建议我应采用多种网格/打印显示报告组合.我目前没有报告生成器,正在考虑FastReports,但我愿意接受建议.
我想在用户完成输入数据时返回字符串网格中单元格的内容.按下键盘上的Enter键或单击或双击另一个单元格时,用户完成.
在Lazarus中有一种FinishedCellEditing的方法,但在Delphi中则没有.如何在Delphi中检测到它?
我有一个TStringGrid,我想删除选定的行.我试过的基本内容只删除了最后一行.如何删除任意行?
我想在delphi中更改字符串网格中单元格的背景颜色(不是字体).
只有一个单元格不是行或列.
我可以吗?
RRUZ:你的程序是正确的并且有效但在我的程序中不起作用.
我的程序:
x是整数的全局数组
procedure TF_avalie_salon.StringGrid1DrawCell(Sender: TObject; ACol,
    ARow: Integer; Rect: TRect; State: TGridDrawState);
    var   S: string;
begin
    S := StringGrid1.Cells[ACol, ARow];
    StringGrid1.Canvas.FillRect(Rect);
    SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
    StringGrid1.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
    if (ARow<>0 )AND(acol<>0)AND(gridclick=true) then
    begin
        try
          gridclick:=false;
          x[acol+((strtoint(Edit_hafte.Text)-1)*7),arow]:=strtoint(StringGrid1.Cells[ACol, ARow]);
        except
          x[acol+((strtoint(Edit_hafte.Text)-1)*7),arow]:=0;
          StringGrid1.Cells[acol,arow]:='0';
          with TStringGrid(Sender) do
          begin
            Canvas.Brush.Color := clGreen;
            Canvas.FillRect(Rect);
            Canvas.TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol, ARow]);
          end;
        end;
    end;
end;
当我使用Canvas.Brush.Color与下面的代码,Canvas.Brush.Color不起作用.如果我在代码下面不活动,我可以更改单元格颜色.但我需要两者.
    S := StringGrid1.Cells[ACol, ARow];
    StringGrid1.Canvas.FillRect(Rect);
    SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
    StringGrid1.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top …我想提出一个TCheckBox内部TStringGrid在Delphi中某列的每一个细胞.我正在使用Delphi XE.
我正在从CSV文件@ runtime中向字符串网格添加多行,但是当StringGrid被提升时似乎闪烁很多,我假设会有一个beginupadate/Endupdate命令来阻止它.但是我找不到它.是否有另一种方法可以在更新网格ID时停止闪烁.
科林
我想在字符串网格中绘制单元格的画布.这将在预先加载到字符串网格中的图像之上.
目前,我没有在图像上绘图,而是加载第二个透明图像,然后在单元格顶部绘画.这是我使用的代码,它的工作原理.
procedure TfrmCavern.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
                                    Rect: TRect; State: TGridDrawState);
var
  index : integer;
  I : integer;
begin
  // Calculate the corresponding linear index
  index := LinearIndexOf(ARow, ACol);
  //Draw image referenced to cell
  StringGrid.Canvas.StretchDraw(Rect, CellDetails[index].Images.Picture.Graphic);  
  //if player present draw corresponding player image
  for I := 0 to frmWelcome.NoofPlayers - 1 do
   begin
     if index = Players[I].pIndex then StringGrid.Canvas.StretchDraw(Rect,Players[I].UserImage.Picture.Graphic);
   end;
  end;
end;
该过程首先绘制参考单元格的图像.如果有"玩家"存在,则会将玩家的棋子画在上面.因为"播放器片段"图像是透明的.PNG图像,所以下面的原始图像仍然可见.
该方法的缺点是由于图像是恒定的,"播放器块"处于单元内的设定位置.我希望能够根据选择的单元格在单元格内的不同位置绘制"播放器块".我有大约200个单元格,所以我真的不想手动创建具有不同位置的许多图像.
我已经尝试直接绘制到drawcell过程中的stringgrid的画布,但它似乎引用整个stringgrid而不是正在绘制的当前单元格.
StringGrid.Canvas.ellipse(10,10,50,50);
我看了,但我似乎无法引用当前单元格的画布 - 我认为它不存在?
我尝试的下一件事是绘制临时图像,然后将图像绘制到单元格.
TempImage.Canvas.Ellipse(10,10,50,50);
StringGrid.Canvas.StretchDraw(Rect, TempImage.Picture.Graphic);
这在某种程度上起作用,它确实将图像绘制到单元格,但是图像具有不透明的背景/画布,因此单元格是白色的,其上有圆圈,下方的图像不可见.我做了一些研究,但找不到一种方法来使图像的画布透明.
我能想到的最后一件事就是编写一个算法来定位当前单元格的左上角,然后从那里直接绘制到画布,但这可能是泥泞的,并且在重绘stringgrid时会产生问题.
任何人都能看到我的问题吗? …
delphi ×10
tstringgrid ×10
c++builder ×2
delphi-xe ×2
vcl ×2
canvas ×1
delphi-xe2 ×1
drawing ×1
events ×1
image ×1
printing ×1
report ×1
tcheckbox ×1
tgrid ×1