"冷公子" 同学需要在 TStringGrid 中通过颜色显示大量信息, 给出的方案是: 建立一个对应的颜色数组.
参考代码:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); end; var Form1: TForm1; implementation {$R *.dfm} const ColNum = 6; //列数 RowNum = 5; //行数 ColorDefault = clWhite; //默认颜色 var colorArray: array of array of TColor; //颜色数组 procedure TForm1.FormCreate(Sender: TObject); var i,j: Integer; begin {初始化颜色数组} SetLength(colorArray, ColNum, RowNum); for i := 0 to ColNum - 1 do for j := 0 to RowNum - 1 do colorArray[i,j] := ColorDefault; {初始化 StringGrid} StringGrid1.ColCount := ColNum + 1; StringGrid1.RowCount := RowNum + 1; for i := 1 to StringGrid1.ColCount - 1 do StringGrid1.Cells[i, 0] := Format('Col%d', [i]); for i := 1 to StringGrid1.RowCount - 1 do StringGrid1.Cells[0, i] := Format('Row%d', [i]); end; {StringGrid1 的 OnDrawCell 事件: 绘制颜色} procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if Length(colorArray) < 1 then Exit; if (ACol = 0) or (ARow = 0) then Exit; if colorArray[ACol-1, ARow-1] = ColorDefault then Exit; with TStringGrid(Sender).Canvas do begin Brush.Color := colorArray[ACol-1, ARow-1]; FillRect(Rect); end; end; {颜色呈现测试} procedure TForm1.Button1Click(Sender: TObject); begin colorArray[1,2] := clRed; colorArray[1,3] := clBlue; StringGrid1.Refresh; end; end.