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

Как отловить CLX форму

Delphi , ОС и Железо , Kylix



Автор: http://www.swissdelphicenter.ch

{
  Capturing a CLX form is easy, once you know.
  It took me a little time to find out, so I'm giving the knowledge to help others :
}

type
  TFormCapturable = class(TForm)
  public
    procedure PrintOne;
  end;

var
  FormCapturable: TFormCapturable;

implementation

uses
  Qt;

procedure TFormCapturable.PrintOne;
var
  aBitmap: TBitmap;
  aWinHandle: QWidgetH;
  aWinId: Cardinal;
  x, y, w, h: integer;
begin
  // create a new bitmap to hold the captured screen
  aBitMap := TBitmap.Create;
  try
    // get a handle on the desktop
    aWinHandle := QApplication_desktop;
    // get the Id from the desktop handle
    aWinId := QWidget_winId(aWinHandle);
    // get the position and size of the windows
    x := Self.Left;
    y := Self.Top;
    w := Self.Width;
    h := Self.Height;
    // capture the window into the bitmap's pixmap
    QPixmap_grabWindow(aBitmap.Handle, aWinId, x, y, w, h);
    // save the bitmap
    aBitMap.SaveToFile('c:\temp\test.bmp');
  finally
    // don't forget to kill the bitmap after use.
    FreeAndNil(aBitMap);
  end;
end;

Программный код, написанный на языке Delphi, предназначен для захвата формы CLX (Control Language eXtended) как изображения. Форма затем сохраняется в файле bitmap с именем 'test.bmp' в директории 'C:\temp\'.

Следующий шаг за шагом:

  1. Создается новый экземпляр класса TFormCapturable, который наследуется от TForm.
  2. Внутри этой формы есть процедура PrintOne. Эта процедура захватывает снимок формы и сохраняет его в виде файла изображения.
  3. Для захвата экрана используется метод QApplication_desktop для получения handle на десктоп, а затем получается идентификатор окна из этого handle с помощью QWidget_winId.
  4. Затем retrieves позицию (x, y) и размер (w, h) формы используя свои собственные свойства (Left, Top, Width и Height).
  5. Метод QPixmap_grabWindow используется для захвата окна в bitmap.
  6. Наконец, захваченное изображение сохраняется в файле 'test.bmp' в директории 'C:\temp\' с помощью метода SaveToFile класса TBitmap.

Альтернативное решение для захвата снимка:

procedure TFormCapturable.PrintOne;
var
  aBitmap: TBitmap;
begin
  aBitmap := TBitmap.Create;
  try
    aBitmap.Canvas.CopyArea(0, 0, aBitmap.Width, aBitmap.Height, 0, 0);
    aBitmap.SaveToFile('c:\temp\test.bmp');
  finally
    FreeAndNil(aBitmap);
  end;
end;

В этом коде создается новый bitmap, копируется всякий экран в него с помощью Canvas.CopyArea, а затем сохраняется в файле 'test.bmp' в директории 'C:\temp\'.

Обратите внимание, что CLX - это библиотека для работы с графическими элементами в Delphi, и она не имеет отношения к Qt. В коде, который вы предоставили, есть методы QApplication_desktop и QWidget_winId, которые являются частью библиотеки Qt, а не CLX.

Отловить CLX-форму можно с помощью создания бита карты, захвата ее handle и последующего заполнения бит картой при помощи функции QPixmap_grabWindow.


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

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




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


:: Главная :: Kylix ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:35:49/0.0055310726165771/1