Вниз
Скачать: 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.019 c
1-38240
Yury
2003-02-04 14:51
2003.02.13
Размеры формы


3-38107
Rule
2003-01-27 23:04
2003.02.13
Почему не работает программа с компонентами Интербейза


14-38460
Dr.L.
2003-01-30 11:00
2003.02.13
Существует ли аналог Visual SourceSafe для Delphi ?


1-38307
Nemas
2003-02-05 03:37
2003.02.13
Ничего не понимаю :(


1-38173
anbezr
2003-02-04 16:57
2003.02.13
Как вызвать собственный метод




   Наверх