![]() |
Re: Bild über TSocket senden
oder so :
Delphi-Quellcode:
procedure ScreenShot(const Bitmap: TBitmap);
var DesktopDC: HDC; begin DesktopDC := CreateDC('DISPLAY', nil, nil, nil); try Bitmap.PixelFormat := pfDevice; Bitmap.Width := Screen.Width; Bitmap.Height := Screen.Height; BitBlt(Bitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY); finally DeleteDC(DesktopDC); end; end; //////////////////////////////////////////////////////////////////////////// // Für den Client: ///////////////////////////////////////////////////////// var Rec: Boolean=false; rM: TMemoryStream; rSize: Int64; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var rL : Integer; Pic: TJpegimage; begin rL := Socket.ReceiveLength; If rL = 0 then Exit; If Rec then begin Socket.ReceiveBuf(Pointer(Int64(rM.Memory) + rM.Position)^, rL); rM.Position := rM.Position + rL; ProgressBar1.Position:=round(rm.position/rsize*100); //Fortschritt anzeigen lassen If rM.Position = rSize then begin ProgressBar1.Position:=100; //Fortschritt anzeigen lassen rM.Position := 0; Pic := TJpegimage.Create; try Pic.LoadFromStream(rM); Image1.Picture.Assign(Pic); Image1.Refresh; finally Pic.Free; end; FreeAndNil(rM); Rec := False; end; end else begin rSize := StrToInt(Socket.ReceiveText); rM := TMemoryStream.Create; rM.SetSize(rSize); rM.Position := 0; Rec := True; Socket.SendText('ok'); end; end; // Ende der Clientprocedure //////////////////////////////////////////////// // Für den Server: ///////////////////////////////////////////////////////// var sM : TMemoryStream; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Bmp : TBitmap; Jpeg : TJpegimage; empfangen:string; begin empfangen:=socket.ReceiveText; if leftstr(empfangen,length('Screenshot'))='Screenshot' then begin FreeAndNil(sM); Bmp:=TBitmap.Create; Jpeg:=TJpegImage.Create; sM:=TMemoryStream.Create; try ScreenShot(bmp); Jpeg.CompressionQuality:=strtoint(rightstr(empfangen,length(empfangen)-length('Screenshot'))); Jpeg.Assign(Bmp); Jpeg.SaveToStream(sM); finally Jpeg.Free; Bmp.Free; end; Socket.SendText(IntToStr(sM.Size)); end; // Empfänger hat Größe erhalten, das senden der Datei wird durchgeführt If empfangen='ok' then begin Socket.SendBuf(sM.Memory^, sM.Size); end; end; // Ende der Serverprocedure /////////////////////////////////////////////////// // Screenshot anfordern procedure TForm1.Button1Click(Sender: TObject); begin if ClientSocket1.Active then begin ClientSocket1.Socket.SendText('Screenshot'+inttostr(scrollbar1.Position)); //Über die Scrollbar stell ich die Screenshot Qualität ein end; end; |
Re: Bild über TSocket senden
Folgende Fehlermeldungen kommen noch bei dem letzigen Code.
[Fehler] Unit1.pas(57): Undefinierter Bezeichner: 'leftstr' [Fehler] Unit1.pas(64): Undefinierter Bezeichner: 'rightstr' |
Re: Bild über TSocket senden
Delphi-Quellcode:
uses ..,strutils;
|
Re: Bild über TSocket senden
Das läuft so wunderbar.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz