Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сделать активной ячейку StringGrid [D7, XP]


Mishutka ©   (2011-04-06 17:43:00) 

Доброго дня!
Не обходимо сделать ячейку активной для записей.
Делаю следуюшее:
StringGrid1.Options:=StringGrid1.Options+[goEditing];
StringGrid1.Selection := TGridRect(rect(4, x, 4, x));
StringGrid1.SetFocus;

Проблема в том что вводить можно только цыфры (минуя проверку «бакспейса») procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
If (key<>#8)  then
if not(Key in ['0'..'9', DecimalSeparator]) then Key := #0;
end;
и если каретка находится в другой ячейке то код не работает

Решил проверку крывым но достаточно эффективным методом меняя фокусы:
Edit1.SetFocus;
StringGrid1.Options:=StringGrid1.Options+[goEditing];
StringGrid1.Selection := TGridRect(rect(4, 1, 4, 1));
StringGrid1.SetFocus;

Есть ли более правильный метод решения данной проблемы?


Плохиш   (2011-04-08 09:53:00) [1]

Удалено модератором


Германн   (2011-04-08 03:37:00) [2]

Удалено модератором


Германн   (2011-04-08 03:23:00) [3]

Удалено модератором


Германн   (2011-04-07 20:55:00) [4]

Удалено модератором


sniknik   (2011-04-07 14:25:00) [5]

> Надо бредовый код
это не бредовый, просто не то..., это выделение участка, по случаю и "курсор" переставляет.

> А кто это утверждал, что не это автору нужно? :o)
не будем показывать пальцем но это был бегемотик... :)  © мультфильм какой то.


Mishutka   (2011-04-07 14:08:00) [6]


> Германн ©   (07.04.11 13:06) [9]


Ухты! так же работает. а я из за поста 2 проверять не стал...


Плохиш   (2011-04-07 13:40:00) [7]


> Германн ©   (07.04.11 13:06) [9]
>
> Заменить на нормальный
>  StringGrid1.Row:=1;
>  StringGrid1.Col:=4;

А кто это утверждал, что не это автору нужно? :o)


oldman   (2011-04-07 13:34:00) [8]

Удалено модератором


Германн   (2011-04-07 13:06:00) [9]


> требуется выйти из InplaceEditorа без реального нажатия
> на кнопку мышки.
>

Хм. Тоже очень просто. Надо бредовый код
StringGrid1.Selection := TGridRect(rect(4, 1, 4, 1));

Заменить на нормальный
 StringGrid1.Row:=1;
 StringGrid1.Col:=4;


Германн   (2011-04-07 12:58:00) [10]


> sniknik ©   (07.04.11 10:05) [5]
>
> > Требуется вызвать InplaceEditor без реального нажатия
> на кнопку мышки.
> у стринггдида он всегда "вызван", если разрешено редактирование.
>

Да точно. Значит требуется выйти из InplaceEditorа без реального нажатия на кнопку мышки.


Mishutka   (2011-04-07 11:48:00) [11]


> If (key<>#8)  then if not(Key in ['0'..'9', DecimalSeparator])
> then Key := #0;  


Оно ему мешает


Mishutka   (2011-04-07 11:47:00) [12]


> у стринггдида он всегда "вызван", если разрешено редактирование.
>  (не нужно ентер жать как в дбгриде), т.что вряд ли, хотя
> автор и соглашается.


В принципе уменя он разрешен только для отдельной колонки но пусть даже если он будет разрешен для всех проблема не в этом


> т.е. как? если например в ячейке 1:1 жмешь на буквы и он
> их пропускает, а если в 4:1 то нет? так? что значит в другой?
>  если обработчик не на ячейку, а на весь компонент... ему
> пофигу какая ячейка.


т.е. если например в ячейке 1:1 установить курсор а затем запустить код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
// StringGrid1.Options:=StringGrid1.Options+[goEditing];
 StringGrid1.Selection := TGridRect(rect(4, 1, 4, 1));
 StringGrid1.SetFocus;
end;

при том что у onkeypress StringGrid’а выполняется:
If (key<>#8)  then
if not(Key in ['0'..'9', DecimalSeparator]) then Key := #0;  

то курсор как мигал так и мигает в ячейке 1:1


sniknik   (2011-04-07 10:05:00) [13]

> Требуется вызвать InplaceEditor без реального нажатия на кнопку мышки.
у стринггдида он всегда "вызван", если разрешено редактирование. (не нужно ентер жать как в дбгриде), т.что вряд ли, хотя автор и соглашается.

> и если каретка находится в другой ячейке то код не работает
т.е. как? если например в ячейке 1:1 жмешь на буквы и он их пропускает, а если в 4:1 то нет? так? что значит в другой? если обработчик не на ячейку, а на весь компонент... ему пофигу какая ячейка.


Плохиш   (2011-04-07 10:02:00) [14]


> Автору не это нужно.

Судя по степени коверкования русского языка, автору дешевле нанять программиста и переводчика.


Mishutka   (2011-04-07 09:10:00) [15]


> Германн ©   (07.04.11 02:16) [2]


Вот вот...


Германн   (2011-04-07 02:16:00) [16]

Спамить только не надо!

> Плохиш ©   (06.04.11 23:07) [1]
>
>

Автору не это нужно.
Хотя что автору нужно я может и не понимаю.
Но "интуитивно" я понимаю. Требуется вызвать InplaceEditor без реального нажатия на кнопку мышки.


Плохиш   (2011-04-06 23:07:00) [17]


> сделать активной ячейку StringGrid

Grid.Row = xxx;
Grid.Col = yyy;


Наверх

Титульная страница Поиск, карта сайта Написать письмо