2016-08-12 13 views
1

Я хочу реализовать процедуру FillCell для TStringGrid. Я хочу заполнить определенную ячейку цветом, но только тогда, когда ячейка (строка) не выбрана.TStringGrid: Можно ли узнать «состояние» ячейки?

procedure TMyStrGrid.FillCell(Rect: TRect; aColor: TColor); 
begin 
//if NOT (gdSelected in State) then <---- how do I obtain the 'State' here? 
    begin 
    Canvas.Brush.Color:= aColor; 
    Canvas.FillRect(Rect); 
    end; 
end; 

Это просто упражнение :) Я пытаюсь выяснить VCL.Grids.pas, что довольно сложно.

+1

Когда вы называете 'FillCell'? В ответ на какое событие? 'OnDrawCell' обеспечивает состояние рисования. –

+0

OnDraw. Я знаю, что вы собираетесь предложить: передать состояние как параметр. Но я хочу знать, можно ли найти состояние, не передавая его в качестве параметра. – Ampere

+1

Почему бы вам это сделать? У вас уже есть правильное решение. Передайте параметр. –

ответ

2

В соответствии с комментариями вы вызываете эту функцию из обработчика OnDrawCell. Этот обработчик OnDrawCell передается аргумент TGridDrawState, который указывает, выбрана ли ячейка. Обработчик событий этой формы:

TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint; 
    Rect: TRect; State: TGridDrawState) of object; 

Вы спрашиваете, можно ли игнорировать TGridDrawState и каким-то образом восстановить информацию позже. В принципе это возможно:

  • У вас есть строка и столбец. Это идентифицирует ячейку, и вы можете проверить, находится ли ячейка в текущем выборе.
  • Если вы хотите игнорировать строку и столбец, то вы можете проверить поставляемый TRect. Вернитесь к строке и столбцу и снова проверьте, что против текущего выбора.

Откровенно то, что вы пытаетесь сделать, глупо на мой взгляд. Вы получили правильное объяснение. Он имеет необходимую информацию. Используй это.