Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 20:30   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Запутался с CopyRect

Сделал скрин экрана, положил в bmp{ : TBitMap}. И теперь мучаюсь с параметрами bmp.Canvas.CopyRect(), чтобы оставить от картинки только ту область, в которой расположена Panel2 (В смысле начинается с Panel2.Left, Pnael2.Top и размеры Panel2.Width, Panel2.Height) Перепробовал уже во всех порядках. То картинка перевернутой получается, то непонятно, какой кусок.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.12.2009, 20:47   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

абсолютно рабочий код (как раз на днях консультировал по данному вопросу )
Код:
procedure CaptureScreen(ABitmap: TBitmap);
const CAPTUREBLT = $40000000;
var
  hdcScreen: HDC;
  hdcCompatible: HDC;
  hbmScreen: HBITMAP;
begin
  hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
  hdcCompatible := CreateCompatibleDC(hdcScreen);

  hbmScreen := CreateCompatibleBitmap(hdcScreen,
    GetDeviceCaps(hdcScreen, HORZRES),
    GetDeviceCaps(hdcScreen, VERTRES));

  SelectObject(hdcCompatible, hbmScreen);
  ABitmap.Handle := hbmScreen;
  BitBlt(hdcCompatible,
    0, 0,
    ABitmap.Width, ABitmap.Height,
    hdcScreen,
    0, 0,
    SRCCOPY or CAPTUREBLT);

  DeleteDC(hdcScreen);
  DeleteDC(hdcCompatible)
end;

procedure getobl(filename: STRING; l,r,w,h: integer);
var b,b2: tbitmap;
begin
 b := tbitmap.Create;
 b2:= tbitmap.Create;

 b2.Width := w;
 b2.Height:= h;

 CaptureScreen(b);
 b2.Canvas.CopyRect(Rect(0,0,w,h),
                    b.canvas,
                    Rect(l,r,l+w,r+h));

 b2.SaveToFile(filename);
 b.Free; b2.Free
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 getobl('1.bmp', 874,618, 150,150) // нач. позиция по x-y и width-height
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.12.2009, 20:55   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

В который раз - спасибо! Точнее + спасибо!
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста, запутался sportab Microsoft Office Excel 6 08.12.2009 18:58
запутался! mistertvister Помощь студентам 3 28.10.2009 14:52
Canvas.CopyRect DELPHI Что и как... 08ekhiv1 Помощь студентам 1 09.06.2009 08:25
запутался в процедурах world12_tk Помощь студентам 6 03.03.2009 18:57
sscanf_s запутался со строкой форматирования Selebro Общие вопросы C/C++ 3 23.12.2008 09:06