2015-09-06 1 views
-1

У меня есть отчет в TStringGrid и нужно, чтобы при нажатии клавиши пробела измените цвет bg на выбранные ячейки горизонтальной линии.set color selected line cell в TStringGrid с ключом пробела

как можно сделать

+3

Помните строки состояния (в некоторой коллекции), и когда пользователь нажимает клавишу пробел, обновление это состояние и вызов 'Invalidate' для сетки. Наконец, в событии «OnDrawCell» нарисуйте ячейку строки по ее состоянию. – TLama

+1

[Установка цвета фона выбранной строки на TStringGrid] (http://stackoverflow.com/q/5575713/62576) вам не поможет? –

ответ

0
 TSelColor = class 
     public 
     Color: TColor; 
     constructor Create(const aColor: TColor); 
     end; 

     TForm1 = class(TForm) 
     StringGrid1: TStringGrid; 
     procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
      Rect: TRect; State: TGridDrawState); 
     procedure StringGrid1KeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState); 
     private 
     { Private declarations } 
     public 
     kPressed: boolean; 
     end; 

    var 
     Form1: TForm1; 

    implementation 

    {$R *.dfm} 

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
     Rect: TRect; State: TGridDrawState); 
    var 
     yourColor: TColor; 
    begin 
     yourColor:= clRed; 
     if gdFixed in State then 
     TStringGrid(Sender).Canvas.Brush.Color:= clBtnFace 
     else if gdSelected in State then 
     begin 
     TStringGrid(Sender).Canvas.Brush.Color:= clAqua; 
     if kPressed and not (TStringGrid(Sender).Objects[ACol, ARow] is TSelColor) then 
      TStringGrid(Sender).Objects[ACol, ARow]:= TSelColor.Create(yourColor) 
     else if kPressed and (TStringGrid(Sender).Objects[ACol, ARow] is TSelColor) then 
      TStringGrid(Sender).Objects[ACol, ARow]:= nil; 
     end 
     else 
     begin 
     TStringGrid(Sender).Canvas.Brush.Color:= clWindow; 
     if TStringGrid(Sender).Objects[ACol, ARow] is TSelColor then 
      TStringGrid(Sender).Canvas.Brush.Color:= TSelColor(TStringGrid(Sender).Objects[ACol, ARow]).Color; 
     end; 
     TStringGrid(Sender).Canvas.FillRect(Rect); 
     TStringGrid(Sender).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, TStringGrid(Sender).Cells[ACol, ARow]); 
    end; 

    procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; 
     Shift: TShiftState); 
    begin 
     if Key = 32 then 
     begin 
     kPressed:= true; 
     StringGrid1.Repaint; 
     kPressed:= false; 
     end; 
    end; 

    { TSelColor } 

    constructor TSelColor.Create(const aColor: TColor); 
    begin 
     inherited Create; 
     Color:= aColor; 
    end; 

StringGrid1
DefaultDrawning [ложь] Options.goRowSelect [истинный]