Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21

При нажатии на клавишу Энтер курсор должен перейти в следующее поле, а оно никак (

16.01.2018, 23:14. Показов 4370. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день. Занимаюсь самостоятельным изучением Delphi XE, столкнулся с таким вот событием.

Delphi
1
2
3
4
5
procedure TForm3.Edit1KeyPress(Sender: TObject; var key: char);
begin
if key=#13 //Если нажата клавиша Enter
then Edit2.SetFocus; //То переместить курсор во второе поле
end;
Как бы что должна делать эта процедура я там написал, но при нажатии на Энтер просто слышен дыдын и курсор остается на месте, чего не так то? я же говорю если нажат Энтер(#13) то шуруй свой курсор в поле Edit2 (Edit2.SetFocus). Вроде бы и говорю с уважением, а оно воно что, не хочет чейт, как быть то?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2018, 23:14
Ответы с готовыми решениями:

Изменить курсор мыши при нажатии на клавишу клавиатуры
Ребят, подскажите пожалуйста, как изменить курсор при нажатии клавиши ИМЕННО на клавиатуре?

На форме предоставьте пользователю возможность вводить целые числа (в поле для ввода Edit). При нажатии на клавишу Enter (если поле не пусто) его соде
Разработайте приложение в соответствии с заданием. На форме предоставьте пользователю возможность вводить целые числа (в поле для ввода...

Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен вращаться по часово
Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен вращаться по часовой стрелке.

15
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
17.01.2018, 02:03
У меня на Д2007 фокус нормально перемещается на Edit2. А дыдын отключается кодом
Delphi
1
key:=#0;
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 10:00
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
при нажатии на Энтер просто слышен дыдын и курсор остается на месте
такое поведение возможно, если нет обработчика события OnKeyPress.
ЧайникСносиком, а Вы этот обработчик создавали или просто так в код вписали?
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 17:43  [ТС]
Да ничего не создавал, просто ткнул на edit и переименовал процедуру, а дальше просто шпарил кодом, не ту книжку я походу выбрал для изучения, чет там не до конца описывается, в итоге то у меня вот что получилось.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
unit Unit3;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Edit1KeyPress(Sender: TObject; var key:char);
    procedure Edit2KeyPress(Sender: TObject; var key: char);
    procedure Edit3KeyPress(Sender: TObject; var key:char);
    procedure Edit3Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
 
{$R *.dfm}
  //Клавиша нажата в поле "Текст"
procedure TForm3.Edit1KeyPress(Sender: TObject; var key: char);
begin
 if key=#13 //Если нажата клавиша Enter
  then Edit2.SetFocus; //То переместить курсор во второе поле
end;
 
//Клавиша нажата в поле "Целое число"
procedure TForm3.Edit2KeyPress(Sender: TObject; var key: char);
begin
 case key of
  '0'..'9',#8:; //Цифры и пробел
  #13: Edit3.SetFocus; //Если нажат пробел переместить курсор в третье поле
  '-': if Length(Edit2.Text)<>0 then key:=#0; //Писать знак "-" если не введено не одного знака
  else key:=#0; //Другие символы запрещены
  end;
 
 end;
 
//Клавиша нажата в поле "Дробное число"
procedure TForm3.Edit3Change(Sender: TObject);
begin
 
end;
 
procedure TForm3.Edit3KeyPress(Sender: TObject; var key: char);
begin
 case key of
 '0'..'9', #8:; //   Допускается печать цифр и знак пробел
 #13: Edit1.SetFocus; //Если нажат пробел переместить курсор в первое поле
 '.', ',':
  begin
   key:='.'; //десятичный разделитель "."
   if pos('.', Edit3.Text)<>0 //Если уже имеется "."
    then key:=#0 //то ничего не печатать
 end;
 '-': if Length(Edit3.Text)<>0  ////Писать знак "-" если не введено не одного знака
  then key:=#0;
  else
   key:=#0
  end
 
 
 end;
 
end.
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 17:54
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
'0'..'9', #8:; // * Допускается печать цифр и знак пробел
Ну, вообще-то в коде Вы написали, что допускаются цифры и BackSpace... Пробел имеет код #32
А до множеств Вы, я так понимаю, еще не дочитали?
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 17:57  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9', #8: ; // цифры и <Backspace>
#13: Edit3.SetFocus; // <Enter> — переместить курсор в поле Edit3
'-': if Length(Edit2.Text) <> 0 then Key := #0;
else Key := #0; // остальные символы не отображать
end;
end;
Вот кусок скопированный из книги, хорошая мне книга попалась, правдивая )))

