TStringGrid中的箭头指针

时间:2013-04-18 23:54:57

标签: delphi delphi-7

是否可以将该箭头指针添加到Delphi 7中的String Grind?你知道我的意思,你可以在DBGrid左边看到的箭头指针。

2 个答案:

答案 0 :(得分:3)

是的,但不是自动的。您需要手动显示三角形。您可以为网格覆盖 OnDrawCell 。您似乎需要将 FixedCols 设置为0,因为当行选择更改时,它似乎不会再次重绘固定单元格。

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  aCanvas: TCanvas;
  oldColor: TColor;
  triangle: array [0..2] of TPoint;
const
  spacing = 4;
begin
  if (ACol = 0) and (aRow = StringGrid1.Row) then
  begin
    aCanvas := (Sender as TStringGrid).Canvas;  // To avoid with statement
    oldColor := aCanvas.Brush.Color;
    // Shape the triangle
    triangle[0] := TPoint.Create(Rect.Left + spacing, Rect.Top + spacing);
    triangle[1] := TPoint.Create(Rect.Left + spacing, Rect.Top + Rect.Height - spacing);
    triangle[2] := TPoint.Create(Rect.Left + Rect.Width - spacing, Rect.Top + Rect.Height div 2);

    // Draw the triangle
    aCanvas.Pen.Color := clBlack;
    aCanvas.Brush.Color := clBlack;
    aCanvas.Polygon(triangle);
    aCanvas.FloodFill(Rect.Left + Rect.Width div 2, Rect.Top + Rect.Height div 2, clBlack, fsSurface);
    aCanvas.Brush.Color := oldColor;
  end;
end;

这会在框中绘制一个三角形。你应该得到一般的想法。

答案 1 :(得分:1)

不自动;它不是标准TStringGrid的一部分。 “箭头指针”称为row indicator,它是TDBGrid中添加的一项功能。它在TDBGridOptions中声明,具体为dgIndicator,如下所示:

TDBGridOption = (dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator,
    dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,
    dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect);

请注意,这与TGridOption单元中声明的Grids不同,后者不包含任何类似内容。 (没有goIndicator或同等的。)

为了获得指标,当您收到OnDrawCell ACol值为0ARow相当于Grid.Row时,您必须自己在TStringGrid.OnDrawCell事件中绘制它{{1}}值。{{1}}。 this answer中有{{1}}的示例,虽然它正在演示设置自定义行高而不是绘制行指示符。