Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.08.2011, 22:31
valdys valdys вне форума
Прохожий
 
Регистрация: 25.08.2011
Сообщения: 1
Репутация: 10
По умолчанию Передача Print Screen'а от клиента к серверу (через сокеты)

Помогите пожалуйста исправить код, передаю принт скрин от клиента к серверу(передается только один раз).

Клиент
PHP код:
unit Unit1; 

interface 

uses 
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  
Dialogs, StdCtrls, ScktComp, ExtCtrls; 

type 
  TForm1 
= class(TForm) 
    
Edit1: TEdit; 
    
Edit2: TEdit; 
    
Edit3: TEdit; 
    
Button1: TButton; 
    
ClientSocket1: TClientSocket; 
    
Button2: TButton; 
    
Button3: TButton; 
    
procedure Button1Click(Sender: TObject); 
    
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); 
    
procedure Button2Click(Sender: TObject); 
    
procedure Button3Click(Sender: TObject); 
  private 
    { Private 
declarations } 
    
Stop:boolean; 
  public 
    { Public 
declarations } 
  
end; 

var 
  
Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
begin 

 ClientSocket1
.Port := strtoint(edit2.text);        //устанавливаем порт 
 
ClientSocket1.Address := edit1.text;                 //IP адресс сервера  если на одном компе можно просто 192.168.1.2 
 
ClientSocket1.Active :=True; 
end; 

procedure TForm1.ClientSocket1Read(Sender: TObject; 
  
Socket: TCustomWinSocket); 
begin 
edit3
.Text:= Socket.ReceiveText; 
end; 



procedure TForm1.Button2Click(Sender: TObject); 
begin 
ClientSocket1
.Active :=false; 
Stop:=True; 
end; 

procedure TForm1.Button3Click(Sender: TObject); 
var 
  
BMP:TBitmap; 
  
SBMP:TMemoryStream; 
  
DC:HDC; 
  
Len: Int64; 
begin 
  BMP
:=TBitmap.Create; 
  
SBMP:=TMemoryStream.Create; 

  
DC:=GetDC(0); 

    
bmp.Width := Screen.Width; 
    
bmp.Height := Screen.Height; 
    
BitBlt(bmp.Canvas.Handle, 0,0, Screen.Width, Screen.Height,GetDC(0), 0,0,SRCCOPY); 

        
StretchBlt(bmp.Canvas.Handle,0,0,(Screen.Width-400),(Screen.Height-400),bmp.Canvas.Handle,0,0,Screen.Width,Screen.Height,SRCCOPY); 
        
bmp.Width:=Screen.Width-400; 
        
bmp.Height:=Screen.Height-400; 

  
BMP.SaveToStream(SBMP); 
  
Len := SBMP.Size; 
  
ClientSocket1.Socket.SendBuf(Len,SizeOf(Int64)); 
  
SBMP.Position:=0; 
  
ClientSocket1.Socket.SendStream(SBMP); 

  
BMP.Free; 
   
end; 

end. 

Сервер
PHP код:
unit Unit1; 

interface 

uses 
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  
Dialogs, StdCtrls, ScktComp, Spin, ExtCtrls, jpeg, Menus; 

type 

  TForm1 
= class(TForm) 

    
ServerSocket1: TServerSocket; 
    
Edit1: TEdit; 
    
MainMenu1: TMainMenu; 
    
N1: TMenuItem; 
    
Desktop1: TMenuItem; 
    
Send1: TMenuItem; 
    
N2: TMenuItem; 
    
Help1: TMenuItem; 
    
Save1: TMenuItem; 
    
procedure ServerSocket1ClientRead(Sender: TObject; 
      
Socket: TCustomWinSocket); 
    
procedure FormCreate(Sender: TObject); 
    
procedure N1Click(Sender: TObject); 
    
procedure Desktop1Click(Sender: TObject); 
    
procedure Send1Click(Sender: TObject); 
    
procedure Help1Click(Sender: TObject); 
  private 
    { Private 
declarations } 
    
SBMP:TMemoryStream; 
  public 
    { Public 
declarations } 
  
end; 
 
type 
     TState
=(stNone,stData); 
var 
    
Form1: TForm1; 
    
State: TState=stNone; 
    
Msg:string; 
    
Len: Int64; 
    
CountReceived: Int64; 

implementation 

uses Unit2
, Unit3; 

{
$R *.dfm} 

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; 
  
Socket: TCustomWinSocket); 
begin 
Msg
:= Msg+Socket.ReceiveText; 

while 
Msg<>'' do 
  
begin 
    
case State of 
      stNone
: 
        
begin 
          
if Length(Msg)<SizeOf(Int64) then Exit; 
          
State := stData; 
          
Move(Msg[1],Len,SizeOf(int64)); 
          
Delete(Msg,1,SizeOf(int64)); 
        
end; 
      
stData: 
        
begin 
          CountReceived 
:= CountReceived+SBMP.Write(Msg[1],Length(Msg)); 
          
Msg := ''; 
          if 
CountReceived=Len then 
          begin 
            State 
:= stNone; 
            
SBMP.Position:=0; 
            
form2.Image1.Picture.Bitmap.Height:=100; 
            
form2.Image1.Picture.Bitmap.Width:=100; 
            
form2.Image1.Picture.Bitmap.LoadFromStream(SBMP); 
          
end; 
        
end; 
    
end; 
  
end; 
  
end; 




procedure TForm1.FormCreate(Sender: TObject); 
begin 
   SBMP
:=TMemoryStream.Create; 
  
SBMP.Position:=0; 
end; 

procedure TForm1.N1Click(Sender: TObject); 
begin 
 ServerSocket1
.Port := strtoint(form3.edit1.text);    //Устанавливаем порт 
 
ServerSocket1.Active :=True; 
 
form1.Caption:='Сервер запущен'; 
end; 

procedure TForm1.Desktop1Click(Sender: TObject); 
begin 
form2
.visible:=true; 
end; 

procedure TForm1.Send1Click(Sender: TObject); 
begin 
ServerSocket1
.Socket.Connections[0].SendText(edit1.text); 
end; 

procedure TForm1.Help1Click(Sender: TObject); 
begin 
Showmessage
('F5 - Передать текст клиенту'); 
end; 



end. 

Почему передается только один раз принт скин?
Архив с программой.
1.rar
Ответить с цитированием
  #2  
Старый 25.08.2011, 23:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А разве так нельзя?
Код:
  ...
  DC := GetDC(0);  

  bmp.Width := Screen.Width - 400;
  bmp.Height := Screen.Height - 400;
  StretchBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, DC, 0, 0, Screen.Width, Screen.Height, SRCCOPY);  
  ...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2026