Grafika

0

Mam maly(a nawet calkiem duzy) problem, chodzi o wyslanie zrobionego screena przez ServerSocket i odebranie przez ClientSocket i umieszczenie go w komponencie TImage. Za kazda próba wysłania wywala komunikat, ze nastapilo nagle rozlaczenie klienta, hociaz w ogóle sie nie rozlaczalem. Mozliwe, ze przeoczylem cos w kodzie.
To robi zrzut ekranu i wysyła:

if edtCommand.Text = ScreenDump then
 begin
  edtStatus.Text := 'Zrób zrzut ekranu';
  Can := TCanvas.Create;
  Can.Handle := GetWindowDC(GetDesktopWindow);
  B := TBitmap.Create;
  M := TMemoryStream.Create;
  B.Width := 497;
  B.Height := 305;
  B.Canvas.CopyRect(Rect(0, 0, 497, 305), Can, Rect(0, 0,
  497, 305));
  B.SaveToStream(M);
  ServerSocket.Socket.Connections[0].SendBuf(M, 303104);
  B.Free;
  M.Free;
 end;

P.S Oczywiscie uzylem var:

B : TBitmap;
M: TMemoryStream;

A to odbiera tekst lub wyslany bufor i wyswietla w TImage:

procedure TMainForm.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
M: TMemoryStream;
MA: TMemoryStream;
B: TBitmap;
URL :String;
begin
memOdebrane.Lines.Add(Socket.ReceiveText);
M := TMemoryStream.Create;
B := TBitmap.Create;
Socket.ReceiveBuf(M, Socket.ReceiveLength);
B.LoadFromStream(M);
B.SaveToFile('C:/ScreenDump.bmp');
URL := 'C:/ScreenDump.bmp';
pctrScreenDump.Picture.LoadFromFile(URL);
end;

Prosilbym o jakis poprawny kod, poniewaz chyba w tym cos przeoczylem...

Sebastian Nowak(Snowak) [cygaro]

0

Chyba w ServerSocket.Socket.Connections[0].SendBuf(M, 303104); to:
ServerSocket.Socket.Connections[0].SendBuf(M, SizeOf(M) lub M.Size);

0

Tak, na początku tak było i tez nie działało...

Snowak [cygaro]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.