Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.008 c
1-38208
Nemas
2003-02-05 08:05
2003.02.13
Пра простеньких вопросов


1-38342
БурЖуй
2003-02-02 13:19
2003.02.13
Динамические массивы


14-38557
Ежик
2003-01-28 09:31
2003.02.13
Включение компьютера.....


14-38517
Donatas
2003-01-28 13:39
2003.02.13
Поставим вопрос по другому.....


14-38532
REA
2003-01-29 11:05
2003.02.13
Войны животных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский