Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как правильно сделать скриншот всего экрана в Windows 10 с использованием Delphi и решить проблемы с масштабированием DPI

Delphi , ОС и Железо , Монитор и Экран

При работе с графическими приложениями на Windows 10, особенно при использовании высокого разрешения экранов, могут возникать проблемы с масштабированием DPI, что приводит к некорректному отображению элементов интерфейса и, в частности, к проблеме с созданием скриншотов всего экрана. В данной статье мы рассмотрим, как правильно настроить ваше приложение на Delphi для корректного получения скриншотов экрана, учитывая особенности масштабирования DPI в Windows 10.

Проблема с масштабированием DPI и скриншоты

При попытке сделать скриншот всего экрана в Windows 10 с использованием функций Windows API, таких как GetDeviceCaps, может возникнуть проблема, когда скриншот захватывает только небольшую часть экрана, обычно расположенную в верхнем левом углу. Это связано с тем, что Windows 10 в режиме масштабирования (scaling mode) возвращает некорректные размеры экрана для приложений, которые не поддерживают высокое разрешение DPI.

Решение проблемы

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

<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <dpiAware>true/PM</dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

Этот код включает поддержку Per-monitor DPI awareness, что позволяет приложению корректно работать с различными настройками DPI на разных мониторах.

Полный пример манифеста для Windows 10

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <!-- ... другие разделы манифеста ... -->
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true/PM</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
  <!-- ... другие разделы манифеста ... -->
</assembly>

Важные замечания

С версии Delphi 10 Seattle и выше, вы можете настроить совместимость с высоким DPI прямо в опциях проекта, не изменяя манифест вручную, если только вы не используете кастомный манифест.

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

Пример кода на Object Pascal (Delphi)

// Создание битмапа для скриншота
var
  b: TBitmap;
  DC: HDC;
begin
  b := TBitmap.Create;
  DC := GetDC(GetDesktopWindow);
  try
    // Получение корректных размеров экрана
    b.Width  := GetSystemMetrics(SM_CXVIRTUALSCREEN);
    b.Height := GetSystemMetrics(SM_CYVIRTUALSCREEN);
    // Создание скриншота
    BitBlt(b.Canvas.Handle, 0, 0, b.Width, b.Height, DC, 0, 0, SRCCOPY);
  finally
    ReleaseDC(GetDesktopWindow, DC);
    b.SaveToFile('screenshot.png');
    b.Free;
  end;

Использование GetSystemMetrics вместо GetDeviceCaps позволяет получить корректные размеры экрана, учитывая текущие настройки масштабирования DPI.

Заключение

Для корректного создания скриншотов всего экрана в Windows 10 с использованием Delphi, необходимо настроить ваше приложение на поддержку высокого DPI. Это позволит избежать проблем с масштабированием и обеспечит получение скриншотов с правильными размерами экрана.

Создано по материалам из источника по ссылке.

При решении проблемы с созданием скриншота всего экрана в Windows 10 с использованием Delphi, необходимо учитывать особенности масштабирования DPI и корректно настроить приложение для работы с высоким разрешением экранов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Монитор и Экран ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 23:39:05/0.008275032043457/1