Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
1

Форма всегда поверх всех остальных форм

16.09.2018, 19:01. Просмотров 213. Ответов 15
Метки нет (Все метки)

Ребят У меня опять затруднение, возникла необходимость показывать одну форму всегда сверху других форм программы,
Delphi
1
Application.MainFormOnTaskbar := True;
убрано из программы поэтому все окна перемещаются друг над другом свободно, ShowModal не подходит так как нужно чтобы окна которые будут сзади могли иметь фокус и могли свободно перемещаться по экрану, fsStayOnTop тоже не подходит так как форма показывается поверх всего, а не только моей программы. Какие еще есть варианты? Или хотя бы сделать так, чтобы форма была всегда поверх той формы из которой она была вызвана (показана).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2018, 19:01
Ответы с готовыми решениями:

Форма поверх остальных форм
У меня написан следующий код: procedure TForm2.Button1Click(Sender: TObject); begin...

Форма поверх других форм
Итак, мне нужно сделать так, чтобы форма 3 была поверх формы 2, и при этом работать с формой 2...

Компонент Image Поверх всех остальных, как?
Компонент Image Поверх всех остальных компонентов. Как это зделать? цель:под ним находиться...

Форма поверх всех окон
никак не допишу родительский контроль подскажите, как сделать форму поверх всех окон (прям всех)...

Форма поверх всех окон
Подскажите как сделать так чтобы после срабатывания таймера форма восстанавливалась из трея поверх...

15
Ашотик2018
14 / 13 / 10
Регистрация: 25.02.2018
Сообщений: 152
17.09.2018, 12:50 2
Цитата Сообщение от Ladushka Посмотреть сообщение
Какие еще есть варианты?
Не знаю, поможет ли, поскольку все в вашем задании изрядно запутанно, но все вот еще вариант.
На форму киньте CheckBox и пропишите следующий код:
Delphi
1
2
3
4
5
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
  SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );
end;
При активном чек-боксе форма висит поверх всех окон, если галочку снять, то уходит за любое окно.
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,746
Записей в блоге: 15
17.09.2018, 13:13 3
а что FormStyle = fsStayOnTop уже отменили?
0
D1973
Модератор
3550 / 2560 / 1249
Регистрация: 21.01.2014
Сообщений: 10,764
Записей в блоге: 3
Завершенные тесты: 1
17.09.2018, 14:35 4
krapotkin,
Цитата Сообщение от Ladushka Посмотреть сообщение
fsStayOnTop тоже не подходит так как форма показывается поверх всего, а не только моей программы.
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,746
Записей в блоге: 15
17.09.2018, 15:05 5
ага, сорри, не заметил сразу
поверх - это значит внутри клиентской области или нет ?

Добавлено через 59 секунд
в конце концов при деактивации программы можно убирать и StayOnTop
она правда при этом пересоздает окно, но..
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
17.09.2018, 16:11  [ТС] 6
Цитата Сообщение от krapotkin Посмотреть сообщение
поверх - это значит внутри клиентской области или нет ?
Имеется пять форм, четыре из них свободно между собой перемещаются по экрану, так же они могут быть относительно друг друга на переднем плане или на заднем (смотря какая форма активна и используется), а пятая форма при вызове должна находится всегда на переднем плане относительно всех других (четырех) форм, но при этом нужно чтобы оставалась возможность их перетаскивать по экрану. Ашотик2018, проверила, но работает также как и fsStayOnTop пятая форма по верх всего (например, открываю браузер и она сверху него).
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
17.09.2018, 16:56  [ТС] 7
Вот для наглядности набросала проект.
Delphi
1
2
3
4
5
6
7
8
  Application.Initialize;
  //Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.Run;
Если с закомментированной строкой нажать кнопку "Форма 5" это то что есть сейчас, если строку раскомментировать и нажать кнопку "Форма 5" получится то что нужно.
0
Вложения
Тип файла: rar testform.rar (2.25 Мб, 1 просмотров)
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,746
Записей в блоге: 15
17.09.2018, 18:06 8
мне кажется, это просто проблема архитектуры интерфейса
ну не должно так быть
Есть общие принципы UI. Все придумано до нас. И реализовано в стилях формы.
На какую известную программу будет похоже ваше приложение ?
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
17.09.2018, 18:25  [ТС] 9
Цитата Сообщение от krapotkin Посмотреть сообщение
На какую известную программу будет похоже ваше приложение ?
Даже не думала об этом
Вот это бы применить только к одной форме
Delphi
1
Application.MainFormOnTaskbar := True;
было бы замечательно

Добавлено через 3 минуты
Нужно чтобы работало как если бы я показывала форму так ShowModal, но при этом могла перемещать (сворачивать, разворачивать на весь экран) формы которые находятся позади нее.
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,746
Записей в блоге: 15
17.09.2018, 21:31 10
MainFormOnTaskbar это отображение главной формы на панели задач
при чем тут это вообще?
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
17.09.2018, 22:42  [ТС] 11
Цитата Сообщение от krapotkin Посмотреть сообщение
при чем тут это вообще?
Не знаю, но формы с ним не уходят на задний план при фокусе на другой форме, а без него уходят.

Добавлено через 21 секунду
В примере это наглядно видно.
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
18.09.2018, 14:20  [ТС] 12
Раз никто не знает, тогда чтобы не создавать новую тему раз уж тут речь идет о формах, в Properties ставлю MinHeight=200 а MinWidth=400, при запуске программы форма становится 400х200, но потом нажимаю на кнопку с таким кодом:
Delphi
1
2
Constraints.MinHeight:=600;
Constraints.MinWidth:=800;
форма становится размером 800х600, но когда пытаюсь ее уменьшить она все равно уменьшается до 400х200. Как правильно это обработать чтобы при запуске был один минимальный размер, а после нажатия кнопки другой.
0
Ашотик2018
14 / 13 / 10
Регистрация: 25.02.2018
Сообщений: 152
18.09.2018, 15:11 13
Цитата Сообщение от Ladushka Посмотреть сообщение
Constraints
А Вы извиняюсь за вопрос, к чему обращаетесь тут?
Вам нужно чтобы по клику кнопки размер формы изменялся на определенные значения в ширину/высоту, ну так и обращайтесь к самой форме напрямую, а не к какому-то там свойству.
Delphi
1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Height:=500;
Form1.Width:=300;
end;
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,746
Записей в блоге: 15
18.09.2018, 15:59 14
ну, для начала не Form1.height, а просто Height
а потом, автор говорит же, что
Цитата Сообщение от Ladushka Посмотреть сообщение
форма становится размером 800х600,
а измененные constraints не работают

я никогда не пользовался этой штукой, поэтому возможно это просто баг

я бы просто в OnResize поставил две строки проверки Width и Height, которые бы и решали вопрос
0
Ашотик2018
14 / 13 / 10
Регистрация: 25.02.2018
Сообщений: 152
18.09.2018, 16:25 15
Цитата Сообщение от Ladushka Посмотреть сообщение
Как правильно это обработать чтобы при запуске был один минимальный размер, а после нажатия кнопки другой.
Как я понял ей нужен фиксированный минимальный размер формы при запуске, и потом изменение размера все той же формы до определенного по нажатию кнопки, что собственно выше и описал. Хотя в минимальных и максимальных значениях задавал другие размеры, по нажатию кнопки третьи, работало.
0
Ladushka
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 39
19.09.2018, 01:20  [ТС] 16
Цитата Сообщение от krapotkin Посмотреть сообщение
поэтому возможно это просто баг
Может быть. Так как я указывала напрямую в Properties, то кодом не менялся даже размер формы! Меня это и смутило Пришлось все расписывать кодом в трех разных процедурах чтобы все заработало, в том числе и OnResize. И с формой поверх остальных я тоже разобралась Всем спасибо.
0
19.09.2018, 01:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2018, 01:20

Форма поверх всех окон
Почему если у формы стоит в параметрах FormStyle fsstayontop, то при запуске какой нибудь игры...

Форма поверх всех окон Windows
Доброго времени суток! Пытаюсь сделать так, чтобы форма delphi выводилась поверх остальных окон:...

Вторая форма поверх всех окон
Здравствуйте. Есть две формы Form1 и Form2. Нужно сделать чтобы при нажатии на кнопку вторая форма...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru