亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? consrv1.dpr

?? 文件名稱:新曦 我的資源 搜索軟件 源程序(Borland Delphi 7)說明
?? DPR
字號:
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Author:       Fran鏾is PIETTE
Description:  Demo for a full blown multi-user server using TWSocket and
              console mode.
EMail:        francois.piette@pophost.eunet.be    francois.piette@rtfm.be
              http://www.rtfm.be/fpiette
Creation:     Feb 17, 1999
Version:      1.01
Support:      Use the mailing list twsocket@rtfm.be See website for details.
Legal issues: Copyright (C) 1996, 1997, 1998, 1999 by Fran鏾is PIETTE
              Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56
              <francois.piette@pophost.eunet.be>

              This software is provided 'as-is', without any express or
              implied warranty.  In no event will the author be held liable
              for any  damages arising from the use of this software.

              Permission is granted to anyone to use this software for any
              purpose, including commercial applications, and to alter it
              and redistribute it freely, subject to the following
              restrictions:

              1. The origin of this software must not be misrepresented,
                 you must not claim that you wrote the original software.
                 If you use this software in a product, an acknowledgment
                 in the product documentation would be appreciated but is
                 not required.

              2. Altered source versions must be plainly marked as such, and
                 must not be misrepresented as being the original software.

              3. This notice may not be removed or altered from any source
                 distribution.

              4. You must register this software by sending a picture postcard
                 to the author. Use a nice stamp and mention your name, street
                 address, EMail address and any comment you like to say.

History:
Sep 29, 1999 V1.01 Adapted for Delphi 5

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
program ConSrv1;
{$IFDEF VER80}
  Bomb('Sorry but Delphi 1 doesn''t support console mode program');
{$ENDIF}
{$APPTYPE CONSOLE}
{$IFNDEF NOFORMS}
  Bomb('This demo must be compiled with symbol NOFORMS defined.' +
       'Go to Delphi/Menu/Project/Options and in "Directories/Conditionals"' +
       'tab, add NOFORMS to the "define" edit box.');
{$ENDIF}

uses
  Windows,
  SysUtils,
  Messages,
  Classes,
  WSocket,
  WinSock,
  ConSrv1S in 'ConSrv1S.pas',
  ConSrv1C in 'ConSrv1C.pas';

const
    Version = 101;

type
    TKeyboardThread = class (TThread)
    public
        procedure Execute; override;
    end;

// Declare all standard functions and procedures
function  InitAplication : Boolean; forward;
procedure RunAplication; forward;
procedure CleanupAplication; forward;
procedure CleanupData; forward;
function  CtrlHandlerRoutine(CtrlType : DWORD) : DWORD; stdcall; forward;
function  MyWindowProc(ahWnd   : HWND;
                       auMsg   : Integer;
                       awParam : WPARAM;
                       alParam : LPARAM): Integer; stdcall; forward;
function  CreateEvent(var MsgRec : TMsg) : Integer; forward;
procedure ClientDisconnectedEvent(var MsgRec : TMsg); forward;

// Declare some global variables
var
    SrvObject     : TServerObject;
    Terminated    : Boolean;
    hWndMain      : HWND;
    KbdThread     : TKeyboardThread;
    MyWindowClass : TWndClass = (style         : 0;
                                 lpfnWndProc   : @MyWindowProc;
                                 cbClsExtra    : 0;
                                 cbWndExtra    : 0;
                                 hInstance     : 0;
                                 hIcon         : 0;
                                 hCursor       : 0;
                                 hbrBackground : 0;
                                 lpszMenuName  : nil;
                                 lpszClassName : 'MyWindowClass');


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Console mode applications do not receive keyboard messages as GUI apps.   }
{ We use a thread to wait for keyboard activity and generate keyboard       }
{ messages as in a GUI application.                                         }
procedure TKeyboardThread.Execute;
var
    hConsole    : THandle;
    Status      : DWORD;
    InputBuffer : TInputRecord;
    KeyEvent    : TKeyEventRecord;
    Count       : DWORD;
begin
    hConsole := GetStdHandle(STD_INPUT_HANDLE);
    while not Terminated do begin
        Status := WaitForSingleObject(hConsole, 1000);
        if Status = WAIT_OBJECT_0 then begin
            if ReadConsoleInput(hConsole, InputBuffer, 1, Count) then begin
                if InputBuffer.EventType = KEY_EVENT then begin
{$IFDEF VER90}  { Delphi 2 }
                    KeyEvent := InputBuffer.KeyEvent;
{$ELSE}
{$IFDEF VER93}  { Bcb 1    }
                    KeyEvent := InputBuffer.KeyEvent;
{$ELSE}
{$IFDEF VER100} { Delphi 3 }
                    KeyEvent := InputBuffer.KeyEvent;
{$ELSE}
{$IFDEF VER110} { Bcb 3    }
                    KeyEvent := InputBuffer.KeyEvent;
{$ELSE}
{$ENDIF}
{ Starting from Delphi 4 and Bcb4, they changed definition }
                    KeyEvent := InputBuffer.Event.KeyEvent;
{$ENDIF}
{$ENDIF}
{$ENDIF}
                    if KeyEvent.bKeyDown then begin
                        PostMessage(hWndMain, WM_KEYDOWN,
                                    KeyEvent.wVirtualKeyCode,
                                    KeyEvent.wRepeatCount +
                                    (KeyEvent.wVirtualScanCode shl 16));
                    end
                    else begin
                        PostMessage(hWndMain, WM_KEYUP,
                                    KeyEvent.wVirtualKeyCode,
                                    KeyEvent.wRepeatCount +
                                    (KeyEvent.wVirtualScanCode shl 16));
                    end;
                end;
            end;
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This is a callback routine called by windows when some events occurs.     }
{ We trap those events to close our application.                            }
function CtrlHandlerRoutine(CtrlType : DWORD) : DWORD; stdcall;
begin
    case CtrlType of
    CTRL_C_EVENT,            // User hit CTRL-C
    CTRL_BREAK_EVENT,        // User hit CTRL-BREAK
    CTRL_LOGOFF_EVENT,       // User log off his session
    CTRL_CLOSE_EVENT,        // Close signal
    CTRL_SHUTDOWN_EVENT :    // Window shutdown signal
        begin
            Result := 1;
            PostMessage(hWndMain, WM_QUIT, 0, 0);
        end;
    else
        Result := 0;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure ClientDisconnectedEvent(var MsgRec : TMsg);
var
    Client : TClientObject;
begin
    Client := TClientObject(MsgRec.lParam);
    if Assigned(SrvObject) and Assigned(Client) then
        SrvObject.DisconnectedClient(Client);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function CreateEvent(var MsgRec : TMsg) : Integer;
begin
    try
        SetConsoleTitle(PChar('ConSrv V' + Format('%d.%2d',
                              [Version div 100,Version mod 100])));
        WriteLn('Hit CTRL-C to return to system.');
        SrvObject := TServerObject.Create;
        SrvObject.CtrlWindow := MsgRec.hwnd;
        KbdThread := TKeyboardThread.Create(FALSE);
        Result    := 0;  // Success
    except
        on E:Exception do begin
            WriteLn('CreateEvent failed.');
            WriteLn('Exception ' + E.ClassName + ': ' + E.Message);
            Result := -1; // Failure
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure DisplayHelp;
begin
    WriteLn('F1      Display this help text');
    WriteLn('F2      Display user list');
    WriteLn('CTRL-C  Quit program');
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure KeyDownEvent(MsgRec : TMsg);
var
    Key : Integer;
begin
    Key := MsgRec.wParam;
    case Key of
    VK_SHIFT,
    VK_CONTROL,
    VK_MENU:     { Ignore };
    VK_F1:
        DisplayHelp;
    VK_F2:
        SrvObject.DisplayClientList;
    else
        MessageBeep(MB_OK);
        WriteLn('Unknown keyboard command. Type F1 to get help.');
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function MyWindowProc(
    ahWnd   : HWND;
    auMsg   : Integer;
    awParam : WPARAM;
    alParam : LPARAM): Integer; stdcall;
var
    MsgRec : TMsg;
begin
    Result := 0;  // This means we handled the message
    try
        MsgRec.hwnd    := ahWnd;
        MsgRec.message := auMsg;
        MsgRec.wParam  := awParam;
        MsgRec.lParam  := alParam;

        case auMsg of
        WM_CLIENT_DISCONNECTED:
            ClientDisconnectedEvent(MsgRec);
        WM_CREATE:
            Result := CreateEvent(MsgRec);
        WM_CLOSE:
            begin
                WriteLn('Closing');
                DestroyWindow(ahWnd);
            end;
        WM_DESTROY:
            begin
                WriteLn('Destroying');
                CleanupData;
            end;
        WM_KEYDOWN: KeyDownEvent(MsgRec);
{       WM_KEYUP:   writeln('WM_KEYUP'); }
{       WM_CHAR:    writeln('WM_CHAR');  }
        else
            Result := DefWindowProc(ahWnd, auMsg, awParam, alParam)
        end;
    except
        on E:Exception do
            WriteLn('Exception ' + E.ClassName + ': ' + E.Message);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function InitAplication : Boolean;
begin
    Result := FALSE;
    if Windows.RegisterClass(MyWindowClass) = 0 then
        Exit;
    hWndMain := CreateWindowEx(WS_EX_TOOLWINDOW,
                               MyWindowClass.lpszClassName,
                               '',        { Window name   }
                               WS_POPUP,  { Window Style  }
                               0, 0,      { X, Y          }
                               0, 0,      { Width, Height }
                               0,         { hWndParent    }
                               0,         { hMenu         }
                               HInstance, { hInstance     }
                               nil);      { CreateParam   }
    if hWndMain = 0 then
        Exit;
    SetConsoleCtrlHandler(@CtrlHandlerRoutine, TRUE);
    Result := TRUE;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure CleanupData;
begin
    if Assigned(SrvObject) then begin
        SrvObject.Destroy;
        SrvObject := nil;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure CleanupAplication;
begin
    CleanupData;
    if hWndMain <> 0 then begin
        DestroyWindow(hWndMain);
        hWndMain := 0;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure RunAplication;
var
    MsgRec : TMsg;
begin
    { If GetMessage retrieves the WM_QUIT, the return value is FALSE and    }
    { the message loop is broken.                                           }
    while GetMessage(MsgRec, 0, 0, 0) do begin
        TranslateMessage(MsgRec);
        DispatchMessage(MsgRec)
    end;
    Terminated := TRUE;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
begin
    InitAplication;
    try
        RunAplication;
    finally
        CleanupAplication;
    end;
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成年人午夜久久久| 麻豆国产一区二区| 婷婷成人综合网| 国产麻豆91精品| 欧美日韩在线电影| 国产女人18毛片水真多成人如厕| 亚洲精选在线视频| 国产在线不卡一卡二卡三卡四卡| 一本久道久久综合中文字幕| 久久精品一区八戒影视| 日韩电影免费在线| 在线影院国内精品| 亚洲精品日日夜夜| 国产欧美日韩视频在线观看| 中文字幕人成不卡一区| 樱桃国产成人精品视频| 亚洲在线成人精品| 偷拍日韩校园综合在线| 蜜臀久久99精品久久久久宅男| 免费成人在线网站| 国产成人av电影| 本田岬高潮一区二区三区| 在线观看欧美日本| 日韩午夜在线播放| 成人动漫一区二区三区| 亚洲成av人**亚洲成av**| 亚洲国产精品av| 婷婷国产在线综合| 日本乱人伦一区| 国产精品天干天干在线综合| 国产精品一区一区| 久久夜色精品国产欧美乱极品| 日本一不卡视频| 在线观看一区日韩| 国产日本一区二区| 国产成人av一区二区三区在线观看| 精品福利一二区| 极品少妇xxxx精品少妇| 欧美成人猛片aaaaaaa| 日本aⅴ免费视频一区二区三区 | 亚洲欧美日韩国产一区二区三区 | 91黄色在线观看| 亚洲欧洲精品成人久久奇米网| 国产福利一区二区三区视频| 久久久久久久综合狠狠综合| 国产一区二三区| 国产精品免费视频网站| 大白屁股一区二区视频| 国产精品久久久久一区二区三区共| 成人av午夜电影| 国产成人鲁色资源国产91色综 | 99久久免费国产| 91精品国产综合久久婷婷香蕉 | 制服丝袜在线91| 成人免费看视频| 亚洲美女视频一区| 欧美挠脚心视频网站| 在线播放日韩导航| 26uuu国产日韩综合| 亚洲成人免费视| 在线视频观看一区| 国产精品福利一区二区三区| 久久99精品国产麻豆婷婷| 欧美三级韩国三级日本三斤| 国产精品每日更新在线播放网址| 麻豆久久久久久| 日韩一级黄色片| 婷婷开心激情综合| 欧美日韩1234| 亚洲va欧美va天堂v国产综合| 一本大道久久a久久精二百| 久久奇米777| 国产一区二区h| 久久一区二区视频| 国产麻豆91精品| 国产色一区二区| 日本道色综合久久| 中文字幕乱码日本亚洲一区二区 | 4438成人网| 日韩激情视频网站| 日韩丝袜情趣美女图片| 亚洲女与黑人做爰| 96av麻豆蜜桃一区二区| 欧美韩日一区二区三区| www.色综合.com| 国产欧美日产一区| 91网页版在线| 亚洲电影欧美电影有声小说| 欧美精品久久一区| 久久99精品国产.久久久久久| 欧美一区二区三区四区高清| 免费在线一区观看| 国产亚洲午夜高清国产拍精品 | 天天影视色香欲综合网老头| 欧美一级生活片| 国产高清不卡一区二区| 综合色天天鬼久久鬼色| 欧美视频第二页| 久久99精品久久久久久国产越南 | 亚洲高清视频在线| 日韩欧美二区三区| 成人av网站在线| 亚洲.国产.中文慕字在线| 精品欧美一区二区久久| 成人国产精品免费| 亚洲mv在线观看| 精品福利av导航| 99久久久久久99| 蜜臀av一区二区三区| 国产精品乱码久久久久久 | 婷婷综合五月天| 国产精品美女久久久久高潮| 欧美年轻男男videosbes| 成+人+亚洲+综合天堂| 亚洲一级不卡视频| 久久综合色天天久久综合图片| 一本一道久久a久久精品综合蜜臀| 日韩电影在线免费看| 国产精品看片你懂得| 盗摄精品av一区二区三区| 国产成人av电影在线播放| 成人精品亚洲人成在线| 成人免费不卡视频| 色婷婷久久99综合精品jk白丝| 精品一区二区三区欧美| 亚洲午夜久久久久久久久电影网| 亚洲精品一线二线三线| 免费在线观看视频一区| 亚洲三级电影网站| 一区二区三区毛片| 性感美女极品91精品| 日本伊人色综合网| 丰满岳乱妇一区二区三区| 亚洲女同女同女同女同女同69| 日韩欧美国产麻豆| 91久久精品一区二区三| 成人免费看视频| 成人国产精品免费网站| 国产美女久久久久| 久久99精品国产.久久久久 | 欧美一区二区免费观在线| 91年精品国产| 成人精品国产福利| 成人性视频网站| 国产美女一区二区| 国产一区二区三区久久悠悠色av| 亚洲综合小说图片| 亚洲精品国产精华液| 国产精品的网站| 亚洲欧美综合色| 中文字幕亚洲在| 国产精品国产三级国产普通话蜜臀| 精品国产乱码久久久久久影片| 日韩亚洲欧美在线观看| 欧美久久久久久久久久| 欧美挠脚心视频网站| 777亚洲妇女| 日韩美女视频一区二区在线观看| 日韩一本二本av| 亚洲精品一区二区三区影院| 欧美tickling挠脚心丨vk| 欧美成人伊人久久综合网| 精品国产精品网麻豆系列| 久久综合久久综合久久综合| 久久精品人人做人人爽97| 中文字幕乱码一区二区免费| 亚洲手机成人高清视频| 亚洲精品国产一区二区精华液| 亚洲黄色在线视频| 日韩主播视频在线| 玖玖九九国产精品| 丁香啪啪综合成人亚洲小说| 色综合天天综合| 欧美男男青年gay1069videost| 日韩视频免费观看高清在线视频| 精品美女被调教视频大全网站| 久久精品视频在线看| 综合av第一页| 亚洲成人1区2区| 激情欧美一区二区| 99久久精品国产毛片| 欧美日韩国产综合一区二区三区| 欧美一卡二卡在线| 日本一区二区综合亚洲| 亚洲一区在线观看免费| 久久国产麻豆精品| 一本色道综合亚洲| 日韩三级中文字幕| 国产精品国产自产拍在线| 日日摸夜夜添夜夜添国产精品 | 7878成人国产在线观看| 国产视频一区二区三区在线观看| 亚洲香蕉伊在人在线观| 韩国三级中文字幕hd久久精品| 99久久精品国产一区| 欧美成人aa大片| 尤物av一区二区| 成人av在线网| 精品免费一区二区三区| 亚洲国产欧美一区二区三区丁香婷|