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

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

StringGrid переход на ячейку влево по Enter


Iriss ©   (2009-01-16 15:00:00) 

Люди, подскажите
Нужно сделать в таблице StringGrid  
переход на ячейку влево по нажатию кнопки Enter

как это можно сделать?
Заранее спасибо


Iriss   (2009-01-20 11:04:00) [1]

спасибо за помощь


Юрий Зотов   (2009-01-17 16:42:00) [2]

> Iriss

Вот этот код выбирает следующуюячейку, если она еще не последняя. А как выбрать предыдущую, если она еще не первая - это уж Вы сами.

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
     const Value: String);
 private
   Flag: boolean;
   procedure SelectNextCell;
 end;

procedure TForm1.SelectNextCell;
var
 C, R: integer;
begin
 with StringGrid1 do
 begin
   if Flag or (Col = ColCount - 1) and (Row = RowCount - 1) then
     Exit;
   Flag := True;
   try
     C := Col + 1;
     if C = ColCount then
     begin
       C := FixedCols;
       R := Row + 1
     end
     else
       R := Row;
     Col := C;
     Row := R
   finally
     Flag := False
   end
 end
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
 ARow: Integer; const Value: String);
begin
 if not StringGrid1.EditorMode then
   SelectNextCell
end;


{RASkov}   (2009-01-16 17:14:00) [3]

> но это будет именно "в зад" :)

Это называется "Массовый набор с хвоста" :)


Putnil   (2009-01-16 17:09:00) [4]

Iriss   (16.01.09 16:21) [8]

> произошел переход на ячейку, которая находится слева (к
> востоку)) от той ячейки, в которую пользователь только что
> вводил значение

Кстати, слева и к востоку - это 2 разные ячейки
2 MsGuns ©   (16.01.09 17:03) [13]
Как и хотел автор)


{RASkov}   (2009-01-16 17:05:00) [5]

> [8] Iriss   (16.01.09 16:21)
> пользователь ввел в ячейку значение и нажал Enter


> Вариант
> if Key = VK_RETURN then Key:=VK_RIGHT;
> не отрабатывает

Потому как клавиатуру обрабатывает InplaceEditor а не Грид...


MsGuns   (2009-01-16 17:03:00) [6]

>Putnik ©   (16.01.09 16:51) [11]
>так нельзя:
>if Key=vk_return then StringGrid1.Col:=StringGrid1.Col-1?

Можно, но это будет именно "в зад" :)


Юрий Зотов   (2009-01-16 16:53:00) [7]

> Iriss   (16.01.09 16:38) [10]
> как это сделать?

1. Найти событие, соответствующее окончанию редактирования ячейки.
2. В его обработчике написать код перехода в нужную ячейку, используя свойства Col и Row.


Putnik   (2009-01-16 16:51:00) [8]

так нельзя:
if Key=vk_return then StringGrid1.Col:=StringGrid1.Col-1?


Iriss   (2009-01-16 16:38:00) [9]

как это сделать?


Anatoly Podgoretsky   (2009-01-16 16:21:00) [10]

Для гридов переход на ячейку вправо или вниз нормальное дело, в отличии от других органов ввода.


Iriss   (2009-01-16 16:21:00) [11]

Значит StringGrid

хочу, чтобы при вводе данных после того как пользователь ввел в ячейку значение и нажал Enter, произошел переход на ячейку, которая находится слева (к востоку)) от той ячейки, в которую пользователь только что вводил значение

Вариант
if Key = VK_RETURN then Key:=VK_RIGHT;
не отрабатывает


Smile   (2009-01-16 16:08:00) [12]

> Юрий Зотов ©   (16.01.09 15:52) [6]

> Вы когда-нибудь видели по-настоящему массовый ввод данных?

Признаюсь - не видел, и еще раз попробую напомнить, что "взад" (по вашему замечанию, с которым я полностью согласен) довольно редко встречается такая необходимость (я, по крайней мере, с такой необходимостью не сталкивался:()


Юрий Зотов   (2009-01-16 15:52:00) [13]

> Smile   (16.01.09 15:26) [5]

> Учись правильно формулировать вопросы. Скорее всего не "влево",
> а "в зад".

Учите русский язык. Не "в зад", а "взад", а совсем правильно - "назад". А то ведь так и подмывает переспросить: "В чейзад"?

> Ну, а , для начала, следовало бы, хотя бы вкратце, рассказать или
> пояснить участникам форума, где (из каких потребностей) зарождаются
> подобные бредовые идеи (возможно и мы вступим в это общество).

Поясняю - подобные идеи зарождаются из потребностей удобства для юзера. Вы когда-нибудь видели по-настоящему массовый ввод данных?


Smile   (2009-01-16 15:26:00) [14]

Учись правильно формулировать вопросы. Скорее всего не "влево", а "в зад", это на тот случай, если ячейка первая в колонке. Ну, а , для начала, следовало бы, хотя бы вкратце, рассказать или пояснить участникам форума, где (из каких потребностей) зарождаются подобные бредовые идеи (возможно и мы вступим в это общество).


Iriss   (2009-01-16 15:25:00) [15]

это понятно, а как сделать активной именно следующую ячейку


{RASkov}   (2009-01-16 15:21:00) [16]

> переход на ячейку влево

Хм.... странно как-то.... Ну тады Key:=VK_LEFT;)


{RASkov}   (2009-01-16 15:20:00) [17]

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = VK_RETURN then Key:=VK_RIGHT;
end;
:)


anonims   (2009-01-16 15:13:00) [18]

VCL события при нажатии
OnkeyDown OnKeyup Onkeypress  выбирай любое у них есть параметр что нажато

коды Enter VK_RETURN #13(или #10 всегда путаю)

условный оператор  if <условие> then <при выполнении условия> else <в противном случае> end;

переход к след колонке col:=col+1 (а может и column )

собирай и пользуйся


Наверх

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