Вниз
Скачать: CL | DM;

TStringGrid   Найти похожие ветки 

 
Grandpa ©   (2003-01-31 11:04) [0]

В TStringGrid использую событие onSelectCell, чтобы запретить доступ к некоторым ячейкам. Логично было бы предположить, что по Tab будет переход к следующей "допустимой" ячейки, однако этого не происходит. Попытки ручного перехода на нужную ячейку с событиях onSelectCell и в onKeyDown путём установки свойст Row и Col эффекта не дают. Переход между ячейками таким образом возможен только с помощью мышки, а хотелось бы по Tab.
Есть какие-либо идеи?


 
Archon Kazansky ©   (2003-01-31 11:14) [1]

Попробуй устанавливать свойство Selection.


 
Sheriff   (2003-01-31 11:30) [2]


procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
if ACol=2 then CanSelect:=true else CanSelect:=false;
end;


 
Grandpa ©   (2003-02-03 09:41) [3]

Кажысь меня не поняли. Пример.

Пусть

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
CanSelect := ((ACol=2) and (ARow=2)) or ((ACol=3) and (ARow=3));
end;

Хотелось бы чтобы из ячйки (2,2) по Tab был переход на ячейку (3,3) и наоборот - из (3,3) по Tab на (2,2).


 
Danilka ©   (2003-02-03 09:48) [4]

Все правильно тебя поняли, используй Selection, примерно вот-так:


procedure TForm1.Button1Click(Sender: TObject);
var
Sel: TGridRect;
begin
Sel.Left:=3;
Sel.Top:=3;
Sel.Right:=3;
Sel.Bottom:=3;
StringGrid1.Selection:=Sel;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Sel: TGridRect;
begin
Sel.Left:=2;
Sel.Top:=2;
Sel.Right:=2;
Sel.Bottom:=2;
StringGrid1.Selection:=Sel;
end;


 
Grandpa ©   (2003-02-03 10:17) [5]

Danilka, спасибо, всё работает. В моём случае это выглядет так:


procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
CanSelect := ((ACol=2) and (ARow=2)) or ((ACol=3) and (ARow=3));
end;


procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Sel: TGridRect;
begin
if Key = VK_TAB then
if (StringGrid1.Col = 2) and (StringGrid1.Row = 2) then
begin
Sel.Left:=3;
Sel.Top:=3;
Sel.Right:=3;
Sel.Bottom:=3;
StringGrid1.Selection:=Sel;
end
else
begin
Sel.Left:=2;
Sel.Top:=2;
Sel.Right:=2;
Sel.Bottom:=2;
StringGrid1.Selection:=Sel;
end;
end;

Код привожу чтобы завершить тему. Ещё раз большое спасибо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
14-38485
hatchy
2003-01-26 15:11
2003.02.13
Помогите ....что неправильно???


14-38546
michelin
2003-01-28 21:06
2003.02.13
Для курсовой по Delphi нужен ERwin4.0


3-38088
Relict
2003-01-27 15:25
2003.02.13
Опять запись картинок на сервер


3-38141
Ag2002
2003-01-28 17:08
2003.02.13
Пустая дата


1-38251
Niki
2003-02-05 14:16
2003.02.13
Как получить значение выбранного пункта Outline1?




   Наверх