⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpthreadpas.pas

📁 用于开发税务票据管理的软件
💻 PAS
字号:
unit TCPthreadpas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, RxRichEd, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient,myconst, mytype,fiveformpas,
  ImgList, OleCtrls, SHDocVw;

type
  Ttcpthread = class(TThread)
  private
    idtcpclient:Tidtcpclient;
    onlineview:Tlistview;
    chat:Trichedit;
    CS: TRTLCriticalSection;

    procedure addonline;
    procedure deleonline;
    procedure getmes;
    procedure modiuserstate;
  protected
    procedure Execute; override;
  public
    fiveform1:Tfiveform;
    user:Ruserdata;
    online:array of Ruserdata;
    procedure startplay;
    procedure setobject(tcpclient:Tidtcpclient;listview:Tlistview;chatlist:Trichedit);

  end;

implementation

{ Ttcpthread }

procedure Ttcpthread.addonline;
var
userdata:Ruserdata;
begin
idtcpclient.ReadBuffer(userdata,sizeof(userdata));
EnterCriticalSection(CS);
setlength(online,high(online)+2);
online[high(online)]:=userdata;
//更新显示
with onlineview.Items.Add do
  begin
  caption:=userdata.username;
  ImageIndex:=userdata.whatdoing;
  subitems.Add(inttostr(userdata.fivejifeng));
  subitems.Add(inttostr(userdata.fivewin));
  subitems.Add(inttostr(userdata.fivelose));
  subitems.Add(inttostr(userdata.fiveescape));
  subitems.Add(inttostr(userdata.fivetotal));
  end;
LeaveCriticalsection(CS);
end;

procedure Ttcpthread.deleonline;
var
i:integer;
userdata:Ruserdata;
begin
idtcpclient.ReadBuffer(userdata,sizeof(userdata));
EnterCriticalSection(CS);
for i:=0 to 1 do
  begin
  //删除online的节点。
  if online[i].username=userdata.username then
    begin
    online[i]:=online[high(online)];
    setlength(online,high(online));
    end;
  if onlineview.Items.Item[i].caption=userdata.username then
    onlineview.Items.item[i].Delete;

  end;
LeaveCriticalsection(CS);
end;

procedure Ttcpthread.getmes;
var
mestext:Rtextdata;
begin
idtcpclient.ReadBuffer(mestext,sizeof(mestext));
EnterCriticalSection(CS);
chat.lines.Add(mestext.fromwho+' 对 '+mestext.towho+' 说:'+mestext.text);
chat.SelStart:=length(chat.Text)-length(mestext.fromwho+' 对 '+mestext.towho+' 说:'+mestext.text)-2;
chat.SelLength:=length(mestext.fromwho+' 对 '+mestext.towho);
chat.SelAttributes.Color:=clblue;
chat.Selattributes.Size:=mestext.size;

chat.selstart:=length(chat.text)-length(mestext.text)-2;
chat.SelLength:=length(mestext.text);
chat.SelAttributes.color:=mestext.color;
chat.Selattributes.Size:=mestext.size;

chat.SelStart := chat.Perform(EM_LINEINDEX, chat.Lines.count, 0) +chat.Lines.count;
chat.Perform(EM_SCROLLCARET, 0, 0);
LeaveCriticalsection(CS);
end;

procedure Ttcpthread.modiuserstate;
var
i:integer;
userdata:Ruserdata;
begin
idtcpclient.ReadBuffer(userdata,sizeof(userdata));
EnterCriticalSection(CS);
for i:=0 to high(online) do
  begin
  if online[i].username=userdata.username then
    begin
    online[i]:=userdata;
    onlineview.Items.Item[i].ImageIndex:=userdata.whatdoing;
    onlineview.Items.Item[i].SubItems.Strings[0]:=inttostr(userdata.fivejifeng);
    onlineview.Items.Item[i].SubItems.Strings[1]:=inttostr(userdata.fivewin);
    onlineview.Items.Item[i].SubItems.Strings[2]:=inttostr(userdata.fiveescape);
    onlineview.Items.Item[i].SubItems.Strings[3]:=inttostr(userdata.fivetotal);
    end;
  end;
LeaveCriticalSection(CS);
end;

//开始游戏
procedure Ttcpthread.startplay;
var
userdata:Ruserdata;
begin
idtcpclient.ReadBuffer(userdata,sizeof(userdata));

fiveform1.playerenemy:=userdata;
fiveform1.qitype:='黑';
fiveform1.Show;
end;

procedure Ttcpthread.Execute;
var
ctext:Rcommandtext;
userdata:Ruserdata;
mestext:Rtextdata;
begin
while not Terminated do
  begin
  idtcpclient.ReadBuffer(ctext,sizeof(ctext));
    case ctext.command of
    Caddonline:addonline;
    Cdeleonline:deleonline;
    Csendtext:getmes;
    Cmodiuserstate:modiuserstate;
    Cstart:startplay;
    end;//case
  end;
end;



procedure Ttcpthread.setobject(tcpclient: Tidtcpclient;
  listview: Tlistview; chatlist: Trichedit);
begin
self.idtcpclient:=tcpclient;
self.onlineview:=listview;
self.chat:=chatlist;
InitializeCriticalSection(cs);
end;



end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -