Форум по 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
MessagesSysUtilsVariantsClassesGraphicsControlsForms
  
DialogsStdCtrlsScktCompExtCtrls

type 
  TForm1 
= class(TForm
    
Edit1TEdit
    
Edit2TEdit
    
Edit3TEdit
    
Button1TButton
    
ClientSocket1TClientSocket
    
Button2TButton
    
Button3TButton
    
procedure Button1Click(SenderTObject); 
    
procedure ClientSocket1Read(SenderTObjectSocketTCustomWinSocket); 
    
procedure Button2Click(SenderTObject); 
    
procedure Button3Click(SenderTObject); 
  private 
    { Private 
declarations 
    
Stop:boolean
  public 
    { Public 
declarations 
  
end

var 
  
Form1TForm1

implementation 

{$R *.dfm

procedure TForm1.Button1Click(SenderTObject); 
begin 

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

procedure TForm1.ClientSocket1Read(SenderTObject
  
SocketTCustomWinSocket); 
begin 
edit3
.Text:= Socket.ReceiveText
end



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

procedure TForm1.Button3Click(SenderTObject); 
var 
  
BMP:TBitmap
  
SBMP:TMemoryStream
  
DC:HDC
  
LenInt64
begin 
  BMP
:=TBitmap.Create
  
SBMP:=TMemoryStream.Create

  
DC:=GetDC(0); 

    
bmp.Width := Screen.Width
    
bmp.Height := Screen.Height
    
BitBlt(bmp.Canvas.Handle0,0Screen.WidthScreen.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
MessagesSysUtilsVariantsClassesGraphicsControlsForms
  
DialogsStdCtrlsScktCompSpinExtCtrlsjpegMenus

type 

  TForm1 
= class(TForm

    
ServerSocket1TServerSocket
    
Edit1TEdit
    
MainMenu1TMainMenu
    
N1TMenuItem
    
Desktop1TMenuItem
    
Send1TMenuItem
    
N2TMenuItem
    
Help1TMenuItem
    
Save1TMenuItem
    
procedure ServerSocket1ClientRead(SenderTObject
      
SocketTCustomWinSocket); 
    
procedure FormCreate(SenderTObject); 
    
procedure N1Click(SenderTObject); 
    
procedure Desktop1Click(SenderTObject); 
    
procedure Send1Click(SenderTObject); 
    
procedure Help1Click(SenderTObject); 
  private 
    { Private 
declarations 
    
SBMP:TMemoryStream
  public 
    { Public 
declarations 
  
end
 
type 
     TState
=(stNone,stData); 
var 
    
Form1TForm1
    
StateTState=stNone
    
Msg:string
    
LenInt64
    
CountReceivedInt64

implementation 

uses Unit2
Unit3

{
$R *.dfm

procedure TForm1.ServerSocket1ClientRead(SenderTObject
  
SocketTCustomWinSocket); 
begin 
Msg
:= Msg+Socket.ReceiveText

while 
Msg<>'' do 
  
begin 
    
case State of 
      stNone

        
begin 
          
if Length(Msg)<SizeOf(Int64then 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(SenderTObject); 
begin 
   SBMP
:=TMemoryStream.Create
  
SBMP.Position:=0
end

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

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

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

procedure TForm1.Help1Click(SenderTObject); 
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, время: 13:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter