МЕНЮ

МЕНЮ  гуморески  инфо



МЕНЮ

МЕНЮ  гуморески  инфо 
Delphi компонет StringGrid, событие onSelectCell Delphi компонет StringGrid, событие onSelectCell Сегодня возник вопрос: Как узнать текущую выбранную строку в списке StringGrid. Это делается с помощью следующего кода: StringGrid1.ARow Теперь усложним задачу, у нас есть список StringGrid, в зависимости от выбранного элемента в StringGrid и соответственно значения в ячейке устанавливается соответствующий переключатель в RadioGroup. (Рис.1) Рис.1 Решение: В компоненте StringGrid для события onSelectCell есть процедура обработки и установки переключателя в RadioGroup. Проблема в том что если кликать мышкой в списке StringGrid - все отлично работает и обрабатывается корректно. Если же перемещаться по списку с помощью курсора - событие onSelectCell наступает раньше, чем устанавливается значение в StringGrid1.ARow. Решение проблемы нашел на одном из зарубежных форумов. Для заметки привожу в своем блоге: Устанавливаем свойство onRowSelect в false. Если вам нужно чтобы строка была выделенной - пишем на событие onDrawCell следующий код : if gdFixed in State then Exit; if ARow=TStringGrid(Sender).Row then begin TStringGrid(Sender).canvas.Brush.color:=clBlue; TStringGrid(Sender).canvas.Font.Color:=clWhite; TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow]) end else begin TStringGrid(Sender).canvas.Brush.color:=TStringGrid(Sender).Color; TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow]) end; Если нужно - можно изменить цвет отображения выделенной строки. Теперь нам нужно дописать для компонента StringGrid на событие onSelectCell следующий код: var SaveEvent:TSelectCellEvent; begin if ARow<>TStringGrid(Sender).Row then begin SaveEvent:=TStringGrid(Sender).OnSelectCell; TStringGrid(Sender).OnSelectCell:=Nil; TStringGrid(Sender).Row:=ARow; CanSelect:=False; TStringGrid(Sender).Refresh; TStringGrid(Sender).OnSelectCell:=SaveEvent; end;