Последняя версия DataExpress 3 beta от 9 августа 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Расширения
ИзображениеИзображениеИзображение

Установка курсора в поле. Фокус ввода (SetFocus).

Все о том как сделать что-то с помощью скриптов.
Scorpodracon
Интересующийся
Сообщения: 107
Зарегистрирован: 28 фев 2017, 12:05

Установка курсора в поле. Фокус ввода (SetFocus).

Сообщение Scorpodracon » 28 фев 2017, 12:36

Что нужно ввести в скрипте для того, чтобы после добавления записи в поле формы при нажатии кнопки, курсор опять автоматически оказывался в поле записи?
Например:
Ввод информации (курсор есть)
1.jpg
1.jpg (23.44 КБ) 2303 просмотра


После нажатия кнопки курсор пропадает
2.jpg
2.jpg (27.61 КБ) 2303 просмотра


Исходный код для скрипта:
3.jpg
3.jpg (144.63 КБ) 2303 просмотра


Нужно, чтобы курсор после ввода информации автоматически ставился опять в поле ввода информации. Помогите решить вопрос

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: 13 фев 2017, 17:42

Re: Возврат курсора в поле ввода информации после нажатия кнопки

Сообщение neitri » 28 фев 2017, 13:06

Код: Выделить всё

dxEdit1.Setfocus;

dxEdit1 имя компонента.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 27 раз

Re: Возврат курсора в поле ввода информации после нажатия кнопки

Сообщение jurist23rus » 28 фев 2017, 13:17

Уважаемый Scorpodracon, размещайте код скрипта в посте, обрамив специальными тегами Code (есть кнопочка на панели), чтобы получалось вот так

Код: Выделить всё

тут код

Выкладывать скриншоты с кодом не нужно - это создаёт неудобства другим пользователям.

Наш форум позволяет размещать картинки на нём, прямо при создании сообщений (кнопка "Добавить"), рекомендую Вам также пользоваться этой возможностью - это гораздо удобней, чем пользоваться сторонними хостингами, как для Вас, так и для других пользователей.
Destiny is a very convenient word for those who never take decisions.

Scorpodracon
Интересующийся
Сообщения: 107
Зарегистрирован: 28 фев 2017, 12:05

Re: Возврат курсора в поле ввода информации после нажатия кнопки

Сообщение Scorpodracon » 28 фев 2017, 13:34

Большое спасибо. Приму к сведению.

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 27 раз

Re: Возврат курсора в поле ввода информации после нажатия кнопки

Сообщение jurist23rus » 28 фев 2017, 13:46

Вообщем-то ответ на вопрос получен и добавить к нему нечего. Единственное несколько интересных моментов касательно SetFocus хочу также выложить, раз уж тема создана. Не пропадать же ей теперь ;) Сразу оговорюсь, автор не я - это цитата из книги.

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

Код: Выделить всё

function Focused: Boolean; // возвращает true в случае успеха

Особо нетерпеливый элемент управления имеет возможность потребовать от системы предоставления ему фокуса ввода

Код: Выделить всё

procedure SetFocus;

Однако в некоторых случаях получение фокуса ввода оконным элементом управления попросту невозможно. Такая ситуация возникает, когда объект расположен на неактивном окне, невидим или вообще физически отключен. Если в таких обстоятельствах мы попытаемся программным образом передать фокус компоненту, то результатом станет генерация исключительной ситуации. Поэтому перед вызовом метода SetFocus() следует предварительно проверить готовность объекта получить фокус. Для этого предназначен метод:

Код: Выделить всё

function CanFocus: Boolean; //в случае успеха возвращает true

События перехода фокуса происходят при щелчке мышью по компоненту или нажатии клавиши <Tab>. Процесс получения и потери фокуса ввода соответственно сопровождается двумя событиями:

Код: Выделить всё

property OnEnter: TNotifyEvent; //объект получает фокус ввода
property OnExit : TNotifyEvent; //объект теряет фокус ввода
Destiny is a very convenient word for those who never take decisions.

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 27 раз

Re: Возврат курсора в поле ввода информации после нажатия кнопки

Сообщение jurist23rus » 28 фев 2017, 13:50

На самом деле тема очень интересная любому, кто хоть чуть-чуть увлекается программированием. На эту тему было бы интересно даже отдельный видеоурок сделать. Если у народа будет к этому интерес, может я его и сделаю :roll:
Destiny is a very convenient word for those who never take decisions.

Scorpodracon
Интересующийся
Сообщения: 107
Зарегистрирован: 28 фев 2017, 12:05

Re: Установка курсора в поле. Фокус ввода (SetFocus).

Сообщение Scorpodracon » 28 фев 2017, 13:58

Да, я думаю очень интересная тема. Особенно это хорошо, если нужно проследить какую-то последовательность ввода данных путем перемещения курсора в нужное место. Ну и вообще для более автоматизированной работы хорошо, чтобы не двигать мышкой постоянно.

Scorpodracon
Интересующийся
Сообщения: 107
Зарегистрирован: 28 фев 2017, 12:05

Re: Установка курсора в поле. Фокус ввода (SetFocus).

Сообщение Scorpodracon » 28 фев 2017, 14:59

Теперь еще один нюанс возник, при нажатии кнопки с вводом данных появляется одна новая пустая строка для ввода в нее данных. Если нажать выход из окна ввода данных, она остается. Как сделать так, чтобы она при выходе из окна ввода данных исчезала?
Такой вариант как я понял возникает, если при вводе данных нажимается кнопка ОК и окно закрывается, напишите код для этого действия пожалуйста.

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 27 раз

Re: Установка курсора в поле. Фокус ввода (SetFocus).

Сообщение jurist23rus » 28 фев 2017, 15:35

при нажатии кнопки с вводом данных появляется одна новая пустая строка для ввода в нее данных

Что-то я вас не понимаю. Давайте выражаться яснее. Ваш код не создаёт никаких СТРОК, он создаёт ЗАПИСЬ. На форме есть поле "Название конфедерации" и если поле вы не заполнили, то есть не ввели названия конфедерации, то запись конечно же будет пустая. Более того в Вашем коде (выложите его наконец, так как я вас просил, а не скриншотом) вы сами просите программу создавать запись с пустым полем.

Вот эта просьба:

Код: Выделить всё

self['Название конфедерации'] = '';


Сами просите и еще недовольны. Нехорошо :)
Destiny is a very convenient word for those who never take decisions.

Scorpodracon
Интересующийся
Сообщения: 107
Зарегистрирован: 28 фев 2017, 12:05

Re: Установка курсора в поле. Фокус ввода (SetFocus).

Сообщение Scorpodracon » 28 фев 2017, 15:52

Мой код:

Код: Выделить всё

procedure ClickButton (Sender: TObject);
begin
Self.Append;
Self['Название конфедерации'] := '';
Self.Post;
dxEdit1.Setfocus;
end;



procedure Form_Create;
begin
dxButton1.OnClick :=@ ClickButton;
end; 


Я хочу, чтобы при выходе из окна ввода записей, пустая строка исчезала.
Смысл в том, что можно вводить каждую запись каждый раз нажимая на "крестик", после этого нажимая ОК, тогда пустая строка не появляется в конце, но это неудобно, поэтому я сделал кнопку для того, чтобы не нажимать каждый раз на "крестик". После этого, нажимая на ОК или ОТМЕНА мы выходим из окна ввода записей и остается дополнительная пустая строка. Я хочу избавиться от нее, вот что я имею ввиду.

Кстати я убрал

Код: Выделить всё

Self['Название конфедерации'] := '';


И ничего не поменялось