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

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

?? dxplay.pas

?? delphi中很有名的delphiX組件。傳奇2客戶端源代碼也是用這個組件。
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
unit DXPlay;

interface

{$INCLUDE DelphiXcfg.inc}

uses
  Windows, SysUtils, Classes, Forms, DXClass, ActiveX, DirectX, DXETable;
                                                                        
type

  {  TDXPlayPlayer  }

  TDXPlayPlayer = class(TCollectionItem)
  private
    FData: Pointer;
    FID: TDPID;
    FName: string;
    FRemotePlayer: Boolean;
  public
    property Data: Pointer read FData write FData;
    property ID: TDPID read FID;
    property Name: string read FName;
    property RemotePlayer: Boolean read FRemotePlayer;
  end;

  {  TDXPlayPlayers  }

  TDXPlayPlayers = class(TCollection)
  private
    function GetPlayer(Index: Integer): TDXPlayPlayer;
  public
    constructor Create;
    function Find(ID: TDPID): TDXPlayPlayer;
    function IndexOf(ID: TDPID): Integer;
    property Players[Index: Integer]: TDXPlayPlayer read GetPlayer; default;
  end;

  {  TDXPlayModemSetting  }

  TDXPlayModemSetting = class(TPersistent)
  private
    FEnabled: Boolean;
    FPhoneNumber: string;
    FModemName: string;
    FModemNames: TStrings;
    function GetModemNames: TStrings;
  public
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
    property ModemName: string read FModemName write FModemName;
    property ModemNames: TStrings read GetModemNames;
  published
    property Enabled: Boolean read FEnabled write FEnabled;
    property PhoneNumber: string read FPhoneNumber write FPhoneNumber;
  end;

  {  TDXPlayTCPIPSetting  }

  TDXPlayTCPIPSetting = class(TPersistent)
  private
    FEnabled: Boolean;
    FHostName: string;
    FPort: Word;
  public
    procedure Assign(Source: TPersistent); override;
  published
    property Enabled: Boolean read FEnabled write FEnabled;
    property HostName: string read FHostName write FHostName;
    property Port: Word read FPort write FPort;
  end;

  {  EDXPlayError  }

  EDXPlayError = class(Exception);

  {  TCustomDXPlay  }

  TDXPlayEvent = procedure(Sender: TObject; Player: TDXPlayPlayer) of object;

  TDXPlayMessageEvent = procedure(Sender: TObject; From: TDXPlayPlayer;
    Data: Pointer; DataSize: Integer) of object;

  TDXPlaySendCompleteResult = (crOk, crAbort, crGeneric);

  TDXPlaySendCompleteEvent = procedure(Sender: TObject; MessageID: DWORD;
    Result: TDXPlaySendCompleteResult; SendTime: Integer) of object;

  TCustomDXPlay = class(TComponent)
  private
    FDPlay: IDirectPlay4A;
    FGUID: string;
    FIsHost: Boolean;
    FLocalPlayer: TDXPlayPlayer;
    FMaxPlayers: Integer;
    FPlayers: TDXPlayPlayers;
    FCalledDoOpen: Boolean;
    FOnAddPlayer: TDXPlayEvent;
    FOnClose: TNotifyEvent;
    FOnDeletePlayer: TDXPlayEvent;
    FOnMessage: TDXPlayMessageEvent;
    FOnOpen: TNotifyEvent;
    FOnSendComplete: TDXPlaySendCompleteEvent;
    FOnSessionLost: TNotifyEvent;
    FOpened: Boolean;
    FRecvEvent: array[0..1] of THandle;
    FRecvThread: TThread;
    FInThread: Boolean;
    FProviderName: string;
    FProviders: TStrings;
    FSessionName: string;
    FSessions: TStrings;
    FReadSessioned: Boolean;
    FModemSetting: TDXPlayModemSetting;
    FTCPIPSetting: TDXPlayTCPIPSetting;
    FAsync: Boolean;
    FAsyncSupported: Boolean;
    procedure ChangeDPlay;
    procedure CreateDPlayWithoutDialog(out DPlay: IDirectPlay4A; const ProviderName: string);
    function OpenDPlayWithLobby(out Name: string): Boolean;
    function OpenDPlayWithoutLobby(out Name: string): Boolean;
    function OpenDPlayWithoutLobby2(const NewSession: Boolean; const ProviderName, SessionName, PlayerName: string): Boolean;
    procedure Open_(NameS: string);
    procedure ReceiveMessage;
    function GetProviders: TStrings;
    function GetSessionsPty: TStrings;
    procedure ClearSessionList;
    procedure SetGUID(const Value: string);
    procedure SetModemSetting(Value: TDXPlayModemSetting);
    procedure SetProviderName(const Value: string);
    procedure SetTCPIPSetting(Value: TDXPlayTCPIPSetting);
  protected
    procedure DoAddPlayer(Player: TDXPlayPlayer); virtual;
    procedure DoClose; virtual;
    procedure DoDeletePlayer(Player: TDXPlayPlayer); virtual;
    procedure DoMessage(From: TDXPlayPlayer; Data: Pointer; DataSize: Integer); virtual;
    procedure DoOpen; virtual;
    procedure DoSessionLost; virtual;
    procedure DoSendComplete(MessageID: DWORD; Result: TDXPlaySendCompleteResult;
      SendTime: Integer); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Close;
    procedure Open;
    procedure Open2(NewSession: Boolean; const SessionName, PlayerName: string);
    function GetProviderNameFromGUID(const ProviderGUID: TGUID): string;
    procedure GetSessions;
    procedure SendMessage(ToID: TDPID; Data: Pointer; DataSize: Integer);
    function SendMessageEx(ToID: TDPID; Data: Pointer; DataSize: Integer;
      dwFlags: DWORD): DWORD;
    property GUID: string read FGUID write SetGUID;
    property IsHost: Boolean read FIsHost;
    property LocalPlayer: TDXPlayPlayer read FLocalPlayer;
    property MaxPlayers: Integer read FMaxPlayers write FMaxPlayers;
    property OnAddPlayer: TDXPlayEvent read FOnAddPlayer write FOnAddPlayer;
    property OnClose: TNotifyEvent read FOnClose write FOnClose;
    property OnDeletePlayer: TDXPlayEvent read FOnDeletePlayer write FOnDeletePlayer;
    property OnMessage: TDXPlayMessageEvent read FOnMessage write FOnMessage;
    property OnOpen: TNotifyEvent read FOnOpen write FOnOpen;
    property OnSendComplete: TDXPlaySendCompleteEvent read FOnSendComplete write FOnSendComplete;
    property OnSessionLost: TNotifyEvent read FOnSessionLost write FOnSessionLost;
    property Opened: Boolean read FOpened;
    property Players: TDXPlayPlayers read FPlayers;
    property ProviderName: string read FProviderName write SetProviderName;
    property Providers: TStrings read GetProviders;
    property SessionName: string read FSessionName;
    property Sessions: TStrings read GetSessionsPty;
    property ModemSetting: TDXPlayModemSetting read FModemSetting write SetModemSetting;
    property TCPIPSetting: TDXPlayTCPIPSetting read FTCPIPSetting write SetTCPIPSetting;
    property Async: Boolean read FAsync write FAsync;
    property AsyncSupported: Boolean read FAsyncSupported;
  end;

  TDXPlay = class(TCustomDXPlay)
  published
    property Async;
    property GUID;
    property MaxPlayers;
    property ModemSetting;
    property TCPIPSetting;
    property OnAddPlayer;
    property OnClose;
    property OnDeletePlayer;
    property OnMessage;
    property OnOpen;
    property OnSendComplete;
    property OnSessionLost;
  end;

function DXPlayMessageType(P: Pointer): DWORD;

function DXPlayStringToGUID(const S: string): TGUID;
function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP: IDirectPlay;
  pUnk: IUnknown): HRESULT;

implementation

uses DXPlayFm, DXConsts;

function DXPlayMessageType(P: Pointer): DWORD;
begin
  Result := PDPMSG_GENERIC(P)^.dwType;
end;

function DXPlayStringToGUID(const S: string): TGUID;
var
  ErrorCode: Integer;
begin
  ErrorCode := CLSIDFromString(PWideChar(WideString(S)), Result);
  if ErrorCode<0 then
    raise EDXPlayError.Create(WindowsErrorMsg(ErrorCode));
end;

function GUIDToString(const ClassID: TGUID): string;
var
  ErrorCode: Integer;
  P: PWideChar;
begin
  ErrorCode := StringFromCLSID(ClassID, P);
  if ErrorCode<0 then
    raise EDXPlayError.Create(WindowsErrorMsg(ErrorCode));
  Result := P;
  CoTaskMemFree(P);
end;

function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP: IDirectPlay;
  pUnk: IUnknown): HRESULT;
type
  TDirectPlayCreate= function(const lpGUID: TGUID; out lplpDP: IDirectPlay; pUnk: IUnknown): HRESULT; stdcall;
