标签: tstringgrid

Delphi - 绘制到字符串网格中选定单元格的画布 - 可能吗?

我想在字符串网格中绘制单元格的画布.这将在预先加载到字符串网格中的图像之上.

我得到了什么

目前,我没有在图像上绘图,而是加载第二个透明图像,然后在单元格顶部绘画.这是我使用的代码,它的工作原理.

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;
Run Code Online (Sandbox Code Playgroud)

该过程首先绘制参考单元格的图像.如果有"玩家"存在,则会将玩家的棋子画在上面.因为"播放器片段"图像是透明的.PNG图像,所以下面的原始图像仍然可见.

我想要的是

该方法的缺点是由于图像是恒定的,"播放器块"处于单元内的设定位置.我希望能够根据选择的单元格在单元格内的不同位置绘制"播放器块".我有大约200个单元格,所以我真的不想手动创建具有不同位置的许多图像.

我试过的

我已经尝试直接绘制到drawcell过程中的stringgrid的画布,但它似乎引用整个stringgrid而不是正在绘制的当前单元格.

StringGrid.Canvas.ellipse(10,10,50,50);
Run Code Online (Sandbox Code Playgroud)

我看了,但我似乎无法引用当前单元格的画布 - 我认为它不存在?

我尝试的下一件事是绘制临时图像,然后将图像绘制到单元格.

TempImage.Canvas.Ellipse(10,10,50,50);
StringGrid.Canvas.StretchDraw(Rect, TempImage.Picture.Graphic);
Run Code Online (Sandbox Code Playgroud)

这在某种程度上起作用,它确实将图像绘制到单元格,但是图像具有不透明的背景/画布,因此单元格是白色的,其上有圆圈,下方的图像不可见.我做了一些研究,但找不到一种方法来使图像的画布透明.

我能想到的最后一件事就是编写一个算法来定位当前单元格的左上角,然后从那里直接绘制到画布,但这可能是泥泞的,并且在重绘stringgrid时会产生问题.

任何人都能看到我的问题吗? …

delphi drawing canvas image tstringgrid

7
推荐指数
1
解决办法
8712
查看次数

更改TStringGrid单元格的字体颜色

我需要TStringGrid在Delphi 的单元格中更改文本颜色.

只是一个细胞.我怎样才能做到这一点?

delphi colors tstringgrid delphi-xe

6
推荐指数
1
解决办法
1万
查看次数

如何绘制TStringGrid的背景

我使用OnDrawCell事件自定义绘制Delphi TStringGrid.单元格覆盖的区域没有问题,但如何绘制最右边的列右下方和最后一行的背景?

(编辑)绘画不是真的有必要,我只想设置用于背景的颜色.我正在使用XE2并调查VCL样式.即使在默认绘图中,在stringgrid中设置Colors,接缝也完全没有效果.

TIA

delphi paint tstringgrid

6
推荐指数
1
解决办法
2386
查看次数

如何使用LiveBindings在TStringGrid中显示超过200行?

我有一个TDataSource受到TClientDataset绑定的支持TStringGrid.我通过右键单击网格,选择" Link to DB Datasource..."并选择DataSource来完成此操作.这为我设置了LiveBindings.

当我运行应用程序时,网格只填充200行,即使数据集中有5000条记录.

我无法找到有关如何更改显示的行数或允许用户滚动浏览所有数据的正确方法的任何文档.

我确实在单元中找到了硬编码200值,当我将其增加到时,我看到网格中的所有5000行,但这看起来像是一个黑客.TBindScopeDBEnumerator.CreateData.Bind.DBScope10000

在TStringGrid中显示超过200行的正确方法是什么?

delphi tstringgrid delphi-xe2 firemonkey livebindings

6
推荐指数
2
解决办法
3730
查看次数

带注释的delphi xe2 stringgrid

任何人都可以为Delphi推荐一个好的stringgrid组件来处理类似于Microsoft Excel的每个单元格的注释吗?我正在网上搜索,但还没有找到很多,如果有人在这里使用类似的东西,我会很感激

更新为图像:单元格1A有注释,如红色三角形所示

细胞评论

鼠标悬停显示对单元格的评论

在此输入图像描述

delphi tstringgrid delphi-xe2

6
推荐指数
1
解决办法
918
查看次数

如何在Delphi TStringGrid中更改固定行中单元格中的文本方向

我在表单上有一个标准的TStringGrid.我在网格中有一个包含许多列的固定行,这些列都是TGridColumns对象.我使用对象检查器设置了列标题,默认方向是水平的.有什么方法可以使方向垂直(就像在Excel中的单元格中一样)?

text-rendering lazarus tstringgrid

6
推荐指数
1
解决办法
3356
查看次数

选定的stringgrid行的正常colo(u)r是多少?

我压倒OnDrawCell一个字符串网格.在某些情况下,我想TColor在系统执行绘图时使用用于所选行的法线(否OnDrawCell).

那是哪个colo(你)?clXXX?

delphi winapi tstringgrid

6
推荐指数
1
解决办法
1618
查看次数

TStringGrid合并单元格绘图

这个链接/ pic显示了我想用TStringGrid实现的目标.

在此输入图像描述

此链接/图片显示了我的下面代码产生的结果.

在此输入图像描述

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    StringGrid: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const
  cProdWidth = 70;
  cCountWidth = 45;
  cWeightWidth = 55;
var
  Index: Integer;
  Col, Row: Integer;
begin
  StringGrid.ColCount := 10;
  StringGrid.RowCount := 2;
  StringGrid.Cells[1, 0] := 'Shoulder';
  StringGrid.ColWidths[1] := cProdWidth;
  StringGrid.Cells[4, 0] …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2006 tstringgrid

6
推荐指数
1
解决办法
9503
查看次数

隐藏 StringGrid 的 focusRectangle :Delphi

我试图隐藏 Delphi 在 StringGrid 中当前选定的单元格周围绘制的边框(焦点矩形)。我正在做所有者绘图来自定义字符串网格的外观。我已经成功地摆脱了除了选择之外的所有内容。

我正在使用

 GR.Left := -1;
 GR.Top  := -1;
 GR.Right := -1;
 GR.Bottom := -1;
 StringGrid.Selection := GR;
Run Code Online (Sandbox Code Playgroud)

但如果你设置得非常快,就会出现错误(我在 onMouseMove 中运行它)。我的意思是它工作得很好,但是如果我足够快地调用这个特定的代码块,我会在 StringGrid 的渲染中遇到异常(因此我不能只是放弃尝试,除了它周围)。

关于如何可靠地解决这个问题有什么想法吗?

delphi ownerdrawn tstringgrid stringgrid

5
推荐指数
1
解决办法
7170
查看次数

如何将TStringGrid从Delphi 7转换为Delphi XE

只是为了测试我将Delphi 7程序转换为Delphi XE 5的难度,我在Delphi 7上编写了简单的应用程序 - 在Form上放置了TStringGrid,并在表单上添加了代码:

procedure TFMain.FormCreate(Sender: TObject);
begin
  With StringGrid1 do
    begin
      Cells[0,0]:='????€';
    end;
end;
Run Code Online (Sandbox Code Playgroud)

(实际上它写为Cells [0,0]:='ce ??€',但我预计会这样做).编译,构建,运行,没有Unicode,原因.然后在Delphi XE 5中重新打开项目,再次将行更改为Cells [0,0]:='čęжэ€',编译,构建,运行 - 并且没有Unicode(类似于čę|||)!这对我来说很奇怪.在Delphi Xe 5上使用相同代码从零开始构建新项目,同样的TStringGrid正在按预期工作.我知道这里有一些简单的技巧,也许是项目设置中的一些变化,但我不能谷歌...也许有人可以提供帮助?

最好的祝福.

delphi unicode tstringgrid stringgrid

5
推荐指数
1
解决办法
841
查看次数