从TStringGrid单元格[aCol,aRow]读取文本,该文本由“OnDrawCell”事件上的DrawText函数生成

时间:2017-02-22 15:38:17

标签: delphi drawtext stringgrid

我的字符串网格(TStringGrid)有2列和1行(Property: ColCount = 2 & Rowcount = 1

OnDrawCell事件的代码:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var
    Parametertext : string;
begin
     case ACol of
     0 : Parametertext := 'Test';
     1 : Parametertext := 'Test1';
     end;
     stringgrid1.Brush.Color := clBtnFace;
     stringgrid1.Font.Color := clWindowText;
     stringgrid1.Canvas.FillRect(Rect);
     DrawText(stringgrid1.Canvas.Handle, PChar(parameterText), -1, Rect,
      DT_SINGLELINE);
end;

当我运行应用程序时,我得到以下输出: Sample Output

问题:

当我尝试使用StringGrid1.Cells[0,0]StringGrid1.Cells[1,0]

来获取文字时

我除了“测试”和& “Test1”但它总是给出一个空字符串“”。

如何使用StringGrid.Cells[aCol,aRow]?#/ p>从字符串网格中获取文本

1 个答案:

答案 0 :(得分:0)

要执行您要求的操作,您需要将字符串值实际存储在Cells属性中,而不是在OnDrawCell事件中动态生成它们:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Parametertext : string;
begin
  Parametertext := StringGrid1.Cells[ACol, ARow];
  StringGrid1.Brush.Color := clBtnFace;
  StringGrid1.Font.Color := clWindowText;
  StringGrid1.Canvas.FillRect(Rect);
  DrawText(StringGrid1.Canvas.Handle, PChar(ParameterText), Length(ParameterText), Rect, DT_SINGLELINE);
end;

...

StringGrid1.Cells[0, 0] := 'Test';
StringGrid1.Cells[1, 0] := 'Test1';

如果您不打算使用Cells属性来存储字符串,您也可以使用TDrawGrid代替。