Перейти к содержанию
Fire Monkey от А до Я
  • 0

Вторичное окно программы без передачи ему фокуса


AngryOwl

Вопрос

Опубликовано

Требуется создать окно, не главное. Отобразить его, при этом не передавая ему фокус.
Popup-окно не предлагать.
Окно должно быть стандартным или иметь свойства:
BorderStyle = None
FormStyle = Normal
Transparent = True
Собственно значение этих параметров не имеет значения. Но не Popup, так как оно исчезает сразу же как только фокус получит любой элемент программы не в данном Popup-окне.

 

Пример:

 

Допустим есть главная форма, на которой расположен элемент TMemo. Фокус на TMemo и Вы печатаете текст. В какой-то момент времени появляется вторичная форма приложения на некоторое время, но фокус не должен отвалиться из TMemo!

 

Если это будет Popup-форма, то как только Вы попытаетесь изменить размер главной формы, либо переместить ее - Popup-форма сразу пропадает.

 

Если будет стандартная форма, то при ее появлении фокус сразу "уходит" из TMemo главной формы...

 

(Существует множество вариантов, когда нужно показать новую форму, при этом чтобы текущая форма или элемент на ней не теряли фокус)

P.S. В XE5 было возможно создавать не Popup-формы без передачи им фокуса, а в XE6 - нет...

 

P.P.S. Приложил в качестве примера проект. Надеюсь что понятно объяснил проблему (не мою, а FMX).

SecondaryForm.zip

Рекомендуемые сообщения

  • 0
  • Администраторы
Опубликовано

У попап формы было свойство отвечающее за то будет ли она закрываться при смене фокусе, перемещении родительского окна и тд или нет. Что-то вроде StayOpened.

  • 0
Опубликовано

Может я тормоз, но нигде не наблюдаю этого свойства у окна. И вообще нигде его не наблюдаю в исходниках...

(XE7-XE8)

 

З.Ы. повторюсь - если не ошибюсь, то в более старых версиях (XE4-5) нечто такое было, и оно работало. Сейчас такого нет.

  • 0
Опубликовано (изменено)

Я решал аналогичную задачу таким способом:



procedure TForm2.FormActivate(Sender: TObject);
begin
  PFormStyle(@FormStyle)^ := TFormStyle.Popup;
end;
Изменено пользователем FIL
  • 0
Опубликовано

 

Я решал аналогичную задачу таким способом:

procedure TForm2.FormActivate(Sender: TObject);
begin
  PFormStyle(@FormStyle)^ := TFormStyle.Popup;
end;

 

PFormStyle(@FormStyle)^ := TFormStyle.Popup;

 

Нельзя ли чуть подробнее? Что есть что?

Какой у Вас стиль формы Form2 в DesignMode?

 

З.Ы. Нужна форма со свойством StayOnTop, но в тоже время не получающая фокус, в момент когда она отображается (Show или Visible := True). Просто форма со свойством Popup не подходит, так как она исчезает при получении фокуса любой другой формой приложения.

  • 0
Опубликовано

Нельзя ли чуть подробнее?

 

 

Идея тут следующая (если требуется именно StayOnTop):

Форма создается как StayOnTop и прячется за пределы экрана.

Приведенный мною код меняет значение соответствующего поля формы, не вызывая при этом реакции на изменение значения св-ва (пересоздание формы как Popup и т.п.).

Т.е. форма остается StayOnTop, но когда дельфийский код принимает решение об ее активации и т.п. действиях, то он "видит" ее как Popup, т.к. FormStyle = Popup.

 

Тестовый проект прилагаю (проверял на Win7 x64):

NotActiveStayOnTopForm.zip

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...