Добавлено через 1 минуту
Ой, едрить мадрить, вот это я тупанул ))) чегой то мне голову переклинило, с чего я взял что пробел эт backspace
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 18:01
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
'0'..'9',#8:; //Цифры и пробел
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
'0'..'9', #8: ; // цифры и <Backspace>
???
А что Вам не нравится? Несмотря на корявость - код рабочий
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 18:03  [ТС]
Да не, тут я тупанул, кстати как он рабочий, все равно в каждом поле все печатается что хочешь, не до конца видать объяснили
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 18:15
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
все равно в каждом поле все печатается что хочешь
Попробуйте ввести в первое поле ввода что нибудь кроме цифр и минуса, если поле ввода пусто... Второе поле ввода добавил только для того, чтобы продемонстрировать реакцию первого поля ввода на Enter. Ну и BackSpace работает...
Вложения
Тип файла: rar Project1.rar (155.5 Кб, 9 просмотров)
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 18:19  [ТС]
ну у Вас то работает, а в моем коде нифига не работает
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 18:40
Изменил только номера Эдитов... Как видно на скрине даже комментарии не убрал... Кидайте архив с Вашим проектом, будем посмотреть...
Миниатюры
При нажатии на клавишу Энтер курсор должен перейти в следующее поле, а оно никак (  
1
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 19:00  [ТС]
не совсем я еще потерянный, скрин помог, вот оказывается где этот OnKeyPress, выбрал там и все зарабатало, как говорится, большое вам, огромное спасибо, только вот в книжке этой написано про это не было, вот и приходиться бороздить просторы бескрайнего интернета ))))
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 19:25
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
вот оказывается где этот OnKeyPress
Хм-м... Там его не выбирать, там его создавать надо. Именно про это я Вас в посте #3 и спрашивал... Ну, разобрались - и хорошо...
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 21
17.01.2018, 19:31  [ТС]
ну я выбираю edit1 нахожу OnKeyPress и выбираю там Edit1KeyPress и соответственно с двумя другими и все заработало как надо
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
17.01.2018, 20:03
Когда я говорил про создание обработчика события, я имел в виду следующее
1. Вы вибираете Edit, находите интересующее Вас событие и на пустом месте делаете двойной клик

2. Этим самым Вы получаете:
а. Объявление метода в классе формы
б. Пустую заготовку для написания собственного кода реализации метода
в. Сопоставление созданного метода с выбранным событием указанного Эдита.

Можно, конечно, сделать так, как это сделали Вы, но зачем? Почему бы не доверить это дела самой среде Дельфи?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
18.01.2018, 03:14
Цитата Сообщение от ЧайникСносиком Посмотреть сообщение
ну я выбираю edit1 нахожу OnKeyPress и выбираю там Edit1KeyPress и соответственно с двумя другими и все заработало как надо
А это ещё один вариант. Вполне нормальный. Для троешников надыбавших код на всемирной помойке вполне подойдёт. Но это разве что им не надо будет объяснять на зачёте/экзамене преподавателю, как они сей код написали.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2018, 03:14
Помогаю со студенческими работами здесь

Keylogger - увеличение счетчика при нажатии на одну клавишу и сброс при нажатии на другую
Можно ли в си создать Keylogger,если да то как?Мне нужно чтобы принажатии клавиши срабатывал счетчик,а после нажатии любой другой...

При нажатии кнопки закрытия окна, оно должно сворачиваться, а при нажатии на сворачивание - закрываться
привет всем)) задача такая: при нажатии кнопки закрытия окна, оно должно сворачиваться, а при нажатии на сворачивание - закрываться)) с...

В текстовое поле можно ввести код на языке JavaScript, а при нажатии на кнопку это код должен выполняться
Нужно сделать текстовое поле с возможностью ввода нескольких строк текста и кнопку. В поле можно ввести код на JS, а при нажатии на кнопку,...

Ошибка при нажатии на клавишу
Всем привет, у меня возникла такая проблема с кодом. Вот код private void WaitKey() { while...

Событие при нажатии на клавишу
Есть текстбокс для калькулятора, хочу, что бы можна было вводить только цифры и мои знаки, ну и определенные действия при них. Если жмякаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru