При разработке программ на языке 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 позволило исключить панель заголовка из скриншота:
После этого, при выполнении функции 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