Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

копирование с помощью потоков   Найти похожие ветки 

 
frameZ ©   (2007-04-19 14:18) [0]

Клиент серверное приложениие для локалки. Работаю через сокеты. Посылаею на сервер команду снятия скриншота. Он снимает копию экрана сохраняет в поток и посылает клиенту . Как клиенту прочитать поток в компонент Image? Скриншот  хранится в BMP.


 
Johnmen ©   (2007-04-19 14:21) [1]

Куда клиент принимает это хозяйство?


 
frameZ ©   (2007-04-19 14:33) [2]

по идее в память.
в компоненте image есть  процедура Image1.Picture.Bitmap.LoadFromStream(Stream). Как я понял он читает из потока картинку и загружает в image.


 
Romm ©   (2007-04-19 14:40) [3]

Дайте мастеру слово! :)

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:44) [4]

Спасибо Romm!


 
Сергей М. ©   (2007-04-19 14:51) [5]


> Дайте мастеру слово!


Я бы не дал)

Кто тебя, "мастера", учил не анализировать результат работы функциональных методjd SendBuf() и ReceiveBuf() ?


 
Romm ©   (2007-04-19 14:54) [6]


> framez ©   (19.04.07 14:44) [4]

да не мне спасибо, а Мастерам, которые меня вчера этому учили :))

{RASkov}, Johnmen, Плохиш... простите если кого забыл упомянуть :)


 
Romm ©   (2007-04-19 14:55) [7]


> Сергей М. ©   (19.04.07 14:51) [5]

ну вот хоть бы раз дали покупаться в славе и уважении :)))


 
Romm ©   (2007-04-19 14:57) [8]


> Сергей М. ©   (19.04.07 14:51) [5]

да и какая разница - главное работает :))


 
Сергей М. ©   (2007-04-19 14:57) [9]


> Romm ©   (19.04.07 14:55) [7]


"На миг блаженство, навек урод" (С)


 
Romm ©   (2007-04-19 15:03) [10]


> Сергей М. ©   (19.04.07 14:57) [9]

жесть: )


 
framez ©   (2007-04-19 15:04) [11]

А подскажите как узнать при передачи файла через сокеты объем принятой или переданной информации?


 
Сергей М. ©   (2007-04-19 15:04) [12]


> жесть


Дешевый твентинейджерский сленг)


 
Сергей М. ©   (2007-04-19 15:07) [13]


> framez ©   (19.04.07 15:04) [11]


Реализуй своего наследника TStream с перекрытыми методами Read и Write.


 
Romm ©   (2007-04-19 15:08) [14]


> framez ©   (19.04.07 15:04) [11]

Stream.Size
?


> Сергей М. ©   (19.04.07 15:04) [12]

:)


 
SlymRO ©   (2007-04-20 07:22) [15]

А поискать слабо? Только вчера перетирали!
http://delphimaster.net/view/2-1176622206/



Страницы: 1 вся ветка

Текущий архив: 2007.05.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.063 c
2-1177006647
Sapan
2007-04-19 22:17
2007.05.13
Удалить символ из поля


15-1176704926
@!!ex
2007-04-16 10:28
2007.05.13
Резюме на английском.


2-1177360993
Jeeb
2007-04-24 00:43
2007.05.13
База Аксес


6-1162213016
arefart
2006-10-30 15:56
2007.05.13
Перехват пакетов


2-1177331483
snakecatcher
2007-04-23 16:31
2007.05.13
Параметры при запуске программы