Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
ВнизStringGrid переход на ячейку влево по Enter Найти похожие ветки
← →
Iriss (2009-01-16 15:00) [0]Люди, подскажите
Нужно сделать в таблице StringGrid
переход на ячейку влево по нажатию кнопки Enter
как это можно сделать?
Заранее спасибо
← →
anonims (2009-01-16 15:13) [1]VCL события при нажатии
OnkeyDown OnKeyup Onkeypress выбирай любое у них есть параметр что нажато
коды Enter VK_RETURN #13(или #10 всегда путаю)
условный оператор if <условие> then <при выполнении условия> else <в противном случае> end;
переход к след колонке col:=col+1 (а может и column )
собирай и пользуйся
← →
{RASkov} © (2009-01-16 15:20) [2]procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then Key:=VK_RIGHT;
end;
:)
← →
{RASkov} © (2009-01-16 15:21) [3]> переход на ячейку влево
Хм.... странно как-то.... Ну тады Key:=VK_LEFT;)
← →
Iriss (2009-01-16 15:25) [4]это понятно, а как сделать активной именно следующую ячейку
← →
Smile (2009-01-16 15:26) [5]Учись правильно формулировать вопросы. Скорее всего не "влево", а "в зад", это на тот случай, если ячейка первая в колонке. Ну, а , для начала, следовало бы, хотя бы вкратце, рассказать или пояснить участникам форума, где (из каких потребностей) зарождаются подобные бредовые идеи (возможно и мы вступим в это общество).
← →
Юрий Зотов © (2009-01-16 15:52) [6]> Smile (16.01.09 15:26) [5]
> Учись правильно формулировать вопросы. Скорее всего не "влево",
> а "в зад".
Учите русский язык. Не "в зад", а "взад", а совсем правильно - "назад". А то ведь так и подмывает переспросить: "В чей зад"?
> Ну, а , для начала, следовало бы, хотя бы вкратце, рассказать или
> пояснить участникам форума, где (из каких потребностей) зарождаются
> подобные бредовые идеи (возможно и мы вступим в это общество).
Поясняю - подобные идеи зарождаются из потребностей удобства для юзера. Вы когда-нибудь видели по-настоящему массовый ввод данных?
← →
Smile (2009-01-16 16:08) [7]> Юрий Зотов © (16.01.09 15:52) [6]
> Вы когда-нибудь видели по-настоящему массовый ввод данных?
Признаюсь - не видел, и еще раз попробую напомнить, что "взад" (по вашему замечанию, с которым я полностью согласен) довольно редко встречается такая необходимость (я, по крайней мере, с такой необходимостью не сталкивался:()
← →
Iriss (2009-01-16 16:21) [8]Значит StringGrid
хочу, чтобы при вводе данных после того как пользователь ввел в ячейку значение и нажал Enter, произошел переход на ячейку, которая находится слева (к востоку)) от той ячейки, в которую пользователь только что вводил значение
Вариант
if Key = VK_RETURN then Key:=VK_RIGHT;
не отрабатывает
← →
Anatoly Podgoretsky © (2009-01-16 16:21) [9]Для гридов переход на ячейку вправо или вниз нормальное дело, в отличии от других органов ввода.
← →
Iriss (2009-01-16 16:38) [10]как это сделать?
← →
Putnik © (2009-01-16 16:51) [11]так нельзя:
if Key=vk_return then StringGrid1.Col:=StringGrid1.Col-1
?
← →
Юрий Зотов © (2009-01-16 16:53) [12]> Iriss (16.01.09 16:38) [10]
> как это сделать?
1. Найти событие, соответствующее окончанию редактирования ячейки.
2. В его обработчике написать код перехода в нужную ячейку, используя свойства Col и Row.
← →
MsGuns © (2009-01-16 17:03) [13]>Putnik © (16.01.09 16:51) [11]
>так нельзя:
>if Key=vk_return then StringGrid1.Col:=StringGrid1.Col-1?
Можно, но это будет именно "в зад" :)
← →
{RASkov} © (2009-01-16 17:05) [14]> [8] Iriss (16.01.09 16:21)
> пользователь ввел в ячейку значение и нажал Enter
> Вариант
> if Key = VK_RETURN then Key:=VK_RIGHT;
> не отрабатывает
Потому как клавиатуру обрабатывает InplaceEditor а не Грид...
← →
Putnil (2009-01-16 17:09) [15]Iriss (16.01.09 16:21) [8]
> произошел переход на ячейку, которая находится слева (к
> востоку)) от той ячейки, в которую пользователь только что
> вводил значение
Кстати, слева и к востоку - это 2 разные ячейки
2 MsGuns © (16.01.09 17:03) [13]
Как и хотел автор)
← →
{RASkov} © (2009-01-16 17:14) [16]> но это будет именно "в зад" :)
Это называется "Массовый набор с хвоста" :)
← →
Юрий Зотов © (2009-01-17 16:42) [17]> 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;
← →
Iriss (2009-01-20 11:04) [18]спасибо за помощь
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c