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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 01:59   #1
Xsires
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 39
Печаль bmp to img1 минуя LoadFromFile

PHP код:
function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOLstdcallexternal 'user32.dll';
procedure TForm1.btn1Click(SenderTObject);
var
rcSrc:Trect;
hSrcWnd:HWND;
hDC1:HDC;
hSrcDC:HDC;
hBmp:HBITMAP ;
tBmp:TBitmap;
begin
 tbmp
:=TBitmap.Create;
 
hSrcWnd := FindWindow(nilPChAR('Колькулятор'));
 
GetWindowRect(hSrcWndrcSrc);
 
hDC1:= GetDC(hSrcWnd);
 
hSrcDC:=CreateCompatibleDC(hDC1);
 
hBmp := CreateCompatibleBitmap(hDC1rcSrc.right rcSrc.leftrcSrc.bottom rcSrc.top);
 
SelectObject(hSrcDChBmp);
 
PrintWindow(hSrcWndhSrcDC0);
 
tbmp.Handle:=hbmp;
 
tbmp.SaveToFile('d:\temp\temp.bmp');
 
img1.Height:=tBmp.Height;
 
img1.Width:=tBmp.Width;
 
img1.Picture.LoadFromFile('d:\temp\temp.bmp');
 
DeleteObject(hBmp);
 
DeleteDC(hSrcDC);
 
ReleaseDC(hSrcWndhDC1);
 
tbmp.Free;
end

Программа получает скрин окна в данном случае Коьлкулятора но у мну не получилось напрямую записать tbmp в image1 я сохраняю и загружаю файл с диска .... если писать
PHP код:
 img1.Canvas.StretchDraw(rect(0,0,tbmp.Width,tbmp.Height),tbmp); 
или
PHP код:
img1.Picture.Assign(tbmp); 
то вместо изображения получается белый квадрат

подскажите как запихнуть bmp в Image1 минуя LoadFromFile ...

Последний раз редактировалось Xsires; 13.01.2011 в 02:20.
Xsires вне форума Ответить с цитированием
Старый 13.01.2011, 02:13   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll'; 
procedure TForm1.btn1Click(Sender: TObject); 
var 
rcSrc:Trect; 
hSrcWnd:HWND; 
hDC1:HDC; 
hSrcDC:HDC; 
hBmp:HBITMAP ; 
tBmp:TBitmap; 
begin 
 tbmp:=TBitmap.Create; 
 hSrcWnd := FindWindow(nil, PChAR('Колькулятор')); 
 GetWindowRect(hSrcWnd, rcSrc); 
 hDC1:= GetDC(hSrcWnd); 
 hSrcDC:=CreateCompatibleDC(hDC1); 
 hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top); 
 SelectObject(hSrcDC, hBmp); 
 PrintWindow(hSrcWnd, hSrcDC, 0); 
 tbmp.Handle:=hbmp; 
// tbmp.SaveToFile('d:\temp\temp.bmp'); 
 img1.Height:=tBmp.Height; 
 img1.Width:=tBmp.Width;
 img1.picture.assign(tbmp); 
// img1.Picture.LoadFromFile('d:\temp\temp.bmp'); 
 DeleteObject(hBmp); 
 DeleteDC(hSrcDC); 
 ReleaseDC(hSrcWnd, hDC1); 
 tbmp.Free; 
end;
ZuBy вне форума Ответить с цитированием
Старый 13.01.2011, 02:20   #3
Xsires
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 39
По умолчанию

0 внимания программа даже не реагирует ... img вообще не появляется ..
Xsires вне форума Ответить с цитированием
Старый 13.01.2011, 02:34   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll'; 
procedure TForm1.btn1Click(Sender: TObject); 
var 
rcSrc:Trect; 
hSrcWnd:HWND; 
hDC1:HDC; 
hSrcDC:HDC; 
hBmp:HBITMAP ; 
tBmp:TBitmap; 
MS:TMemoryStream;
begin 
 tbmp:=TBitmap.Create; 
 hSrcWnd := FindWindow(nil, PChAR('Колькулятор')); 
 GetWindowRect(hSrcWnd, rcSrc); 
 hDC1:= GetDC(hSrcWnd); 
 hSrcDC:=CreateCompatibleDC(hDC1); 
 hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top); 
 SelectObject(hSrcDC, hBmp); 
 PrintWindow(hSrcWnd, hSrcDC, 0); 
 tbmp.Handle:=hbmp; 
 MS:=TMemoryStream.Create;
 tbmp.SaveToStream(MS); 
 img1.Height:=tBmp.Height; 
 img1.Width:=tBmp.Width;
 img1.Picture.Bitmap.LoadFromStream(MS); 
 DeleteObject(hBmp); 
 DeleteDC(hSrcDC); 
 ReleaseDC(hSrcWnd, hDC1); 
 MS.Free;
 tbmp.Free; 
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.01.2011, 02:37   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

эх.. не успел.. Пепел Феникса уже ответил)
ZuBy вне форума Ответить с цитированием
Старый 13.01.2011, 02:45   #6
Xsires
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 39
По умолчанию

))) та же проблема )) с img1 нече не происходить (
Xsires вне форума Ответить с цитированием
Старый 13.01.2011, 03:33   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

hSrcWnd := FindWindow(nil, PChAR('Калькулятор'));
ZuBy вне форума Ответить с цитированием
Старый 13.01.2011, 04:49   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я еще строчку забыл,
MS.Position:=0;
перед LoadFromStream
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.01.2011, 12:59   #9
Xsires
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 39
По умолчанию

огромное спс )) заработало )
Xsires вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка BMP в Simple Graph и сохранение в BMP формат artemavd Общие вопросы Delphi 10 02.10.2010 14:19
OnClick: img1=>img2? MyLastHit Общие вопросы Delphi 2 02.08.2010 22:23
Loadfromfile и Удаление файла: проблема mrpit Помощь студентам 3 21.05.2010 01:42
ClientDataSet.LoadFromFile MAcK Общие вопросы Delphi 5 23.04.2010 00:22
Не работает AdoTable.LoadFromFile SERG1980 БД в Delphi 0 30.03.2009 16:42