Вопросы по графике

Можно ли получить растровое изображение формы с заголовком и рамкой?

Стандартные средства Delphi позволяют получать растровое изображение только внутренней части окна. Для получения изображения всего окна с заголовком и рамкой необходимо воспользоваться функциями API.

Во-первых, получаем контекст всего окна функцией:

function GetWindowDC(Wnd: HWnd): HDC;

Затем копируем растровое изображение окна в компонент TImage (для примера). И освобождаем полученный контекст окна:

function ReleaseDC(Wnd: HWnd; DC: HDC): Integer;

Пример:

procedure TForm1.Button1Click(Sender: TObject);
VAR DC: hDC;
begin
 
 DC := GetWindowDC(Handle);
 Image1.Picture.BitMap.Height := Height;
 Image1.Picture.BitMap.Width := Width;
 BitBlt(Image1.Picture.BitMap.Canvas.Handle, 0, 0, Width, Height, 
        DC, 0, 0, SRCCOPY);
 ReleaseDC(Handle, DC);
 
end;

Как получить растровое изображение формы?

В компоненте TForm уже есть метод возвращающий растровое изображение формы, так что, для получения изображения достаточно вызвать его:

function GetFormImage: TBitmap;

Пример:

 Image1.Picture.BitMap := GetFormImage;

Можно ли из Delphi рисовать в любой части экрана или в чужом окне?

Для этого надо воспользоваться функциями API. Получить контекст чужого окна, либо всего экрана:

function GetDC(Wnd: HWnd): HDC;

где Wnd - указатель на нужное окно, или 0 для получения контекста всего экрана.

И далее, пользуясь функциями API, нарисовать все что надо.

Пример:

PROCEDURE DrawOnScreen; 
 VAR ScreenDC: hDC; 
 BEGIN 
 
 ScreenDC := GetDC(0); {получить контекст экрана} 
 Ellipse(ScreenDC, 0, 0, 200, 200); {нарисовать} 
 ReleaseDC(0,ScreenDC); {освободить контекст} 
 
END;

Как отобразить растровое изображение, чтобы определенный его цвет был "прозрачным"?

Эффект "прозрачного" фона достигается методом BrushCopy объекта Canvas:

Пример:

В качестве фонового, для изображения, цвета выбирается цвет его левой нижней точки (именно эта точка является "фоновой" при рисовании глифов для кнопок в Delphi).

BrushCopy( Bounds(10, 10, Bitmap.Width, Bitmap.Height), Bitmap,  
           Bounds(0, 0, Bitmap.Width, Bitmap.Height), 
           Bitmap.Canvas.Pixels[0, Bitmap.Height - 1]);

Последние комментарии

  • buy prescription drugs online without mens erection pills https://antib500.online/ where to buy amoxicillin 500mg generic zantac recall zantac generic
  • vitality ed pills cure for ed or natural ed medications treatment for erectile dysfunction or how to get amoxicillin can i buy amoxicillin over the counter or prednisone 20 mg tablets coupon prednisone 5mg coupon or vacuum pump for ed ed pills for sale
  • erectile dysfunction medication comparison of ed drugs ed cures that work otc ed pills https://canadianpharmacyvikky.com real viagra without a doctor prescription usa ed aids buy prescription drugs online without herbal remedies for ed

Счетчики