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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 11:51   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Передача изображения по сети.

Всем доброго. Понадобилось сделать легкую программу передачи скриншота экрана по сети. Решил пойти самым легким путем - передавать скриншот по FTP через INDY.
Вот так формирую скрин:
Код:
procedure TForm1.IdFTPServer1RetrieveFile(ASender: TIdFTPServerContext;
  const AFileName: string; var VStream: TStream);
var b:TBitmap; sdc:hdc; shw:hwnd;
begin
 b:=TBitmap.Create;
 shw:=GetDesktopWindow;
 sdc:=GetDC(shw);
 b.Width:=Screen.Width; b.Height:=Screen.Height;
 BitBlt(b.Canvas.Handle,0,0,b.Width,b.Height,sdc,0,0,SRCCOPY);
 VStream:=TMemoryStream.Create;
 b.SaveToStream(VStream);
 VStream.Position:=0;
 ReleaseDC(shw,sdc);
 b.Free;
end;
В сервере FTP

Вот так запрашиваю на клиенте:
Код:

procedure TForm1.FormClick(Sender: TObject);
var ms:TMemoryStream;b:TBitmap;  
begin
 IdFTP1.Host:='localhost';
 IdFTP1.Username:='1';
 IdFTP1.Password:='1';
 IdFTP1.Connect;
 if IdFTP1.Connected then begin
   ms:=TMemoryStream.Create;
   idftp1.Get('',ms);
   b:=TBitmap.Create;      b.Width:=Screen.Width; b.Height:=Screen.Height;
   b.LoadFromStream(ms);{}
   //ms.SaveToFile('d:\1\q.bmp');
   if not StretchBlt(Canvas.Handle,0,0,Width,Height,b.Canvas.Handle,0,0,b.Width,b.Height,SRCCOPY)
   then RaiseLastOSError;
   b.Free;
   Caption:=IntToStr(ms.Size);
   ms.Free;
   IdFTP1.Disconnect;
 end else ShowMessage('no');
end;
Передача проходит успешно, принимается картинка полностью (если раскоментировать ms.SaveToFile то получаю BMP файл со скриншотом, который открывается любыми графическими вьюверами нормально)
Но вот StretchBlt почему-то на форме картинку не отображает.
Понимаю что где-то туплю, но не могу понять где.

Что в этом коде может мешать отрисовке на канве формы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2013, 11:57   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Скорее всего, ошибаюсь, но попробуйте дописать:
Код:
ms.position:=0;
b.LoadFromStream(ms);
Проверил - мне помогло. Ваш код сработал.

UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.01.2013 в 12:36.
BDA на форуме Ответить с цитированием
Старый 22.01.2013, 12:28   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Блин, ну точно
Говорил же что туплю...
Спасибо, жаль в репу стукнуть не могу портал не дает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача изображения по сети codermoder Работа с сетью в Delphi 1 29.05.2011 11:31
Передача файла по сети sicil_proger C++ Builder 4 04.02.2011 13:06
TServerSocket, TClientSocket, передача изображения vitalatron Работа с сетью в Delphi 14 13.07.2010 15:37
Передача изображения по сети(С++ Builder 6.0) BleStaR C++ Builder 2 02.02.2010 16:16
Передача файлов по сети SL1CK Работа с сетью в Delphi 3 05.12.2009 00:08