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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 10:00   #1
GrabbeR
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 43
По умолчанию Скрин активного окна

Парни, функция пашет, но есть два но:
- заглавие окна не захватывает
- сохраняет в указанное место, а не в каталог с программой

как решить?
спасибо

function GetFormExImage(const AForm : TForm) : TBitmap;
begin
Result := nil;
if AForm = nil then Exit;
Result := TBitmap.Create;
Result.Height := AForm.ClientHeight;
Result.Width := AForm.ClientWidth;
Result.Canvas.Brush := AForm.Brush;
Result.Canvas.FillRect(AForm.Client Rect);
Result.Canvas.Lock;
try
Result.Canvas.CopyRect(Rect(0,0,Res ult.Width,Resul t.Height),
AForm.Canvas,AForm.ClientRect);
finally
Result.Canvas.UnLock;
end;
end;

//-------------------------

procedure TForm1.Button2Click(Sender: TObject);
var
ABitmap : TBitmap;
begin
ABitmap := GetFormExImage(Self);
if ABitmap <> nil then begin
ABitmap.SaveToFile("C:\Screen.bmp") ;
ABitmap.Free;
end;
end;
GrabbeR вне форума Ответить с цитированием
Старый 21.05.2012, 10:06   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Учитывая чудность алгоритма чутка подкоректируй размер тут:

Код:
Result.Height := AForm.ClientHeight;

Result.Canvas.CopyRect(Rect(0,0,Res ult.Width,Resul t.Height),
AForm.Canvas,AForm.ClientRect);
Что касается путей сохранения, то юзай ParamStr или ExeName + группу функций для работы с путями типа ExtractFilePath.
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 21.05.2012 в 10:09.
Valio вне форума Ответить с цитированием
Старый 21.05.2012, 10:49   #3
GrabbeR
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 43
По умолчанию

разобрался, все пашет как нужно, спасибо!
может кому понадобится:

var
Bm : TBitmap;
WinRect : TRect;
hWinDC : THandle;
begin
Bm := TBitmap.Create;
Bm.Width := Self.Width;
Bm.Height := Self.Height;
hWinDC := GetWindowDC(Self.Handle);
BitBlt(Bm.Canvas.Handle,0,0,Bm.Widt h,Bm.Height,hWinDC,0,0,SRCCOPY);
ReleaseDC(Self.Handle, hWinDC);
Bm.SaveToFile('file1.bmp');
Bm.Free;
end;
GrabbeR вне форума Ответить с цитированием
Старый 21.05.2012, 15:28   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Код заключай в BB-тег CODE (кнопка на панели редактирования сообщения), пока модераторы по лбу не дали.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinAPI C++ заголовок активного окна (проблема со строками) xDyPx Помощь студентам 0 18.12.2011 21:12
определение активного окна DeDoK Общие вопросы Delphi 3 13.12.2010 19:07
Скрин окна приложения Demien Общие вопросы Delphi 4 20.05.2010 11:11
Confirm при закрытии активного окна Jensi JavaScript, Ajax 4 17.08.2009 19:06
Поиск активного окна Arigato Win Api 5 22.11.2008 18:32