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

Как сделать скриншот активного окна в Delphi без захвата панели заголовка

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

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

Проблема

Разработчик столкнулся с проблемой, когда при попытке сделать скриншот активного окна в Delphi не захватывалась панель заголовка. Использовался следующий код:

procedure ScreenShot(activeWindow: bool; destBitmap : TBitmap) ;
var
    w,h : integer;
    DC : HDC;
    hWin : Cardinal;
    r : TRect;
begin
    if activeWindow then
    begin
        hWin := GetForegroundWindow;
        DC := GetWindowDC(hWin) ;
        GetWindowRect(hWin,r) ;
        w := r.Right - r.Left;
        h := r.Bottom - r.Top;
    end
    // ... Остальная часть кода ...
end;

В результате выполнения кода панель заголовка активного окна не отображалась на скриншоте.

Решение

Причиной проблемы могло быть использование компонентов визуального стиля, таких как AlphaSkins для Delphi 7. В данном случае, изменение свойства AllowExtBorders компонента sSkinProvider1 на False позволило исключить панель заголовка из скриншота:

sSkinProvider1.AllowExtBorders:=False;
Form1.Repaint;

После этого, при выполнении функции ScreenShot, скриншот активного окна не будет содержать панель заголовка. Важно восстановить значение свойства AllowExtBorders обратно в True после выполнения скриншота.

Пример кода

procedure TForm1.BitBtn1Click(Sender: TObject);
var
    path, b: TBitmap;
begin
    sSkinProvider1.AllowExtBorders:=False;
    Form1.Repaint;
    path := ExtractFilePath(Application.ExeName) + 'Screenshot\';
    b := TBitmap.Create;
    try
        ScreenShot(TRUE, b);
        b.SaveToFile(path + 'Screenshot_1.png');
    finally
        b.FreeImage;
        FreeAndNil(b);
        sSkinProvider1.AllowExtBorders:=True;
        // ... Остальная часть finally блока ...
    end;
end;

Заключение

Использование компонентов визуального стиля может привести к проблемам при попытке сделать скриншот активного окна. В данном случае, изменение свойства AllowExtBorders позволяет исключить панель заголовка из скриншота. Важно помнить о необходимости восстановить это свойство после выполнения скриншота.

Этот метод был успешно протестирован в среде Delphi 5.

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

Как исключить захват панели заголовка активного окна при создании скриншота в программе на Delphi, используя функцию захвата экрана.


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

Получайте свежие новости и обновления по 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:06:15/0.0036079883575439/0