begin
  Result := TDirectPlayCreate(DXLoadLibrary('DPlayX.dll', 'DirectPlayCreate'))
    (lpGUID, lplpDP, pUnk);
end;

function DXDirectPlayEnumerateA(lpEnumDPCallback: TDPEnumDPCallbackA; lpContext: Pointer): HRESULT;
type
  TDirectPlayEnumerateA= function(lpEnumDPCallback: TDPEnumDPCallbackA; lpContext: Pointer): HRESULT; stdcall;
begin
  Result := TDirectPlayEnumerateA(DXLoadLibrary('DPlayX.dll', 'DirectPlayEnumerateA'))
    (lpEnumDPCallback, lpContext);
end;

function DXDirectPlayLobbyCreateA(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
  lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HRESULT;
type
  TDirectPlayLobbyCreateA = function(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
    lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HRESULT; stdcall;
begin
  Result := TDirectPlayLobbyCreateA(DXLoadLibrary('DPlayX.dll', 'DirectPlayLobbyCreateA'))
    (lpguidSP, lplpDPL, lpUnk, lpData, dwDataSize);
end;

{  TDXPlayPlayers  }

constructor TDXPlayPlayers.Create;
begin
  inherited Create(TDXPlayPlayer);
end;

function TDXPlayPlayers.Find(ID: TDPID): TDXPlayPlayer;
var
  i: Integer;
begin
  i := IndexOf(ID);
  if i=-1 then
    raise EDXPlayError.Create(SDXPlayPlayerNotFound);
  Result := Players[i];
end;

function TDXPlayPlayers.IndexOf(ID: TDPID): Integer;
var
  i: Integer;
begin
  for i:=0 to Count-1 do
    if Players[i].FID=ID then
    begin
      Result := i;
      Exit;
    end;
  Result := -1;
end;

function TDXPlayPlayers.GetPlayer(Index: Integer): TDXPlayPlayer;
begin
  Result := TDXPlayPlayer(Items[Index]);
end;

{  TDXPlayModemSetting  }

destructor TDXPlayModemSetting.Destroy;
begin
  FModemNames.Free;
  inherited Destroy;
end;

procedure TDXPlayModemSetting.Assign(Source: TPersistent);
begin
  if Source is TDXPlayModemSetting then
  begin
    FEnabled := TDXPlayModemSetting(Source).FEnabled;
    FPhoneNumber := TDXPlayModemSetting(Source).FPhoneNumber;
    FModemName := TDXPlayModemSetting(Source).FModemName;
  end else
    inherited Assign(Source);
end;

function TDXPlayModemSetting.GetModemNames: TStrings;

  function EnumModemAddress(const guidDataType: TGUID;
    dwDataSize: DWORD; lpData: Pointer; lpContext: Pointer): BOOL; stdcall;
  begin
    if CompareMem(@guidDataType, @DPAID_Modem, SizeOf(TGUID)) then
      TStrings(lpContext).Add( PChar(lpData));
    Result := True;
  end;

var
  Lobby1: IDirectPlayLobbyA;
  Lobby: IDirectPlayLobby2A;
  DPlay1: IDirectPlay;
  DPlay: IDirectPlay4A;
  lpAddress: Pointer;
  dwAddressSize: DWORD;
begin
  if FModemNames=nil then
  begin
    FModemNames := TStringList.Create;
    try
      if DXDirectPlayLobbyCreateA(PGUID(nil)^, Lobby1, nil, nil, 0)<>0 then
        raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
      Lobby := Lobby1 as IDirectPlayLobby2A;

      if DXDirectPlayCreate(DPSPGUID_MODEM, DPlay1, nil)<>0 then
        raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
      DPlay := DPlay1 as IDirectPlay4A;

      {  get size of player address for all players  }
      if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, nil^, dwAddressSize)<>DPERR_BUFFERTOOSMALL then
        raise EDXPlayError.Create(SDXPlayModemListCannotBeAcquired);

      GetMem(lpAddress, dwAddressSize);
      try
        FillChar(lpAddress^, dwAddressSize, 0);

        {  get the address  }
        if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, lpAddress^, dwAddressSize)<>0 then
          raise EDXPlayError.Create(SDXPlayModemListCannotBeAcquired);

        {  get modem strings from address and put them in the combo box  }
        if Lobby.EnumAddress(@EnumModemAddress, lpAddress^, dwAddressSize, FModemNames)<>0 then
          raise EDXPlayError.Create(SDXPlayModemListCannotBeAcquired);
      finally
        FreeMem(lpAddress);
      end;
    except
      FModemNames.Free; FModemNames := nil;
      raise;
    end;
  end;

  Result := FModemNames;
end;

{  TDXPlayTCPIPSetting  }

procedure TDXPlayTCPIPSetting.Assign(Source: TPersistent);
begin
  if Source is TDXPlayTCPIPSetting then
  begin
    FEnabled := TDXPlayTCPIPSetting(Source).FEnabled;
    FHostName := TDXPlayTCPIPSetting(Source).FHostName;
  end else
    inherited Assign(Source);
end;

{  TCustomDXPlay  }

constructor TCustomDXPlay.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FPlayers := TDXPlayPlayers.Create;
  FModemSetting := TDXPlayModemSetting.Create;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品丝袜久久久久久app| 91免费看`日韩一区二区| 亚洲视频小说图片| 亚洲一区免费观看| 日韩精品一区二区三区在线播放| 波多野结衣精品在线| 国产精品每日更新| 日韩激情av在线| 欧美mv日韩mv| 国产精品影视在线观看| 国产精品一区一区| 91精品国产欧美一区二区| 五月婷婷欧美视频| 91精品欧美福利在线观看| 夜夜嗨av一区二区三区四季av| 久久女同性恋中文字幕| 欧美一区二区三区视频在线观看| 欧美精品一区二区三区蜜桃视频| 91精品国产综合久久久久| 欧美日韩国产免费一区二区| 激情五月播播久久久精品| 日本一区二区三区国色天香 | 4438x亚洲最大成人网| 美女脱光内衣内裤视频久久影院| 久久精品国产77777蜜臀| 石原莉奈在线亚洲三区| 国产精品夜夜爽| 欧美精品色一区二区三区| 欧美日韩精品电影| 国模一区二区三区白浆| 自拍偷拍亚洲欧美日韩| 日韩理论片一区二区| 欧美一区二区三区免费大片| 国产宾馆实践打屁股91| 日本精品视频一区二区三区| 99国产精品99久久久久久| 日韩欧美精品三级| 日韩视频免费观看高清完整版 | 国产精品私人自拍| 欧美日韩极品在线观看一区| 日韩主播视频在线| 国产精品国产自产拍在线| 91超碰这里只有精品国产| 成人激情小说网站| 婷婷中文字幕综合| 91精品久久久久久久99蜜桃| 粉嫩久久99精品久久久久久夜| 亚洲伦在线观看| 日韩电影在线观看网站| 韩国女主播一区| 中文字幕一区二区三区不卡 | 中文字幕av在线一区二区三区| 国产精品影视网| 精品国精品自拍自在线| 亚洲国产乱码最新视频| 亚洲免费电影在线| 亚洲色图在线视频| 中文字幕日韩精品一区| 国产欧美日韩不卡| 欧美一级高清片在线观看| 欧美浪妇xxxx高跟鞋交| 欧美手机在线视频| 欧美日韩大陆在线| 日韩一区二区三区精品视频| 欧美成人激情免费网| 日韩精品中文字幕在线一区| 精品国产乱码久久久久久影片| 精品乱人伦小说| 日韩一区二区精品在线观看| 精品av久久707| 国产欧美一区二区精品忘忧草| 国产亚洲精品福利| 国产精品久久久久毛片软件| 国产精品国产三级国产有无不卡 | 久久精品人人做人人爽97| 亚洲天堂成人网| 一区二区日韩av| 国产一区二区三区久久久| 国产福利精品一区| 色综合久久综合| 精品卡一卡二卡三卡四在线| 日本不卡高清视频| 国产午夜精品福利| 欧美精品一区二区不卡| 全部av―极品视觉盛宴亚洲| 精品欧美乱码久久久久久| 国产亚洲自拍一区| 亚洲黄色性网站| 久久精品国产久精国产爱| 国产精品538一区二区在线| 中国av一区二区三区| 国产日韩欧美不卡| 视频一区视频二区中文| 丁香亚洲综合激情啪啪综合| 国产曰批免费观看久久久| 99riav一区二区三区| av在线一区二区| 国产成人免费在线观看不卡| 九九国产精品视频| 日本精品裸体写真集在线观看| 精品88久久久久88久久久| 亚洲大片在线观看| 波多野结衣亚洲一区| 欧美变态tickle挠乳网站| 亚洲综合成人网| 91小视频免费观看| 国产欧美一区在线| 国内成人免费视频| 日韩亚洲欧美综合| 亚洲自拍偷拍麻豆| 91蜜桃传媒精品久久久一区二区| 精品国产麻豆免费人成网站| 韩国欧美一区二区| 日韩丝袜美女视频| 亚洲成av人片在线| 欧美色男人天堂| 亚洲影视资源网| 一本色道久久综合精品竹菊| 亚洲视频在线一区二区| 粉嫩一区二区三区在线看| www国产成人免费观看视频 深夜成人网| 午夜精品久久久久久久99樱桃| 日韩欧美国产小视频| 国产成人h网站| 久久久精品欧美丰满| 亚洲福利一区二区| 99国产精品久久久久久久久久| 中文字幕在线观看一区| 国产偷国产偷亚洲高清人白洁| 欧美日韩电影在线播放| 亚洲欧美视频在线观看| 首页国产丝袜综合| 99精品国产一区二区三区不卡| 日韩一区二区三区免费看| 日本欧美加勒比视频| 欧美一区二区性放荡片| 麻豆精品国产传媒mv男同| 欧美va亚洲va香蕉在线| 精品在线播放免费| 精品成人在线观看| 国产91富婆露脸刺激对白| 国产精品原创巨作av| 亚洲综合激情小说| 91国产视频在线观看| 亚洲综合自拍偷拍| 国产suv精品一区二区三区| 91网上在线视频| 亚洲精品乱码久久久久久黑人| 在线观看日韩毛片| 亚洲成人三级小说| 欧美无乱码久久久免费午夜一区| 亚洲一区在线看| 一本大道久久a久久精品综合| 亚洲三级视频在线观看| 欧美综合一区二区| 亚洲成人资源网| 欧美成人一区二区三区片免费| 国产成人精品免费视频网站| 亚洲欧美在线aaa| 欧美日韩精品一区二区三区蜜桃| 国产盗摄视频一区二区三区| www.66久久| 制服丝袜激情欧洲亚洲| 午夜欧美一区二区三区在线播放| 在线一区二区视频| 亚洲三级在线看| 99久久精品国产精品久久| 欧美乱熟臀69xxxxxx| 国产精品一区在线观看乱码| 日韩一区二区三区电影在线观看| 亚洲黄色录像片| 国产精品综合二区| voyeur盗摄精品| 久久久久久久久蜜桃| 日本三级亚洲精品| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲电影欧美电影有声小说| 日韩视频免费观看高清在线视频| 成人黄色网址在线观看| 亚洲第一成年网| 国产欧美一区二区三区鸳鸯浴| 欧美日韩久久久| 国产a精品视频| 午夜精品成人在线视频| 国产校园另类小说区| 欧美日韩国产片| 99久久综合狠狠综合久久| 蜜臀久久99精品久久久久宅男| 亚洲色欲色欲www| 欧美精品一区二区三区视频| 欧美日韩在线观看一区二区 | 精品免费一区二区三区| 色综合天天天天做夜夜夜夜做| 久久99精品久久久久久动态图| 一级中文字幕一区二区| 中文字幕国产一区二区| 欧美成人一级视频| 7777精品久久久大香线蕉 | 色综合久久66| 国产成人精品网址|