home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / DELPHIX.ZIP / Samples / Network / Chat2 / Main.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1998-10-06  |  3.6 KB  |  149 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, DXPlay, DirectX, Config;
  8.  
  9. const
  10.   DXCHAT_MESSAGE = 0;
  11.  
  12. type
  13.   TDXChatMessage = record
  14.     dwType: DWORD;  {  dwType is absolutely necessary.  }
  15.     Len: Integer;
  16.     C: array[0..0] of Char;
  17.   end;
  18.  
  19. type
  20.   TMainForm = class(TForm)
  21.     DXPlay1: TDXPlay;
  22.     Memo1: TMemo;
  23.     Edit1: TEdit;
  24.     Button1: TButton;
  25.     procedure DXPlay1AddPlayer(Sender: TObject; Player: TDXPlayPlayer);
  26.     procedure DXPlay1DeletePlayer(Sender: TObject; Player: TDXPlayPlayer);
  27.     procedure FormDestroy(Sender: TObject);
  28.     procedure FormCreate(Sender: TObject);
  29.     procedure DXPlay1Message(Sender: TObject; Player: TDXPlayPlayer; Data: Pointer;
  30.       DataSize: Integer);
  31.     procedure Button1Click(Sender: TObject);
  32.     procedure Edit1KeyDown(Sender: TObject; var Key: Word;
  33.       Shift: TShiftState);
  34.     procedure DXPlay1Open(Sender: TObject);
  35.   end;
  36.  
  37. var
  38.   MainForm: TMainForm;
  39.  
  40. implementation
  41.  
  42. {$R *.DFM}
  43.  
  44. procedure TMainForm.DXPlay1AddPlayer(Sender: TObject; Player: TDXPlayPlayer);
  45. begin
  46.   Memo1.Lines.Add(Format('  %s entered a room.', [Player.Name]));
  47. end;
  48.  
  49. procedure TMainForm.DXPlay1DeletePlayer(Sender: TObject;
  50.   Player: TDXPlayPlayer);
  51. begin
  52.   Memo1.Lines.Add(Format('  %s left a room.', [Player.Name]));
  53. end;
  54.  
  55. procedure TMainForm.DXPlay1Open(Sender: TObject);
  56. var
  57.   i: Integer;
  58. begin
  59.   for i:=0 to DXPlay1.Players.Count-1 do
  60.     if DXPlay1.Players[i].RemotePlayer then
  61.       Memo1.Lines.Add(Format('  %s is entering a room.', [DXPlay1.Players[i].Name]));
  62. end;
  63.  
  64. procedure TMainForm.FormDestroy(Sender: TObject);
  65. begin
  66.   DXPlay1.Close;
  67. end;
  68.  
  69. procedure TMainForm.FormCreate(Sender: TObject);
  70. var
  71.   ConfigForm: TConfigForm;
  72. begin
  73.   try
  74.     ConfigForm := TConfigForm.Create(Self);
  75.     try
  76.       ConfigForm.DXPlay := DXPlay1;
  77.       ConfigForm.ShowModal;
  78.       if ConfigForm.Tag=0 then Abort;
  79.     finally                          
  80.       ConfigForm.Free;
  81.     end;
  82.   except
  83.     on E: Exception do
  84.     begin
  85.       Application.ShowMainForm := False;
  86.       Application.HandleException(E);
  87.       Application.Terminate;
  88.     end;
  89.   end;
  90.  
  91.   MainForm.Caption := Format('%s : %s', [DXPlay1.ProviderName, DXPlay1.SessionName]);
  92. end;
  93.  
  94. procedure TMainForm.DXPlay1Message(Sender: TObject; Player: TDXPlayPlayer; Data: Pointer;
  95.   DataSize: Integer);
  96. var
  97.   s: string;
  98. begin
  99.   case DXPlayMessageType(Data) of
  100.     DXCHAT_MESSAGE:
  101.         begin          
  102.           if TDXChatMessage(Data^).Len<=0 then
  103.             s := ''  
  104.           else begin
  105.             SetLength(s, TDXChatMessage(Data^).Len);
  106.             StrLCopy(PChar(s), @TDXChatMessage(Data^).c, Length(s));
  107.           end;
  108.  
  109.           Memo1.Lines.Add(Format('%s>    %s', [Player.Name, s]));
  110.         end;
  111.   end;
  112. end;
  113.  
  114. procedure TMainForm.Button1Click(Sender: TObject);
  115. var
  116.   Msg: ^TDXChatMessage;
  117.   MsgSize: Integer;
  118. begin
  119.   MsgSize := SizeOf(TDXChatMessage)+Length(Edit1.Text);
  120.   GetMem(Msg, MsgSize);
  121.   try
  122.     Msg.dwType := DXCHAT_MESSAGE;
  123.     Msg.Len := Length(Edit1.Text);
  124.     StrLCopy(@Msg^.c, PChar(Edit1.Text), Length(Edit1.Text));
  125.  
  126.     {  The message is sent all.  }
  127.     DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize);
  128.  
  129.     {  The message is sent also to me.  }
  130.     DXPlay1.SendMessage(DXPlay1.LocalPlayer.ID, Msg, MsgSize);
  131.  
  132.     Edit1.Text := '';
  133.   finally
  134.     FreeMem(Msg);
  135.   end;
  136. end;
  137.  
  138. procedure TMainForm.Edit1KeyDown(Sender: TObject; var Key: Word;
  139.   Shift: TShiftState);
  140. begin
  141.   if Key=VK_RETURN then
  142.   begin
  143.     Button1Click(nil);
  144.     key := 0;
  145.   end;
  146. end;
  147.  
  148. end.
  149.