5/5 (23 avis)
Vue 13 086 fois - Téléchargée 2 235 fois
// Sources du client : unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,jpeg, ExtCtrls; //Ne pas oublier de déclarer la classe jpeg type TForm1 = class(TForm) tcp: TIdTCPClient; //Composant tcp client de Indy Button1: TButton; Edit1: TEdit; Timer1: TTimer; Button2: TButton; Label1: TLabel; Edit2: TEdit; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure sendstr; procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.sendstr; //Procedure de capture d'écran,conversion en jpg et envoi var Img:TPicture; MemStream:TMemoryStream; // Déclaration des variables JPG:TJPEGImage; Bmp :TBitMap; Rect:TRect; begin Img:=TPicture.Create; Bmp := TBitMap .Create; //Initialisation des variables qui doivent l'être MemStream:=TMemoryStream.Create; Img.Bitmap.Width:=Screen.Width; Img.Bitmap.Height:=Screen.Height; BitBlt(Img.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,GetDC(GetDesktopWindow),0,0,SrcCopy); //Capture de l'écran JPG:=TJPEGImage.Create; try JPG.Assign(Img.Bitmap); //Conversion en jpg JPG.CompressionQuality:=15; Bmp.Width :=Jpg.Width -50; Bmp.Height :=Jpg.Height -50; Rect.Left :=0; Rect.Top :=0; Rect.Right :=Bmp.Width-1; Rect.Bottom:=Bmp.Height-1; Bmp.Canvas.StretchDraw(Rect,Jpg); Jpg.Assign(Bmp); jpg.savetostream(Memstream);//Chargement de l'image jpg dans le stream finally bmp.Free; img.free; JPG.Free; try with tcp do begin OpenWriteBuffer; WriteStream(memstream);//Envoi du stream CloseWriteBuffer; memstream.Free; disconnect; //Déconnexion end; except end; end; end; procedure TForm1.Button1Click(Sender: TObject); //Bouton pour démarrer l'envoi begin try timer1.Interval:= strtoint(edit2.Text);//Définition de l'interval du timer tcp.Host:= edit1.Text; //Définition de l'hote (serveur) timer1.Enabled:=true; //Démarrage du timer except end; end; procedure TForm1.Timer1Timer(Sender: TObject); //Procedure que le timer execute celon l //'interval donné begin try tcp.Connect; //Connexion du client tcp form1.sendstr; //Execution de la procédure définie plus haut except timer1.Enabled:= false; //Si la connexion est impossible on arrete le timer showmessage('connextion impossible'); //On affiche une boite de dialogue qui nous informe end; end; procedure TForm1.Button2Click(Sender: TObject); //Bouton qui arrete l'envoi begin timer1.Enabled:= false; //On arrete tout simplement le timer end; end. //Sources du serveur unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, ExtCtrls,jpeg; //Pas oublier jpeg type TForm1 = class(TForm) tcp: TIdTCPServer;//Composant serveur TCP Indy Image1: TImage; procedure tcpExecute(AThread: TIdPeerThread); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.tcpExecute(AThread: TIdPeerThread); //procedure appellée lors de la var stream : tmemorystream; //réception des données jpg : tjpegimage; //Définition des variables begin jpg:= tjpegimage.Create; //Initialisation de jpg et stream stream:= tmemorystream.Create; athread.Connection.ReadStream(stream, -1, true); //réception du stream du début à la fin Stream.Seek(0, soFromBeginning); //On reset la position du pointer pour la lecture // Peut être remplacer par stream.position:=0; jpg.LoadFromStream(stream); //Chargement du stream dans la variable jpg image1.Picture.Graphic:= jpg; //Affichage de l'image contenue dans jpg sur le Timage stream.free; //Purge de la mémoire du stream end; end.
4 oct. 2004 à 20:32
4 oct. 2004 à 20:44
Dommage.
4 oct. 2004 à 20:49
4 oct. 2004 à 21:04
5 oct. 2004 à 12:26
Par contre concernant le code, est-ce qu'il aurait été possible de mettre :
directement dans l'évènement OnClick du bouton...Je vois pas à quoi sert le Timer :-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.