Альтернатива для BorderStyle=bsNone + WindowState=wsMaximize

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Альтернатива для BorderStyle=bsNone + WindowState=wsMaximize

Сообщение VirtUX » 28.06.2021 21:05:30

Если у TForm установлено BorderStyle := bsNone, то попытка сделать WindowState := wsMaximized проигнорируется классом.
В 2009 году вроде как это исправили для версии Lazarus 0.9.29.
Но у меня почему-то не работает.
OS: KDE Neon
Среда разработки собрана под QT5

Может этот баг проявляется только под QT5? Может кто-нибудь проверить у себя под другими виджетсетами?
И если это баг, то можно-ли как-то решить проблему альтернативно? Например:
Код: Выделить всё
Form.BoundsRect:= Form.Monitor.WorkareaRect;

мог бы помочь, если бы окно не расползалось по всему монитору, и тем самым прячась частично под панелями. Может тут можно еще как-то определить координаты панелей и вычесть их из TRect?
И, в принципе, что происходит во время WindowState := wsMaximized, когда BorderStyle <> bsNone? Как оно работает?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение Vadim » 29.06.2021 02:48:19

Я на винде делал такое - форма должна была полностью закрывать рабочий стол и убираться после прикладывания rfid-карты к датчику. Lazarus 2.0.10. BorderStyle = bsNone. В Linux Lazarus был собран под KDE (чтобы при новой установке не волочь кучу зависимостей) и тоже прекрасно работало.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение VirtUX » 29.06.2021 11:52:04

Vadim писал(а):полностью закрывать рабочий стол

не проблема:
Код: Выделить всё
WindowState:= wsFullScreen

Мне нужно повторить работу кнопки "развернуть на весь экран". То есть панели не должны перекрываться окном или перекрывать окно.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение wavebvg » 29.06.2021 12:55:54

Для GTK2 дёрните так:

Код: Выделить всё
 
  Gtk2Proc.SetWindowFullScreen(Self, True);


Self -- это форма.

В трекере баг есть, но всем всё равно.

Скрыть декорации:

Код: Выделить всё
var
  VWindow: PGtkWindow;   
begin   
  VWindow := {%H-}PGtkWindow(Self.Handle);   
  gtk2.gtk_window_set_resizable(VWindow, False);
  gtk2.gtk_window_set_decorated(VWindow, False);
  gtk2.gtk_widget_set_size_request(PGtkWidget(VWindow), Width, Height);
end;


"Стандартный" способ не использовать.
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение VirtUX » 29.06.2021 17:39:53

Заметил, что этот баг наблюдается если подключено более одного монитора. При одном мониторе - поведение, как и ожидается.
Если максимизировать на главном мониторе, то окно смещается на ширину панели за границу монитора. Если максимизировать на дополнительном мониторе, окно прячется под саму панель.
То есть получается, что нужно вычислить ширину и расположение панели, и тогда можно будет развернуть окно, как нужно.
Вопрос: как можно вычислить ширину и расположение панели на рабочем столе?

Добавлено спустя 1 минуту 42 секунды:
Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaximize
Тут еще надо учесть, что панелей может быть более одной. А еще интересно как на MacOS оно будет?...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение wavebvg » 29.06.2021 18:36:43

В принципе, можете посмотреть тут, как у меня получилось это сделать на поделке (делал себе временно как рабочий инструмент)
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение VirtUX » 29.06.2021 19:05:13

Нужно кроссплатформенное решение без привязки к GTK, Qt, WIN32 или еще к чему.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Альтернатива для BorderStyle=bsNone + WindowState=wsMaxi

Сообщение wavebvg » 30.06.2021 14:19:40

VirtUX писал(а):Нужно кроссплатформенное решение без привязки к GTK, Qt, WIN32 или еще к чему.

Ну тут будет много проблем. Под Win32 и Gtk2 просто работать не будет (но можно заставить). Под Qt нужно спросить у постояльцев.
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru