📄 mnform.pas
字号:
unit MnForm;
interface
uses
// Delphi units
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls, ExtCtrls, StdCtrls, ToolWin, ImgList, ClipBrd,
// ComDrv32 units
CPDrv, datamd, constb, Grids, Buttons;
// TTY units
const
telecount = 9;
teleconst: array[0..telecount - 1] of pchar = ('日期', '被叫号码', '分机号', '密码', '起始时间', '地区名',
'时长', '单价', '话费');
type
TMainForm = class(TForm)
cpDrv: TCommPortDriver;
RXPanel: TPanel;
Panel2: TPanel;
ToolBar1: TToolBar;
ConnectToolButton: TToolButton;
DisconnectToolButton: TToolButton;
E_ImageList: TImageList;
QuitTTYToolButton: TToolButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
StringGrid1: TStringGrid;
ToolButton1: TToolButton;
Edit1: TEdit;
ToolButton2: TToolButton;
BitBtn2: TBitBtn;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
ListBox1: TListBox;
Button1: TButton;
procedure ConnectToolButtonClick(Sender: TObject);
procedure DisconnectToolButtonClick(Sender: TObject);
procedure cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
DataSize: Cardinal);
procedure QuitTTYToolButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure Label2DblClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
// Startup about-box (splash screen)
telstr: string;
tellen: integer;
public
end;
var
MainForm: TMainForm;
implementation
uses dept;
{$R *.DFM}
// Connect
procedure TMainForm.ConnectToolButtonClick(Sender: TObject);
begin
telstr := '';
listbox1.Items.Clear;
// Do nothing if already connected
if cpDrv.Connected then
exit;
if cpDrv.Connect then
begin
label3.Font.Color := clgreen;
label3.Caption := '通讯口连接正常';
end
else
begin
label3.Font.Color := clred;
label3.Caption := '通讯口连接不正常,请重试!';
end;
end;
// Disconnect
procedure TMainForm.DisconnectToolButtonClick(Sender: TObject);
begin
// Do nothing if not connected
if not cpDrv.Connected then
exit;
// Disconnect
cpDrv.Disconnect;
label3.Font.Color := clred;
label3.Caption := '通讯口已断开!';
end;
procedure TMainForm.cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
DataSize: Cardinal);
var i: integer;
s, ss,dd_s,mm_s,yy_s,tt_s,
telchar,tele_dt,
ext_num, dial_num, pas, stch: string;
st_hh, st_mm, st_ss, ed_hh, ed_mm, ed_ss, dts_mm, dts_dd, dte_dd: word;
yy, mm, dd: word;
subs:integer ;
total: double;
nowdate : tdatetime;
begin
// Convert incoming data into a string
s := StringOfChar(' ', DataSize);
move(DataPtr^, pchar(s)^, DataSize);
// Exit if s is empty. This usually occurs when one or more NULL characters
// (chr(0)) are received.
{ while pos('^', s) > 0 do
delete(s, pos(#05, s), 1);
if s = '' then
exit;
i := pos('$ *L*NQU', s);
while i <> 0 do
begin
delete(s, i, 8);
i := pos(#10, s);
end;
i := pos(#13, s);
while i <> 0 do
begin
delete(s, 1, i);
i := pos(#13, s);
end; }
edit1.text:=edit1.Text+s;
telstr :=edit1.text;
// memo1.text:=memo1.text+s;
i:= pos('U',s);
i:= pos('^',s);
if length(edit1.text)=82 then
begin
if stringgrid1.rowcount > 30 then
begin
stringgrid1.rowcount := 2;
stringgrid1.Rows[1].Clear;
end;
button1.Click;
edit1.Text:='';
telchar:='';
telstr := '';
end;
end;
procedure TMainForm.QuitTTYToolButtonClick(Sender: TObject);
begin
close;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if application.MessageBox('退出此系统电话将不能计费!', '警告信息',
MB_OKCANCEL + MB_DEFBUTTON2) = IDOK then
begin
if not cpDrv.Connected then
exit;
// Disconnect
cpDrv.Disconnect;
end
else
abort;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var i: integer;
begin
stringgrid1.ColCount := telecount;
stringgrid1.RowCount := 2;
for i := 0 to telecount - 1 do
stringgrid1.Cells[i, 0] := teleconst[i];
end;
procedure TMainForm.ToolButton1Click(Sender: TObject);
var total: integer;
begin
with dddata do
begin
qy2.sql.Clear;
qy2.sql.Add('select * from teletmp where dial_num like ''0%''');
qy2.open;
qy2.first;
while not qy2.eof do
begin
qy3.SQl.Clear;
qy3.SQL.add('select * from telert ');
qy3.sql.add(' where :dial_num like dial_cd+''%'' order by dial_cd desc ');
qy3.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
qy3.open;
if qy3.RecordCount > 0 then
begin
total := round(qy3.fieldbyname('dial_rt').asCurrency
* trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60) + 0.49);
qy4.sql.clear;
qy4.SQL.Add('insert into teletrn(tele_dt,tele_flg,cntry_nm,st_tm,ed_tm,du_tm');
qy4.SQL.Add(',tele_rt,tele_amt,dial_num,ext_num)');
qy4.SQL.Add(' values(:tele_dt,:tele_flg,:cntry_nm,:st_tm,:ed_tm,:du_tm');
qy4.SQL.Add(',:tele_rt,:tele_amt,:dial_num,:ext_num)');
qy4.ParamByName('tele_dt').asdatetime := qy2.fieldbyname('tele_dt').asdatetime;
qy4.ParamByName('tele_flg').asstring := inttostr(qy3.fieldbyname('type_cd').asinteger);
qy4.ParamByName('cntry_nm').asstring := qy3.fieldbyname('cntry_nm').asstring;
qy4.ParamByName('st_tm').asstring :=
formatdatetime('hh:mm:ss', qy2.fieldbyname('st_tm').asdatetime);
qy4.ParamByName('ed_tm').asstring :=
formatdatetime('hh:mm:ss', qy2.fieldbyname('ed_tm').asdatetime);
qy4.ParamByName('du_tm').asinteger := trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60);
qy4.ParamByName('tele_rt').asCurrency := qy3.fieldbyname('dial_rt').asCurrency;
qy4.ParamByName('tele_amt').asCurrency := total;
qy4.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
qy4.ParamByName('ext_num').asstring := qy2.fieldbyname('ext_num').asstring;
qy4.ExecSQL;
stringgrid1.RowCount := stringgrid1.RowCount + 1;
stringgrid1.Cells[0, stringgrid1.RowCount - 2] :=
formatdatetime('yyyy-mm-dd', qy2.fieldbyname('tele_dt').asdatetime);
stringgrid1.Cells[1, stringgrid1.RowCount - 2] := qy2.fieldbyname('dial_num').asstring;
stringgrid1.Cells[2, stringgrid1.RowCount - 2] := qy2.fieldbyname('ext_num').asstring;
stringgrid1.Cells[4, stringgrid1.RowCount - 2] := qy2.fieldbyname('st_tm').asstring;
stringgrid1.Cells[5, stringgrid1.RowCount - 2] := qy3.fieldbyname('cntry_nm').asstring;
stringgrid1.Cells[6, stringgrid1.RowCount - 2] :=
inttostr(trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60));
stringgrid1.Cells[7, stringgrid1.RowCount - 2] := qy3.fieldbyname('dial_rt').asstring;
stringgrid1.Cells[8, stringgrid1.RowCount - 2] := inttostr(total);
end;
qy2.Next;
end;
qy2.sql.Clear;
qy2.sql.Add('select * from teletmp where dial_num not like ''0%''');
qy2.open;
qy2.first;
while not qy2.eof do
begin
qy3.SQl.Clear;
qy3.SQL.add('select a.loc_head,a.discrpt,a.loc_rt from telecnfg a ');
qy3.sql.add(' where :dial_num like rtrim(ltrim(loc_head))+''%''');
qy3.sql.add('order by loc_head desc ');
qy3.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
qy3.open;
if qy3.RecordCount > 0 then
begin
total := round(qy3.fieldbyname('loc_rt').asCurrency
* trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60) + 0.49);
qy4.sql.clear;
qy4.SQL.Add('insert into teletrn(tele_dt,tele_flg,cntry_nm,st_tm,ed_tm,du_tm');
qy4.SQL.Add(',tele_rt,tele_amt,dial_num,ext_num)');
qy4.SQL.Add(' values(:tele_dt,:tele_flg,:cntry_nm,:st_tm,:ed_tm,:du_tm');
qy4.SQL.Add(',:tele_rt,:tele_amt,:dial_num,:ext_num)');
qy4.ParamByName('tele_dt').asdatetime := qy2.fieldbyname('tele_dt').asdatetime;
qy4.ParamByName('tele_flg').asstring := '4';
qy4.ParamByName('cntry_nm').asstring := qy3.fieldbyname('discrpt').asstring;
qy4.ParamByName('st_tm').asstring :=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -