📄 reg.pas
字号:
unit Reg;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets,WinSock, NMUDP, ScktComp, ComCtrls;
type
TRegForm = class(TForm)
GB1: TGroupBox;
NameEdit: TEdit;
L1: TLabel;
NumEdit: TEdit;
RegButton: TButton;
CancelButton: TButton;
RegStu: TNMUDP;
QuesSock: TClientSocket;
PaperStep: TProgressBar;
procedure RegButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure RegStuDataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure FormCreate(Sender: TObject);
procedure QuesSockRead(Sender: TObject; Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
PaperSize:Integer;
HadRec:Integer;
RecFileStream:TFileStream;
end;
var
RegForm: TRegForm;
const
RegistedOK='Registed ok!';
RegistedNO='Registed no!';
REGIDD='$$ZHAOLOVEWANG$$';
implementation
uses main;
var
StuInf:TStudentInf;
{$R *.dfm}
procedure TRegForm.RegButtonClick(Sender: TObject);
var
WSAData:TWSAData;
HostName:array[0..36] of Char;
HostEnt:PHostEnt;
begin
WSAStartup($200,WSAData);
gethostname(HostName,25);
HostEnt:=gethostbyname(HostName);
HostIP:=IntToStr(Ord((HostEnt^.h_addr^)^));
HostIP:=HostIP+'.'+IntToStr(Ord((HostEnt^.h_addr^+1)^));
HostIP:=HostIP+'.'+IntToStr(Ord((HostEnt^.h_addr^+2)^));
HostIP:=HostIP+'.255';
RegStu.RemoteHost :=HostIP;
HostName:='Who is Teacher?';
RegStu.SendBuffer(HostName,Length(HostName));
end;
procedure TRegForm.CancelButtonClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TRegForm.RegStuDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
Buffer:array[0..255] of Char;
TimeLen:String;
i:Integer;
begin
RegStu.ReadBuffer(Buffer,NumberBytes);
if Buffer='I am.' then
begin
MainForm.TeacherIP:=FromIP;
StuInf.Name :=NameEdit.Text;
StuInf.Num :=NumEdit.Text;
StuInf.IDD :=REGIDD;
CopyMemory(@Buffer,@StuInf,SizeOf(StuInf));
RegStu.SendBuffer(Buffer,SizeOf(StuInf));
end
else
begin
if Copy(Buffer,1,Length(RegistedOK))=RegistedOK then
begin
PaperSize:=StrToInt(Copy(Buffer,NumberBytes-19,10));
TimeLen:='';
for i:=9 downto 1 do
begin
if Buffer[NumberBytes-i]=Chr(0) then Break;
TimeLen:=TimeLen+Buffer[NumberBytes-i];
end;
MainForm.TimeCount:=StrToInt(TimeLen);
PaperStep.Max :=PaperSize;
QuesSock.Host :=FromIP;
QuesSock.Open;
end
else if Copy(Buffer,1,Length(RegistedOK))=RegistedNO then
begin
ShowMessage('注册不成功!');
Application.Terminate;
end;
end;
end;
procedure TRegForm.FormCreate(Sender: TObject);
begin
HadRec:=0;
RecFileStream:=TFileStream.Create(MainForm.PaperFileName,fmCreate);
end;
procedure TRegForm.QuesSockRead(Sender: TObject; Socket: TCustomWinSocket);
var
Buffer:array[0..32767] of Byte;
RecLen:Integer;
begin
RecLen:=Socket.ReceiveBuf(Buffer,32767);
HadRec:=HadRec+RecLen;
if RecLen>0 then
begin
RecFileStream.Write(Buffer,RecLen);
PaperStep.StepBy(RecLen);
end;
if HadRec=PaperSize then
begin
HadRec:=0;
RecFileStream.Free;
MainForm.Show;
MainForm.InitQues;
Close;
end;
end;
procedure TRegForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -