Ver Mensaje Individual
  #11  
Antiguo 05-07-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Reputación: 0
adeszeus Va por buen camino
ya lo conocia

Ese ejemplo ya lo conocia.... y esta hecho con indy 9 y es totalmente inutil para el delphi 2010... asi que no me sirvio para nada, o al menos jamas pude interpretar los eventos que tiene, poco a poco va mejorando el proyecto y encontre dos maneras de hacerlo, enviar solamente la impresion de pantalla desde stream.... o archivo, especifico que esta hecho para imagenes, el codigo es es siguiente

Enviar archivo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream : TFileStream;
  filename:string;
begin
if (opendialog1.Execute) then
filename:=opendialog1.FileName;
  if FileName = '' then Exit;
  FileStream := TFileStream.Create(FileName, fmOpenRead);
  IdTCPClient1.Host:='127.0.0.1';
  IdTCPClient1.Port:=8080;
  IdTCPClient1.Connect;
  IdTCPClient1.IOHandler.Write(FileStream,0,true);
  IdTCPClient1.Disconnect;
end;

Enviar impresion de pantalla y convertirla a jpg

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  SrcWindow: THandle;
  SrcDC: HDC;
  Bitmap: TBitmap;
  Jpg: TJPEGImage;
  Stream: TMemoryStream;
  Width, Height: Integer;
begin
  SrcWindow:= GetDesktopWindow;
  if SrcWindow <> 0 then
  begin
    SrcDC:= GetDC(SrcWindow);
    if SrcDC <> 0 then
    begin
      Bitmap:= TBitmap.Create;
      Jpg:= TJPEGImage.Create;
      try
        Width:= GetSystemMetrics(SM_CXSCREEN);
        Height:= GetSystemMetrics(SM_CYSCREEN);
          Bitmap.Width:= Width;
          Bitmap.Height:= Height;
        StretchBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
          SrcDC,0,0,Width,Height,SRCCOPY);
        Jpg.CompressionQuality:= 60;
        Jpg.Assign(Bitmap);
        Jpg.Compress;
        Image1.Picture.Assign(Jpg);
        Stream:= TMemoryStream.Create;
        try
          Jpg.SaveToStream(Stream);
            IdTCPClient1.Host:='127.0.0.1'; //Prueba local
            IdTCPClient1.Port:=8080;
            IdTCPClient1.Connect;
            IdTCPClient1.IOHandler.Write(Stream, 0,true);
        finally
          Stream.Free;
        end;
      finally
        Bitmap.Free;
        Jpg.Free;
        ReleaseDC(SrcWindow,SrcDC);
      end;
    end;
  end;
IdTCPClient1.Disconnect;
end;

---------Lado Servidor--------

Aceptar Archivo

Código Delphi [-]
var
fStream : TFileStream;
begin
  //Traigo y  muestro mensaje
  Mensaje.Lines.Add( 'De: ' + AContext.Binding.PeerIP );
  //Guardo archivo enviado
  fStream := TFileStream.Create(
  ExtractFilePath(Application.ExeName) +'prueba.jpg'
  , fmCreate);
  try
    AContext.connection.IOHandler.ReadStream(fstream,0, True);
  finally
    AContext.connection.Disconnect;
  end;
  FreeAndNil(fStream);
fStream.Free;
end;

Visualizar el stream

Código Delphi [-]
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
stream:TmemoryStream;
jpg:Tjpegimage;
begin
  //Traigo y  muestro mensaje
  Mensaje.Lines.Add( 'De: ' + AContext.Binding.PeerIP );
  //Guardo archivo enviado
  stream:=tmemorystream.Create;
  AContext.Connection.IOHandler.ReadStream(stream,0,true);
  stream.Seek(0, soFromBeginning);
  jpg:=tjpegimage.create;
  jpg.LoadFromStream(stream);
Image1.Picture.Assign(jpg);
FreeAndNil(stream);
jpg.Free;
end;

Espero les sirva a los demas, y pues poco a poco se va complementando el ejercicio
Responder Con Cita