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;
4 комментария:
А как сделали, чтобы при перемещении по ячейкам в СтрингГрид менялись и пункты в РадиоГруп ??
Как это сделать в SelectCell ?
На событие onSelectCell (StringGrid-a) нужно написать обработчик. Выделенная строка находится в ARow
Хорошо было бы соурс получить
исходник до этого момента к сожалению не сохранился.
Отправить комментарий