📄 ufrmmain.pas
字号:
unit UfrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList, StdCtrls, RzCmboBx, Mask, RzEdit, RzLstBox,
RzChkLst, RzLabel, RzTabs, RzGroupBar, ExtCtrls, RzPanel, RzListVw,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, RzButton,
IdAntiFreezeBase, IdAntiFreeze, Menus,IniFiles, RzRadChk;
const
//客户机端信号
KillConnect ='断开连接';
LoginConnect ='申请连接';
Door ='学生入/出门';
GetUserInfo ='获取学生信息';
InFlag ='学生是否进门';
//服务器端信号
StopServerNow ='关闭连接';
BroadCast ='系统广播';
UserInfo ='学生信息';
//公共信号
DATA ='数据信息';
GetDataSuccessIn ='接收入门数据成功';
GetDataSuccessOut='接收出门数据成功';
type
TfrmMain = class(TForm)
StatusBar1: TStatusBar;
StatusBar2: TStatusBar;
RzPanel1: TRzPanel;
RzPanel2: TRzPanel;
RzGroupBar1: TRzGroupBar;
RzGroup1: TRzGroup;
RzGroup2: TRzGroup;
RzGroup4: TRzGroup;
RzPanel3: TRzPanel;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
ImageListMenu: TImageList;
RzGroupBox1: TRzGroupBox;
edtPort: TRzEdit;
edtHost: TRzEdit;
RzLabel1: TRzLabel;
RzLabel2: TRzLabel;
RzListView1: TRzListView;
ImageListUser: TImageList;
IdTCPClient: TIdTCPClient;
RzMemoState: TRzMemo;
RzGroup3: TRzGroup;
edtUserID: TRzEdit;
RzBitBtn1: TRzBitBtn;
IdAntiFreeze1: TIdAntiFreeze;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
RzBitBtn2: TRzBitBtn;
RzRadioButton1: TRzRadioButton;
RzRadioButton2: TRzRadioButton;
procedure IdTCPClientConnected(Sender: TObject);
procedure IdTCPClientDisconnected(Sender: TObject);
procedure RzGroup1Items3Click(Sender: TObject);
procedure RzGroup1Items0Click(Sender: TObject);
procedure RzGroup1Items1Click(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure RzGroup4Items0Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
procedure edtUserIDChange(Sender: TObject);
procedure RzGroup2Items0Click(Sender: TObject);
procedure RzGroup1Items2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LockControls(ALock:Boolean);
function SendData(nIndex:Integer;sMsg:string):Boolean;
function ConcatStr(nCommand:string;nMsg:string):string; //待发送消息编码
procedure SplitStr(nMsg:string); //分解收到的消息
end;
var
frmMain: TfrmMain;
//----------------------------------
nCommand:string;
nStr:array[0..4] of Variant;
//----------------------------------
implementation
uses UfrmUserInfo,UfrmAbout;
{$R *.dfm}
procedure TfrmMain.IdTCPClientConnected(Sender: TObject);
var
LString : String;
begin
LString := IdTCPClient.ReadLn;
self.RzMemoState.Lines.Insert(0,'连接到服务器!');
self.RzMemoState.Lines.Insert(0,'服务器信息 -> '+LString);
LockControls(true);
end;
procedure TfrmMain.IdTCPClientDisconnected(Sender: TObject);
var
strMsg:string;
begin
self.RzMemoState.Lines.Insert(0,'与远程服务器断开连接');
strMsg:='';
strMsg:=self.ConcatStr(KillConnect,strMsg);
self.IdTCPClient.WriteLn(strMsg);
LockControls(false);
end;
procedure TfrmMain.LockControls(ALock: Boolean);
var
i : integer;
begin
for i := 0 to componentcount-1 do
if TControl(Components[i]).Tag = 99 then
TControl(Components[i]).Enabled := ALock;
end;
procedure TfrmMain.RzGroup1Items3Click(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.RzGroup1Items0Click(Sender: TObject);
begin
Self.RzMemoState.Lines.Clear;
with IdTCPClient do
begin
Host := edtHost.Text;
Port := StrToint(edtPort.Text);
try
Connect; // add a timeout here if you wish, eg: Connect(3000) = timeout after 3 seconds.
except
on E : Exception do
begin
LockControls(True);
//ShowMessage(E.Message);
self.RzMemoState.Lines.Append(E.Message);
end;
end;
end;
end;
procedure TfrmMain.RzGroup1Items1Click(Sender: TObject);
begin
if IdTCPClient.Connected then
try
IdTCPClient.Disconnect; // we can disconnect from either the server or the client side
except on E : Exception do
//ShowMessage(E.Message);
self.RzMemoState.Lines.Append(E.Message);
end;
end;
function TfrmMain.SendData(nIndex: Integer; sMsg: string): Boolean;
begin
Result:=False;
with IdTCPClient do
begin
try
case nIndex of
0: WriteLn(sMsg); //学生入/出门:InDoor+$YW$+学生编号;;
1: WriteLn(sMsg); //获取学生信息:GetUserInfo+$YW$+学生编号;
2: WriteLn(sMsg); //学生是否进门信息:InFlag+$YW$+学生编号;
end;
Result:=True;
except
on E : Exception do
begin
LockControls(True);
//ShowMessage(E.Message);
self.RzMemoState.Lines.Append(E.Message);
Result:=False;
end;
end;
end;
end;
function TfrmMain.ConcatStr(nCommand, nMsg: string): string;
var
strMsg:string;
begin
strMsg:=nCommand;
strMsg:=strMsg+'$YW$'+nMsg;
Result:=strMsg;
end;
procedure TfrmMain.SplitStr(nMsg: string);
var
strMsg:string;
i,j:Integer;
begin
strMsg:=nMsg;
i:=Pos('$YW$',strMsg); //查找信号命令符$YW$的位置
nCommand:=Copy(strMsg,1,i-1); //获得信号命令
//ShowMessage(nCommand);
Delete(strMsg,1,i+3); //删除已获得信号命令和$YW$字符串
//ShowMessage(strMsg);
i:=Pos('%YW%',strMsg); //查找数据信号符%YW%的位置
//ShowMessage(IntToStr(i));
j:=0;
while i>0 do
begin
//i:=Pos('%YW%',strMsg); //查找数据信号符%YW%的位置
nStr[j]:=Copy(strMsg,1,i-1); //获得数据
//ShowMessage(VarToStr(nStr[j]));
//ShowMessage(nStr[j]);
Delete(strMsg,1,i+3); //删除已获得数据信号和%YW%字符串
i:=Pos('%YW%',strMsg); //查找数据信号符%YW%的位置
j:=j+1;
end;
end;
procedure TfrmMain.RzBitBtn1Click(Sender: TObject);
var
strMsg:string;//发送的信息
recMsg:string;//返回的信息
//sCommand,sName:string;//返回数据中的:命令信号和用户名称
AItem:TListItem;
nI,j:Integer;
begin
strMsg:=self.edtUserID.Text+'%YW%';
strMsg:=Self.ConcatStr(Door,strMsg);
Self.IdTCPClient.WriteLn(strMsg); //发送入门/出门信息
self.RzMemoState.Lines.Append('发送数据成功');
recMsg:=Self.IdTCPClient.ReadLn; //接收服务器返回的信息:用户名
self.RzMemoState.Lines.Append('接收数据成功');
self.SplitStr(recMsg);
if nCommand=GetDataSuccessIn then
begin
AItem:=Self.RzListView1.Items.Add;
AItem.ImageIndex:=0;
AItem.Caption:=nStr[0];
end;
if nCommand=GetDataSuccessOut then
begin
for j:=0 to self.RzListView1.Items.Count-1 do
begin
if self.RzListView1.Items[j].Caption=nStr[0] then
begin
self.RzListView1.Items[j].Delete;
Exit;
end;
end;
end;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Application.MessageBox('确定退出本系统吗?','提示',MB_OKCANCEL+MB_ICONQUESTION)<>IDOK then
begin
Abort;
end;
end;
procedure TfrmMain.N1Click(Sender: TObject);
begin
self.RzListView1.ViewStyle:=vsIcon;
self.RzListView1.Refresh;
end;
procedure TfrmMain.N2Click(Sender: TObject);
begin
self.RzListView1.ViewStyle:=vsSmallIcon;
self.RzListView1.Refresh;
end;
procedure TfrmMain.N3Click(Sender: TObject);
begin
self.RzListView1.ViewStyle:=vsList;
self.RzListView1.Refresh;
end;
procedure TfrmMain.N4Click(Sender: TObject);
begin
self.RzListView1.ViewStyle:=vsReport;
self.RzListView1.Refresh;
end;
procedure TfrmMain.RzGroup4Items0Click(Sender: TObject);
var
strMsg:string;
recMsg:string;
i,j:Integer;
begin
if self.RzListView1.SelCount=0 then
begin
Application.MessageBox('请选择要查看的学生!','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end;
for i:=0 to self.RzListView1.Items.Count-1 do
begin
if self.RzListView1.Items[i].Selected then
begin
strMsg:=self.RzListView1.Items[i].Caption+'%YW%';
strMsg:=self.ConcatStr(GetUserInfo,strMsg);
Self.IdTCPClient.WriteLn(strMsg);
self.RzMemoState.Lines.Append('发送查询学生信息请求成功');
recMsg:=self.IdTCPClient.ReadLn;
self.RzMemoState.Lines.Append('查询学生信息请求被允许并返回信息');
self.SplitStr(recMsg);
if nCommand=UserInfo then
begin
try
frmUserInfo:=TfrmUserInfo.Create(Application);
frmUserInfo.txtID.Text :=nStr[0];
frmUserInfo.txtName.Text :=nStr[1];
frmUserInfo.txtSex.Text :=nStr[2];
frmUserInfo.txtBM.Text :=nStr[3];
frmUserInfo.txtDW.Text :=nStr[4];
frmUserInfo.ShowModal;
finally
frmUserInfo.Free;
end;
end;
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
SysSetup:TIniFile;
AppPath:string;
begin
AppPath:=ExtractFilePath(Application.ExeName)+'SysSetup.ini';
SysSetup:=TIniFile.Create(AppPath);
try
self.edtHost.Text:=SysSetup.ReadString('SYSTEM','HOSTIP','');
self.edtPort.Text:=SysSetup.ReadString('SYSTEM','HOSTPORT','');
finally
SysSetup.Free;
end;
end;
procedure TfrmMain.RzBitBtn2Click(Sender: TObject);
var
SysSetup:TIniFile;
AppPath:string;
begin
AppPath:=ExtractFilePath(Application.ExeName)+'SysSetup.ini';
SysSetup:=TIniFile.Create(AppPath);
try
SysSetup.WriteString('SYSTEM','HOSTIP',self.edtHost.Text);
SysSetup.WriteString('SYSTEM','HOSTPORT',self.edtPort.Text);
finally
SysSetup.Free;
end;
end;
procedure TfrmMain.edtUserIDChange(Sender: TObject);
begin
if self.RzRadioButton1.Checked then
Exit;
if self.RzRadioButton2.Checked then
self.RzBitBtn1Click(self.RzBitBtn1);
end;
procedure TfrmMain.RzGroup2Items0Click(Sender: TObject);
begin
Self.RzMemoState.Clear;
end;
procedure TfrmMain.RzGroup1Items2Click(Sender: TObject);
begin
try
frmAbout:=TfrmAbout.Create(Application);
frmAbout.ShowModal;
finally
frmAbout.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -