| 
| 
 | Вопрос # 5 225/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 Помогите переделать этот консольный сервер под форму, чтобы запускать/останавливать сервер по нажатию кнопки на форме , от не знания мучаюсь уже два дня бестолку, заранее благодарен;
 Приложение:Переключить в обычный режим program RemoteControlServer;{$apptype console} uses Windows,SysUtils,Classes,ScktComp,Graphics,Jpeg; type TSCThread=class(TServerClientThread) private   Bitmap:TBitmap;   Jpeg:TJpegImage; protected   procedure GrabScreen(Stream:TStream;const ImgSize:TPoint);   procedure ClientExecute; override; public   constructor Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket);   destructor Destroy; override; end; constructor TSCThread.Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket);begin Bitmap:=TBitmap.Create; Jpeg:=TJpegImage.Create; inherited;end; destructor TSCThread.Destroy;begin Jpeg.Free; Bitmap.Free; inherited;end; procedure TSCThread.GrabScreen(Stream:TStream;const ImgSize:TPoint);var Desktop:HWnd; DesktopRect: TRect; DesktopDC:HDc;begin Stream.Size:=0; Desktop:=GetDesktopWindow; GetWindowRect(Desktop,DesktopRect); Bitmap.Height:=ImgSize.Y; Bitmap.Width:=ImgSize.X; DesktopDC:=GetWindowDC(Desktop); try   Win32Check(StretchBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,             DesktopDC,DesktopRect.Left,DesktopRect.Top,DesktopRect.Right,DesktopRect.Bottom,
SRCCOPY)); finally   ReleaseDC(Desktop,DesktopDC); end; Jpeg.Assign(Bitmap); Jpeg.SaveToStream(Stream);end; procedure TSCThread.ClientExecute;var ScreenStream:TMemoryStream; Buf:array[0..1023] of byte; ImgSize:TPoint; size:integer;begin while (not Terminated) and ClientSocket.Connected do try   ScreenStream:=TMemoryStream.Create;   try     if ClientSocket.ReceiveBuf(ImgSize,SizeOf(ImgSize))<>SizeOf(ImgSize) then exit;     GrabScreen(ScreenStream,ImgSize);     ScreenStream.Position:=0;     size:=ScreenStream.Size;     ClientSocket.SendBuf(size,SizeOf(size));     while ScreenStream.Position<ScreenStream.Size do     begin       size:=ScreenStream.Read(Buf,SizeOf(Buf));       if ClientSocket.SendBuf(Buf,size)<>size then exit;     end;   finally     ScreenStream.Free;   end; except   Terminate;   HandleException; end;end; function Proc2Method(Code,Data:pointer):TMethod;begin result.Code:=Code; result.Data:=Data;end; procedure GetThread(self,Sender: TObject; ClientSocket: TServerClientWinSocket;   var SocketThread: TServerClientThread);begin SocketThread:=TSCThread.Create(true,ClientSocket); SocketThread.Priority:=tpLower; SocketThread.Resume;end; var Server:TServerSocket; begin Server:=TServerSocket.Create(nil); try   Server.ServerType:=stThreadBlocking;   Server.OnGetThread:=TGetThreadEvent(Proc2Method(@GetThread,Server));   Server.Port:=1234;   Server.Active:=true;   while Server.Active do Sleep(100); finally   Server.Free; end;end.
|  |   Вопрос задал: DimonZ (статус: Посетитель)Вопрос отправлен: 24 апреля 2011, 15:14
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 27 апреля 2011, 05:23; участников в обсуждении: 2. 
|   | Егор (статус: 10-ый класс), 24 апреля 2011, 16:43 [#1]:а в чём проблема-то? что именно не получается? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | DimonZ (статус: Посетитель), 24 апреля 2011, 23:09 [#2]:Проблема в том что я не силен с работой с сокетами в потоках. |  
|   | Егор (статус: 10-ый класс), 27 апреля 2011, 05:23 [#3]:так код же есть? что мешает его оформить в отдельный модуль (unit)? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |