Доброе время суток.
В параметрах проекта, есть выбор из пяти вариантов, но корректно работает только первый (Win 10 / Laz 2.0).
Суть проблемы в следующем. Программа берёт высоту экрана из переменных: Screen.Width и Screen.Height. Когда один монитор, то всё хорошо. А когда два монитора, то начинаются проблемы, т.к. по умолчанию возвращается значение монитора №1. При этом если сменить "Поддержку DPI" на Vista + 8.1|10, то начинает работать правильно, и брать высоту монитора, в котором раскрыта программа. Однако в таком положении "Поддержки DPI" -- рушится остальной интерфейс.
В общем суть вопроса, в том, можно ли как-то получить высоту именно активного монитора (из двух или больше), когда установлены параметры проекта лазаруса, такие, как на картинке? (нужны именно такие параметры, т.к. при остальных рушится интерфейс)
Поддержка DPI Windows в Lazarus
Модератор: Модераторы
-
max
Поддержка DPI Windows в Lazarus
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
max, ну ты же сам сказал "при значениях по умолчанию". Проверь значение разрешения для активного монитора просто запросив какой из них для окна активный.
-
max
Лекс Айрин писал(а):просто запросив какой из них для окна активный
Иииии? Как это сделать?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
maxтут не могу сказать, так как просто нет под рукой компа. Но я точно помню, что есть переменная типа monitor.
max
Можно вручную указать номер монитора:
Как определить именно текущий монитор сходу сказать не могу, никогда такой задачи не стояло. Если что-нибудь нарою и другие тут не напишут, то скину сюда...
Добавлено спустя 12 минут 33 секунды:
А вот, кстати, если мониторы не дублируют друг друга, то их можно вообще не различать - они тогда образуют одно экранное пространство.
Можно вручную указать номер монитора:
Код: Выделить всё
Screen.Monitors[Его_Номер].Width
Screen.Monitors[Его_Номер].HeightКак определить именно текущий монитор сходу сказать не могу, никогда такой задачи не стояло. Если что-нибудь нарою и другие тут не напишут, то скину сюда...
Добавлено спустя 12 минут 33 секунды:
А вот, кстати, если мониторы не дублируют друг друга, то их можно вообще не различать - они тогда образуют одно экранное пространство.
-
max
Vadim писал(а):то их можно вообще не различать - они тогда образуют одно экранное пространство.
Нет. Там всё хитрее, у каждого монитора свои DPI и + разный размер экрана и поэтому -- разница 100% есть.
Лекс Айрин писал(а):monitor
Работает, спасибо.
PS: Называется: (FormMain).Monitor.Width + (FormMain).Monitor.Height и оно как ни странно 100% правильно возвращает размер монитора, в котором окно программы.
Тему можно закрывать.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
max, да не за что. Рад, что помогло.
max писал(а):Тему можно закрывать.
Там вообще много интересного:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.Caption:= 'TMonitor';
with Memo1.Lines do
begin
Clear;
Add('TMonitor properties:');
Add('================');
Add(Format('Handle: %d (hint: %s)',[Self.Monitor.Handle, 'Identifies this monitor to the system. ']));
Add(Format('MonitorNum: %d (hint: %s)',[Self.Monitor.MonitorNum, 'Index of the monitor in the TScreen.Monitors list.']));
Add(Format('Left: %d (hint: %s)',[Self.Monitor.Left,'The leftmost screen coordinate of the display.']));
Add(Format('Height: %d (hint: %s)',[Self.Monitor.Height,'The height of the display.']));
Add(Format('Top: %d (hint: %s)',[Self.Monitor.Top,'The topmost screen coordinate of the display.']));
Add(Format('Width: %d (hint: %s)',[Self.Monitor.Width,'The width of the display.']));
Add(Format('BoundsRect: Rect(%d,%d,%d,%d) (hint: %s)',
[Self.Monitor.BoundsRect.Left,
Self.Monitor.BoundsRect.Top,
Self.Monitor.BoundsRect.Width,
Self.Monitor.BoundsRect.Height,
'The logical dimensions of the monitor, within the desktop.']));
Add(Format('WorkareaRect: Rect(%d,%d,%d,%d) (hint: %s)',
[Self.Monitor.WorkareaRect.Left,
Self.Monitor.WorkareaRect.Top,
Self.Monitor.WorkareaRect.Width,
Self.Monitor.WorkareaRect.Height,
'The usable display area, excluding a taskbar etc.']));
Add(Format('Primary: %s (hint: %s)',[BoolToStr(Self.Monitor.Primary,'True','False'),
'True if this is the primary monitor of the system.']));
Add(Format('PixelsPerInch: %d (hint: %s)',[Self.Monitor.PixelsPerInch,'Current PPI Monitor.']));
end;
end; Я себе сохранил на память.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
