![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
копирование с помощью потоков [D7]
frameZ © (2007-04-19 14:18:00)Клиент серверное приложениие для локалки. Работаю через сокеты. Посылаею на сервер команду снятия скриншота. Он снимает копию экрана сохраняет в поток и посылает клиенту . Как клиенту прочитать поток в компонент Image? Скриншот хранится в BMP.
SlymRO (2007-04-20 07:22:00) [1]А поискать слабо? Только вчера перетирали!
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1176622206&n=18
Romm (2007-04-19 15:08:00) [2]
> framez © (19.04.07 15:04) [11]
Stream.Size
?
> Сергей М. © (19.04.07 15:04) [12]
:)
Сергей М. (2007-04-19 15:07:00) [3]
> framez © (19.04.07 15:04) [11]
Реализуй своего наследника TStream с перекрытыми методами Read и Write.
framez (2007-04-19 15:04:00) [4]А подскажите как узнать при передачи файла через сокеты объем принятой или переданной информации?
Сергей М. (2007-04-19 15:04:00) [5]
> жесть
Дешевый твентинейджерский сленг)
Romm (2007-04-19 15:03:00) [6]
> Сергей М. © (19.04.07 14:57) [9]
жесть: )
Romm (2007-04-19 14:57:00) [7]
> Сергей М. © (19.04.07 14:51) [5]
да и какая разница - главное работает :))
Сергей М. (2007-04-19 14:57:00) [8]
> Romm © (19.04.07 14:55) [7]
"На миг блаженство, навек урод" (С)
Romm (2007-04-19 14:55:00) [9]
> Сергей М. © (19.04.07 14:51) [5]
ну вот хоть бы раз дали покупаться в славе и уважении :)))
Romm (2007-04-19 14:54:00) [10]
> framez © (19.04.07 14:44) [4]
да не мне спасибо, а Мастерам, которые меня вчера этому учили :))
{RASkov}, Johnmen, Плохиш... простите если кого забыл упомянуть :)
Сергей М. (2007-04-19 14:51:00) [11]
> Дайте мастеру слово!
Я бы не дал)
Кто тебя, "мастера", учил не анализировать результат работы функциональныхметодjd SendBuf() и ReceiveBuf() ?
framez (2007-04-19 14:44:00) [12]Спасибо Romm!
Romm (2007-04-19 14:40:00) [13]Дайте мастеру слово! :)
procedure TMainForm.screen;
var
size:int64;
DeskTopDC: HDc;
DeskTopCanvas: TCanvas;
DeskTopRect: TRect;
Bitmap:TBitmap;
JPEG:TJPEGImage;
begin
DeskTopDC := GetWindowDC(GetDeskTopWindow);
DeskTopCanvas := TCanvas.Create;
DeskTopCanvas.Handle := DeskTopDC;
DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height);
Bitmap:=TBitmap.Create;
Bitmap.Width:=Screen.Width;
Bitmap.Height:=Screen.Height;
Bitmap.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect);
jpeg:=TJpegImage.Create;
jpeg.Assign(Bitmap);
ReleaseDC(GetDeskTopWindow, DeskTopDC);
Stream:=TMemoryStream.Create;
jpeg.SaveToStream(stream);
Stream.Position:=0;
Size := Stream.Size;
ServerSocket1.Socket.Connections[0].SendBuf(Size, SizeOf(Size));
ServerSocket1.Socket.Connections[0].SendStream(Stream);
Bitmap.Free;
jpeg.Free;
end;
***
private
Reciveing: boolean;
Size: int64;
AllSize: int64;
Stream: TMemoryStream;
Jpeg: TJPEGImage
procedure TMainForm.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Buf: array[0..8191] of byte;
RecivedSize: integer;
begin
if not Reciveing then
begin
Socket.ReceiveBuf(Size, SizeOf(Size));
Reciveing := true;
Stream := TMemoryStream.Create;
AllSize := 0;
end
else
begin
RecivedSize := Socket.ReceiveBuf(Buf, SizeOf(Buf));
Stream.Write(Buf, RecivedSize);
inc(AllSize, RecivedSize);
if AllSize = Size then
begin
Reciveing := false;
JPeg := TJPEGImage.Create;
Stream.Position := 0;
JPeg.LoadFromStream(Stream);
Image1.Picture.Assign(Jpeg);
Jpeg.Free;
Stream.Free;
end;
end;
frameZ (2007-04-19 14:33:00) [14]по идее в память.
в компоненте image есть процедура Image1.Picture.Bitmap.LoadFromStream(Stream). Как я понял он читает из потока картинку и загружает в image.
Johnmen (2007-04-19 14:21:00) [15]Куда клиент принимает это хозяйство?