我有一个StringGrid,我在固定行上着色,列在单击单元格的位置。所以到目前为止看起来像这样:
为了做到这一点,我使用了这段代码:
procedure TForm2.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
md: integer;
begin
with sg do
begin
Canvas.Brush.Color:= clwhite;
if ((sg.Row = ARow)and(ACol=0)) or ((sg.Col = ACol)and(ARow=0)) then
Canvas.Brush.Color:= $00FFDE9B; //your highlighted color
Canvas.FillRect(Rect);
Canvas.TextOut(0, Rect.top + 4, cells[ACol, ARow]);
end;
if gdSelected in State then
sg.Canvas.DrawFocusRect(Rect);
end;
当然还有OnMouseDown中的无效。
procedure TForm2.sgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
sg.invalidate;
end;
现在,我想为顶部的所有选定行着色。因此,与图像一样,选择了4个单元格,但固定区域中只有一个单元格为蓝色(Col 4)。我希望所有相应的固定单元格都是蓝色的。 (在这种情况下:第4栏,第5栏,第6栏,第7栏)
有什么想法吗?
修改
这个想法是用鼠标选择时显示选择,而不是用SHIFT + Click
答案 0 :(得分:1)
改善不大
procedure TForm3.sgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
md: integer;
begin
with sg do
begin
Canvas.Brush.Color:= clwhite;
if ( (Arow >=selection.Top) and (Arow<=selection.Bottom) and(ACol=0)) or
( (ACol>=selection.Left) and (Acol<=selection.Right) and(ARow=0)) then
Canvas.Brush.Color:= $00FFDE9B; //your highlighted color
Canvas.FillRect(Rect);
Canvas.TextOut(0, Rect.top + 4, cells[ACol, ARow]);
end;
if gdSelected in State then
sg.Canvas.DrawFocusRect(Rect);
end;
procedure TForm3.sgMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (ssLeft in shift) then sg.Invalidate;
end;
这将突出显示行whitout帮助函数。