OberonCore
https://forum.oberoncore.ru/

Програмная передача фокуса
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6855
Страница 1 из 1

Автор:  Александр К [ Вторник, 17 Май, 2022 20:21 ]
Заголовок сообщения:  Програмная передача фокуса

На форме имеются два текстовых поля ввода. Как после ввода одного знака в первое поле передать фокус во второе поле не кликая по нему мышкой?

Автор:  Иван Денисов [ Вторник, 17 Май, 2022 21:48 ]
Заголовок сообщения:  Re: Програмная передача фокуса

Получился пример, который работает, когда форма открыта как внутренний (Aux) диалог.

Запускается уведомитель, получает контроллер контейнеров, проходит по видам контейнера в поисках нужного поля и его выделяет.

Код:
MODULE TestFocusChange;

   IMPORT Containers, Controls, Views, Dialog;

   VAR
      str1*, str2*: ARRAY 16 OF CHAR;

   PROCEDURE Notifier* (op, from, to: INTEGER);
   VAR c: Containers.Controller; v: Views.View; done: BOOLEAN;
   BEGIN
      IF op = Dialog.changed THEN
         c := Containers.Focus();
         IF c # NIL THEN
            c.GetFirstView(Containers.any, v);
            done := FALSE;
            WHILE (v # NIL) & ~ done DO
               WITH v: Controls.Control DO
                  IF v.prop.link = "TestFocusChange.str2" THEN
                     c.SelectAll(FALSE); (* убрать выделения *)
                     c.SetFocus(v); (* сделать вид фокусным *)
                     done := TRUE
                  END
               ELSE END;
               c.GetNextView(Containers.any, v)
            END
         END
      END
   END Notifier;

END TestFocusChange.

"StdCmds.OpenAuxDialog('Test/Rsrc/FocusChange.odc','test')"



Вложения:
Снимок экрана от 2022-05-18 01-51-11.png
Снимок экрана от 2022-05-18 01-51-11.png [ 97.51 КБ | Просмотров: 4332 ]
Test.zip [3.25 КБ]
Скачиваний: 141

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/