?? main.pas
字號:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, RzPanel, Trayico, Menus, Buttons, ComCtrls,
RzButton, DB, ADODB, RzLabel,DBClient,StrUtils;
type
//********************************************************************
//自定義類型
THandle = Integer;
JL_HANDLE = Integer;
PJL_HANDLE = ^JL_HANDLE;
//以HTTP方式登陸返回操作句柄,當(dāng)調(diào)用退出登陸時,此句柄自動失效。// 參數(shù)說明
T_JL_HttpLogin = function(strHost: PChar; // strHost: 主機(jī)名稱或者IP地址: 'www.surge.com.cn' 不用改變
nPort: Integer; // nPort: 端口號 : 7001 不用改變
strUserId: PChar; // strUserId: 用戶名
strPassword: PChar; // strPassworzd: 用戶密碼
strRegCode: PChar; // strRegCode: 注冊碼(僅 HTTP 使用):'88888888' 不用改變
pRtnHandle: PJL_HANDLE): Integer stdcall; // pRtnHandle: 返回操作句柄
//退出登陸時,此句柄自動失效
T_JL_Logout = function(pHandle: JL_HANDLE): Integer stdcall; // pRtnHandle: 登陸時的操作句柄
//單發(fā)或群發(fā)短信息
T_JL_SendMsg = function(pHandle: JL_HANDLE; //操作句柄
strFromPhone: PChar; // strFromPhone 短消息發(fā)送者手機(jī)號碼 ,可以發(fā)送單條或者多條短信,多個號碼之間用 "," 隔開
strToPhone: PChar; // strToPhone 目的手機(jī)號碼
strContent: PChar; // strContent 信息內(nèi)容
strSendTime: PChar): Integer stdcall; // strSendTime 定時發(fā)送時間。格式:yyyy-mm-dd hh:mm:ss 為空時,表示立即發(fā)送
//查詢帳戶余額
T_JL_GetAccountBalance = function(pHandle: JL_HANDLE; fBalance: PSingle): Integer stdcall;
// 查詢帳戶類型
T_JL_GetAccountType = function(pHandle: JL_HANDLE; nType: PInteger): Integer stdcall;
// 查詢單價
T_JL_GetAccountPrice = function(Handle: JL_HANDLE; fPrice: PSingle): Integer stdcall;
// 查詢帳戶注冊日期
T_JL_GetAccountRegTime = function(Handle: JL_HANDLE; strDate: PChar): Integer stdcall;
// 查詢帳戶失效日期
T_JL_GetAccountDenyTime = function(Handle: JL_HANDLE; strDate: PChar): Integer stdcall;
// 發(fā)送統(tǒng)計、 返回已發(fā)送的消息條數(shù) 、如果返回值 < 0,則請參考錯誤返回值定義
T_JL_GetSendCount = function(pHandle: JL_HANDLE; // 操作句柄
strStartDate: PChar; // 查詢開始日期
strEndDate: PChar;
nCountWaitSend: PInteger;
nCountTestSend: PInteger): Integer stdcall; // 查詢結(jié)止日期
// 接收短信 strFrom [21] strCreateTime[20] strContent [255]
T_JL_ReceiveSM = function(pHandle: JL_HANDLE; // 操作句柄
nLastMsgId: Integer): Integer stdcall; //上次接受到的最后一個MsgId,如果查詢?nèi)浚瑒t設(shè)置為0
//獲取一條短信
T_JL_GetOneSM = function(pHandle: JL_HANDLE; // 操作句柄
pnMsgID: PInteger; //信息id
strFrom: PChar; //返回發(fā)送者的手機(jī)號碼
strCreateTime: PChar; // 返回發(fā)送時間
strContent: PChar): Integer stdcall; //返回消息內(nèi)容。
// 修改用戶密碼
T_JL_ModifyPassword = function(pHandle: JL_HANDLE; // 操作句柄
strNewPassword: PChar): Integer stdcall; //strNewPassword:新的密碼
//********************************************************************
TSetupInfo = record
FAutoRun: boolean;
FServer: string[100];
FDatabase: string[100];
FUserName: string[100];
FPassword: string[100];
FDbUserName: string[100];
FDbPassword: string[100];
FTxDatabase : string[100];
end;
PSetupInfo = ^TSetupInfo;
TForm1 = class(TForm)
PopuRight: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
TrayIco: TRxTrayIcon;
RzPanel1: TRzPanel;
TimerShow: TTimer;
RzPanel2: TRzPanel;
RzGroupBox1: TRzGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
edServer: TEdit;
edtxDatabase: TEdit;
edDbUser: TEdit;
edDbPass: TEdit;
edUser: TEdit;
edPass: TEdit;
OkCmd: TBitBtn;
cbAutoRun: TCheckBox;
RzBitBtn1: TRzBitBtn;
RzBitBtn2: TRzBitBtn;
RzBitBtn3: TRzBitBtn;
RzPanel3: TRzPanel;
Panel2: TPanel;
Label7: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton4: TSpeedButton;
SaveDlg: TSaveDialog;
RED1: TRichEdit;
ADOConnObject: TADOConnection;
RzGroupBox2: TRzGroupBox;
RzBitBtn4: TRzBitBtn;
DateTimePicker2: TDateTimePicker;
DateTimePicker1: TDateTimePicker;
RzLabel1: TRzLabel;
AdoQry: TADOQuery;
Label8: TLabel;
EdSboDb: TEdit;
procedure FormShow(Sender: TObject);
procedure OkCmdClick(Sender: TObject);
procedure TrayIcoDblClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure RzBitBtn3Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
procedure RzBitBtn4Click(Sender: TObject);
procedure TimerShowTimer(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
OneHandle: THandle; //定義一個句柄變量
pRtnHandle: JL_HANDLE; //定義一個句柄變量
JL_HttpLogin: T_JL_HttpLogin; //登陸
JL_Logout: T_JL_Logout; //退出登陸
JL_ModifyPassword: T_JL_ModifyPassword; //修改密碼對象
JL_SendMsg: T_JL_SendMsg; //發(fā)送信息
JL_GetAccountRegTime: T_JL_GetAccountRegTime; //注冊時間
JL_GetAccountDenyTime: T_JL_GetAccountDenyTime; //截止時間
JL_GetAccountType: T_JL_GetAccountType; //用戶類型
JL_GetAccountPrice: T_JL_GetAccountPrice; //單價/條
JL_GetAccountBalance: T_JL_GetAccountBalance; //帳戶余額
JL_GetSendCount: T_JL_GetSendCount; //發(fā)送統(tǒng)計
JL_ReceiveSM: T_JL_ReceiveSM;
JL_GetOneSM: T_JL_GetOneSM;
procedure Save;
procedure SetConnected(AValue: boolean);
procedure ShowResultMsg(num: Integer);
procedure loginin;
procedure sendSms;
procedure ReceiveSms ;
procedure CkFlow(AKey: Variant; AUser: string; FCancel: integer;
Fnote: string);
procedure ExecSQL(s:string);
procedure OpenSQL(s: string);
procedure getContent(AstrFrom, AstrContent: string);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function GlbSetupInfo: TSetupInfo;
procedure LoadSetupInfo(var ARec: TSetupInfo);
procedure SaveSetupInfo(const ARec: TSetupInfo);
implementation
uses SelfFunc,TimerDlg,SP_Utils;
{$R *.dfm}
var
FPSetupInfo: PSetupInfo = nil;
const
config_file_old = 'tsconfig.dat';
config_file = 'tssetup.dat';
function GlbSetupInfo: TSetupInfo;
begin
if FPSetUpInfo = nil then
begin
New(FPSetupInfo);
LoadSetupInfo(FPSetUpInfo^);
end;
Result := FPSetUpInfo^;
end;
procedure Encripty(var ARec: TSetupInfo; ASize: integer);
var
pc: PChar;
i: integer;
begin
pc := PChar(@ARec);
for i := 0 to ASize - 1 do
pc[i] := chr(ord(pc[i]) xor $57);
end;
procedure InitSetupRec(var ARec: TSetupInfo);
begin
with ARec do
begin
FAutoRun := true;
FServer := '(local)';
FDatabase := 'SboDemo_china';
FTxDatabase := 'Txsbo';
FUserName := '28151:admin';
FPassword := '123456';
FDbUserName := 'sa';
FDbPassword := '';
end;
end;
procedure LoadSetupInfo(var ARec: TSetupInfo);
var
st: TStream;
sf: string;
procedure _LoadOld;
begin
sf := ExtractFilePath(ParamStr(0)) + config_file_old;
if not FileExists(sf) then
Exit;
st := TFileStream.Create(sf, fmOpenReadWrite);
st.Read(ARec, st.Size);
st.Free;
end;
begin
InitSetupRec(ARec);
sf := ExtractFilePath(ParamStr(0)) + config_file;
if not FileExists(sf) then
begin
_LoadOld;
Exit;
end;
st := TFileStream.Create(sf, fmOpenReadWrite);
st.Read(ARec, st.Size);
Encripty(ARec, st.Size); //解密
st.Free;
end;
procedure SaveSetupInfo(const ARec: TSetupInfo);
var
st: TStream;
sf: string;
ARec1: TSetupInfo;
begin
sf := ExtractFilePath(ParamStr(0)) + config_file;
st := TFileStream.Create(sf, fmCreate);
ARec1 := ARec;
Encripty(ARec1, SizeOf(TSetupInfo)); //加密
st.Write(ARec1, SizeOf(TSetupInfo));
st.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
with GlbSetupInfo do
begin
cbAutoRun.Checked := FAutoRun;
edServer.Text := FServer;
edtxDatabase.Text := FtxDatabase;
edsbodb.Text := FDatabase;
edDbUser.Text := FDbUserName;
edDbPass.Text := FDbPassword;
edUser.Text := FUserName;
edPass.Text := FPassword;
end;
end;
procedure TForm1.Save;
var
ARec: TSetupInfo;
begin
with ARec do
begin
FAutoRun := cbAutoRun.Checked;
FServer := edServer.Text;
FTxDatabase := edtxDatabase.Text;
FDatabase:= edsbodb.Text;
FDbUserName := edDbUser.Text;
FDbPassword := edDbPass.Text;
FUserName := edUser.Text;
FPassword := edPass.Text;
AutoLaunch_Add(ParamStr(0), 'TX-SBO短信服務(wù)器', 0);
end;
SaveSetupInfo(ARec);
FPSetupInfo^ := ARec;
end;
procedure TForm1.OkCmdClick(Sender: TObject);
begin
Save;
SetConnected(true);
RED1.lines.add('登錄成功');
RzBitBtn2Click(nil);
Modalresult := mrOk;
end;
procedure TForm1.TrayIcoDblClick(Sender: TObject);
begin
Show;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Hide;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
show;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Tag := 1;
Close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (Tag = 0) and TrayIco.Active then
begin
Action := caNone;
Hide;
Exit;
end;
if not MsgBoxSel('確定要退出 '+ Caption +' 嗎?') then
begin
Action := caNone;
Tag := 0;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
TrayIco.Active := false;
end;
procedure TForm1.RzBitBtn3Click(Sender: TObject);
begin
Save;
hide;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if Red1.Lines.Count > 0 then
if MsgBoxSel('確定要清除所有記錄嗎?') then
Red1.Clear;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
if REd1.SelText = '' then
Exit;
REd1.CopyToClipboard;
MsgBoxInfo('已經(jīng)復(fù)制到剪貼板!');
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if Red1.Lines.Count > 0 then
if SaveDlg.Execute then
Red1.Lines.SaveToFile(SaveDlg.FileName);
end;
procedure TForm1.SetConnected(AValue: boolean);
var Adoquery:tadoquery;
procedure SetConnString(aServer, adb, aUser, aPass: string);
begin
ADOConnObject.Cancel;
ADOConnObject.Connected := false;
ADOConnObject.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;' +
'User ID='+ aUser +';' +
'Initial Catalog='+ adb +';' +
'Data Source=' + aServer + ';' +
'Password=' + aPass + ';' +
'Use Procedure for Prepare=1;Auto Translate=True;' +
'Packet Size=4096;Workstation ID=SYX;'+
'Use Encryption for Data=False;'+
'Tag with column collation when possible=False';
end;
begin
if AValue then
begin
SetConnString(edServer.Text , edtxDatabase.Text , edDbUser.Text , edDbPass.Text );
ADOConnObject.Connected := AValue;
if ADOConnObject.Connected then
loginin ;
end
else
begin
ADOConnObject.Connected := false;
end;
end;
//----------用戶登陸--------------------------------------------
procedure TForm1.loginin;
var
DllPaht: string; // DLL的地址
rtn: Integer;
begin
//判斷是否登陸
if (OneHandle <> 0) or (pRtnHandle <> 0) then begin
RED1.Lines.Add( '你已經(jīng)登陸了!');
exit;
end;
try
DllPaht := ExtractFilePath(Paramstr(0)) + 'JL_ISP.dll'; //獲得DLL的地址
OneHandle := LoadLibrary(PChar(DllPaht)); //動態(tài)載入DLL,并返回其句柄
if OneHandle <> 0 then {//如果載入成功則獲取ShowCalendar函數(shù)的地址} begin
@JL_HttpLogin := GetProcAddress(OneHandle, 'JL_HTTPLogin');
@JL_Logout := GetProcAddress(OneHandle, 'JL_Logout');
@JL_ModifyPassword := GetProcAddress(OneHandle, 'JL_ModifyPassword');
@JL_SendMsg := GetProcAddress(OneHandle, 'JL_SendMsg');
@JL_GetAccountRegTime := GetProcAddress(OneHandle, 'JL_GetAccountRegTime');
@JL_GetAccountDenyTime := GetProcAddress(OneHandle, 'JL_GetAccountDenyTime');
@JL_GetAccountType := GetProcAddress(OneHandle, 'JL_GetAccountType');
@JL_GetAccountPrice := GetProcAddress(OneHandle, 'JL_GetAccountPrice');
@JL_GetAccountBalance := GetProcAddress(OneHandle, 'JL_GetAccountBalance');
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -