Страница 1 из 2

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 13:14
gopstop2007
Приветствую всех.
Заметил, что окно для ввода пароля открывается раньше фрейма приложения, не всегда становится активным при запуске программы.
То есть, при запуске программы, по окну с паролем надо дополнительно щёлкнуть мышью. Хотелось бы сразу вводить логин и пароль, а не заморачиваться с мышью. )
У меня всегда активно, у некоторых клиентов нет, это наблюдается при работе с windows 10.
Настройки окна не MDI, в Propererties - Option, активно только ModalWindow.
Как сделать окно всегда активным?

С10 ABC

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 15:02
kreator
Modal Window - нерабочая опция сейчас вроде бы. А в какой момент вызывается это окно? Я бы перенёс вызов до открытия фрейма. Уточните этот момент.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 15:33
Дед Пахом
Я бы вызывал в Event:OpenWindow фрейма.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 16:18
gopstop2007
kreator писал(а): 30 Ноябрь 2025, 15:02 Modal Window - нерабочая опция сейчас вроде бы. А в какой момент вызывается это окно? Я бы перенёс вызов до открытия фрейма. Уточните этот момент.
Открывается до открытия App Frame приложения, открытие в app frame в Embeds - Run Procedute(), BYTE, Virtual (Preority - 2250)
Дед Пахом писал(а): 30 Ноябрь 2025, 15:33 Я бы вызывал в Event:OpenWindow фрейма.
Не совсем понял, что в чем вызвать )

Забыл уточнить, это приложение мульти-DLL.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 16:22
Дед Пахом
gopstop2007 писал(а): 30 Ноябрь 2025, 16:18 Не совсем понял, что в чем вызвать )
Я бы вызывал процедуру ввода пароля в Event:OpenWindow фрейма.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 16:31
gopstop2007
Дед Пахом писал(а): 30 Ноябрь 2025, 16:22
gopstop2007 писал(а): 30 Ноябрь 2025, 16:18 Не совсем понял, что в чем вызвать )
Я бы вызывал процедуру ввода пароля в Event:OpenWindow фрейма.
Много чего придется переделывать, проверка происходит до открытия, если логин или пароль не верен, то возвращается Level:Cancel и фрейм даже не открывается.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 16:44
Дед Пахом
Я предпочитаю такие вещи проверять при уже открытом фрейме, так юзер видит, куда он, собственно, логинится.
И все изменения, насколько я понимаю, должны свестись к переносу 3-х строчек в другую точку.

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

!- это после OPEN(AppFrame)
!IF Login() = FALSE
!  RETURN Level:Cancel
!END

!- это в Event:OpenWindow
IF Login() = FALSE
  POST(Event:CloseWindow)
END

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 17:04
gopstop2007
Дед Пахом писал(а): 30 Ноябрь 2025, 16:44 Я предпочитаю такие вещи проверять при уже открытом фрейме, так юзер видит, куда он, собственно, логинится.
И все изменения, насколько я понимаю, должны свестись к переносу 3-х строчек в другую точку.

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

!- это после OPEN(AppFrame)
!IF Login() = FALSE
!  RETURN Level:Cancel
!END

!- это в Event:OpenWindow
IF Login() = FALSE
  POST(Event:CloseWindow)
END
Если бы, у меня сделано так, программа онлайн, сначала ввод пароля, потом загрузка данных(если есть изменения) с сервера и еще некоторые мелочи.
Если сделать как Вы указали, то после ввода пароля загрузка данных будет происходить уже при открытом фрейме, их бывает достаточно много (более 100 таблиц), клиенты не любят ждать и пытаются начать работать с программой ) Потом еще в зависимости от роли (привилегии) пользователя открывается нужный вид фрейма приложения.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 17:44
Игорь Столяров
gopstop2007 писал(а): 30 Ноябрь 2025, 17:04 сначала ввод пароля, потом загрузка данных(если есть изменения) с сервера
Ну так и сделайте как написали. Т.е.:

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

  StartMySoft Procedure
    Code  
    If CheckPasswordWindow() = True
       If LoadInfoServer() = True   
          Main()
       end          
    end
Нет ведь необходимости обязательно всё делать внутри фрейма (Main) ... :)

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 18:17
finsoftrz
Замечал подобное поведение, но только когда программа перезапускается по chain.
Дед Пахом писал(а): 30 Ноябрь 2025, 16:22
gopstop2007 писал(а): 30 Ноябрь 2025, 16:18 Не совсем понял, что в чем вызвать )
Я бы вызывал процедуру ввода пароля в Event:OpenWindow фрейма.
Не всем подходит. Например, у меня несколько фреймов, которые могут выбираться в зависимости от роли пользователя.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 20:16
gopstop2007
Игорь Столяров писал(а): 30 Ноябрь 2025, 17:44
gopstop2007 писал(а): 30 Ноябрь 2025, 17:04 сначала ввод пароля, потом загрузка данных(если есть изменения) с сервера
Ну так и сделайте как написали. Т.е.:

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

  StartMySoft Procedure
    Code  
    If CheckPasswordWindow() = True
       If LoadInfoServer() = True   
          Main()
       end          
    end
Нет ведь необходимости обязательно всё делать внутри фрейма (Main) ... :)
Возможно ошибаюсь, Вы предложили принцип такой же какой у меня сейчас, как сделать окно CheckPasswordWindow из Вашего примера всегда активным при запуске, чтобы можно было сразу вводить пароль, не указывая на окно пароля мышкой?

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 20:43
Игорь Столяров
gopstop2007 писал(а): 30 Ноябрь 2025, 20:16 Вы предложили принцип такой же какой у меня сейчас, как сделать окно CheckPasswordWindow из Вашего примера всегда активным при запуске
Попробуйте пожалуйста не запутываться в наворотах. :)

Я предложил (*1):
1. Сделать Source-процедуру для запуска программы и в ней установить все настройки, локализацию и т.д.
2. После этого открыть отдельное (есстессно NOT MDI) окно для авторизации пользователя (*2)
3. При успешной авторизации пользователя выполнить (если есть) загрузку данных и собственно потом уже открыть фрейм.
4. Всё.

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

*1. Не предложил. Мы сами так 20 лет работаем во всех проектах.
*2. Авторизация - это не обязательно ввод пароля. Например у нас уже лет 5 все перешли на считывание
сканером QR кода с хешем на пропуске. Очень удобно. А ручной ввод пароля - это аварийная ситуация.

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 21:45
gopstop2007
Игорь Столяров писал(а): 30 Ноябрь 2025, 20:43
gopstop2007 писал(а): 30 Ноябрь 2025, 20:16 Вы предложили принцип такой же какой у меня сейчас, как сделать окно CheckPasswordWindow из Вашего примера всегда активным при запуске
Попробуйте пожалуйста не запутываться в наворотах. :)

Я предложил (*1):
1. Сделать Source-процедуру для запуска программы и в ней установить все настройки, локализацию и т.д.
2. После этого открыть отдельное (есстессно NOT MDI) окно для авторизации пользователя (*2)
3. При успешной авторизации пользователя выполнить (если есть) загрузку данных и собственно потом уже открыть фрейм.
4. Всё.

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

*1. Не предложил. Мы сами так 20 лет работаем во всех проектах.
*2. Авторизация - это не обязательно ввод пароля. Например у нас уже лет 5 все перешли на считывание
сканером QR кода с хешем на пропуске. Очень удобно. А ручной ввод пароля - это аварийная ситуация.
Интересно, привык, что первым запускается Main - Frame ) ,а потом все остальное.
Век живи, век учись ) Надо попробовать, чтобы проблемы какие то не вылезли )

Окно не всегда активно

Добавлено: 30 Ноябрь 2025, 22:10
kreator
gopstop2007 писал(а): 30 Ноябрь 2025, 16:18 Открывается до открытия App Frame приложения, открытие в app frame в Embeds - Run Procedute(), BYTE, Virtual (Preority - 2250)
Перенесите свой текст в метод Init фрейма, в начало. У нас вызов стоит после:

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

  CLEAR(GlobalRequest)                                     ! Clear GlobalRequest after storing locally
  CLEAR(GlobalResponse)
  SELF.AddItem(Toolbar)
Проблем никогда не было. В методе Run для фрейма разве есть точки вставки? :shock:

Окно не всегда активно

Добавлено: 01 Декабрь 2025, 10:45
gopstop2007
kreator писал(а): 30 Ноябрь 2025, 22:10
gopstop2007 писал(а): 30 Ноябрь 2025, 16:18 Открывается до открытия App Frame приложения, открытие в app frame в Embeds - Run Procedute(), BYTE, Virtual (Preority - 2250)
Перенесите свой текст в метод Init фрейма, в начало. У нас вызов стоит после:

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

  CLEAR(GlobalRequest)                                     ! Clear GlobalRequest after storing locally
  CLEAR(GlobalResponse)
  SELF.AddItem(Toolbar)
Проблем никогда не было. В методе Run для фрейма разве есть точки вставки? :shock:
Не понял, а почему их не должно быть в методе Run?