📄 gsmctrfr.pas
字号:
unit GSMCtrFr;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, GSM, ExtCtrls, Gauges, dm_GSM, Buttons, ComCtrls,
ToolWin, ImgList, Terminal, ActnList, XSMS, ExtDlgs, Grids, MPlayer, Connect,
Wap, Mask, CommConnect;
const
glRed = 1;
glGreen = 3;
glYellow = 5;
glNone = 0;
type
TGSMCentralForm = class(TForm)
ImageList: TImageList;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Panel2: TPanel;
GroupBox2: TGroupBox;
IndNetRegStatus: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Panel1: TPanel;
Panel6: TPanel;
StatusBar: TStatusBar;
Semafor: TSpeedButton;
SpeedButton1: TSpeedButton;
TabSheet5: TTabSheet;
Panel7: TPanel;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
Panel8: TPanel;
Panel9: TPanel;
ModemLog: TTerminal;
SMSLog: TTerminal;
Label1: TLabel;
DA: TEdit;
Label2: TLabel;
Message: TEdit;
BitBtn1: TBitBtn;
AutoShowModemLog: TCheckBox;
ConfigureGroupbox: TGroupBox;
SCAEdit: TEdit;
PinEdit: TEdit;
PINLabel: TLabel;
SCALabel: TLabel;
ModemComboBox: TComboBox;
ModemLabel: TLabel;
SMSLOGCheckBox: TCheckBox;
GSMLOGCheckBox: TCheckBox;
SMSLogButton: TButton;
GSMLogButton: TButton;
SMSLogSaveDialog: TSaveDialog;
GSMLogSaveDialog: TSaveDialog;
Label3: TLabel;
SMSFormat: TComboBox;
GroupBox1: TGroupBox;
CatchSMSMT: TCheckBox;
CatchSMSCB: TCheckBox;
CatchSMSDS: TCheckBox;
OnlyIndication: TCheckBox;
ManufacturerId: TMemo;
DeliveryNotification: TCheckBox;
DCS: TComboBox;
SMSKind: TComboBox;
Label4: TLabel;
Label5: TLabel;
SMSKind2: TComboBox;
PictureGB: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
PictureWidth: TEdit;
PictureHeight: TEdit;
PictureNumAnimations: TEdit;
ScrollBox1: TScrollBox;
Picture: TPaintBox;
Label9: TLabel;
PictureOperator: TComboBox;
vCardGB: TGroupBox;
Label10: TLabel;
Label11: TLabel;
vCardName: TEdit;
vCardPhone: TEdit;
Blink: TButton;
Button2: TButton;
Button3: TButton;
SavePictureDialog: TSavePictureDialog;
OpenPictureDialog: TOpenPictureDialog;
MelodyGB: TGroupBox;
Label12: TLabel;
MelodyName: TEdit;
MelodyKeyboard: TPaintBox;
Button1: TButton;
Button4: TButton;
MelodyGrid: TStringGrid;
MelodyNote: TComboBox;
MelodyDuration: TComboBox;
MelodyDuration2: TComboBox;
MelodyScale: TComboBox;
MelodyStyle: TComboBox;
MelodyTempo: TComboBox;
MelodyVolume: TComboBox;
MelodyInsert: TCheckBox;
Button5: TButton;
Button6: TButton;
SaveMelodyDialog: TSaveDialog;
OpenMelodyDialog: TOpenDialog;
SEOGB: TGroupBox;
SEOFileName: TEdit;
Label13: TLabel;
Button7: TButton;
Label14: TLabel;
SEOName: TEdit;
SEOPicture: TImage;
SEOMidi: TMediaPlayer;
OpenSEOMidiDialog: TOpenDialog;
WapPushGB: TGroupBox;
WPSIPanel: TPanel;
Label20: TLabel;
Label21: TLabel;
Label17: TLabel;
siHref: TEdit;
siAction: TComboBox;
siId: TEdit;
WPSLPanel: TPanel;
Label22: TLabel;
Label23: TLabel;
slHref: TEdit;
slAction: TComboBox;
WPCOPanel: TPanel;
Label18: TLabel;
Label19: TLabel;
coObjects: TMemo;
coServices: TMemo;
siSiExpires: TMaskEdit;
Label15: TLabel;
Spec: TComboBox;
ComPort: TComboBox;
Label16: TLabel;
Label24: TLabel;
BaudRate: TComboBox;
Button8: TButton;
Label25: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure IndNetRegStatusClick(Sender: TObject);
procedure StatusBarClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ModemLogKeyPress(Sender: TObject; var Key: Char);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SMSLOGCheckBoxClick(Sender: TObject);
procedure SMSLogButtonClick(Sender: TObject);
procedure GSMLogButtonClick(Sender: TObject);
procedure GSMLOGCheckBoxClick(Sender: TObject);
procedure SMSKindChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PicturePaint(Sender: TObject);
procedure PictureWidthExit(Sender: TObject);
procedure PictureWidthKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure PictureMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure BlinkClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure MelodyKeyboardPaint(Sender: TObject);
procedure MelodyKeyboardMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MelodyKeyboardMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure MelodyGridDblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private
FSaveActivePage: TTabSheet;
FLastSMSKind, FLastSMSKind2: Integer;
FSMSKindLock: Byte;
FSmartMessage: TSmartMessageClass;
FEMS: TEMSObjectClass;
FWapPush: TWAPServiceClass;
fPictureBitmap: TBitmap;
fReference: Integer;
fMelodyKeyPressTick: Longint;
fMelodyKeyPressed: Integer;
fMelodyArray: array[0..6] of TComboBox;
fSEOPictureFileName: string;
fWapPushTransaction: Byte;
procedure CheckGSMActive;
procedure cmNetRegistrationChanged(var Msg: TMessage); message cm_NetRegistrationChanged;
procedure cmModemStatusChanged(var Msg: TMessage); message cm_ModemStatusChanged;
procedure SendSMSPhn(aDA, S: string; const WS: widestring; aDeliveryNotification: Boolean; aDCS: Byte; aUDH, aNoConv, aUnicode: Boolean);
function GetGlyphNum(aGlyph: Byte; aOnOff: Boolean): Integer;
procedure StatusLineOnHint(Sender: TObject);
procedure ShowModemLog;
procedure HideModemLog;
procedure GetConfiguration;
procedure SetConfiguration;
procedure AdjustSMSKind;
procedure AdjustPicture;
procedure GetKeyRect(aScale: TSoundMelodyPatternScale; aNote: TSoundMelodyPatternNote; var R: TRect; var Keyis: Integer);
procedure MelodySetFromGrid;
function GetMelodyFromGrid: TSoundMelody;
procedure SetMelodyToGrid(aMelody: TSoundMelody);
procedure AdjustSEO;
public
{ Public declarations }
end;
var
GSMCentralForm: TGSMCentralForm;
implementation
uses
AuxGSM, AuxStr, IniFiles, CmdLine, Math;
resourcestring
sModemNotActive = 'Device is not active';
{$R *.DFM}
const
SendPrefix = '+:';
MaxSMSLength = 160;
CaptionStr = 'GSM Central [%s]';
procedure TGSMCentralForm.FormCreate(Sender: TObject);
var
I: TGSMEquipment;
J, N: Integer;
S: string;
I1: TSoundMelodyPatternNote;
I2: TSoundMelodyPatternDuration;
I3: TSoundMelodyPatternDurationSpecifier;
I4: TSoundMelodyPatternStyle;
I5: TSoundMelodyPatternScale;
SndM: TSoundMelody;
resourcestring
sMelodyTitles = 'Scale;Note;Dur;Dur2;Tempo;Style;Vol.;';
begin
GSMDataModule.ModemLog:= ModemLog;
GSMDataModule.SMSLog:= SMSLog;
PageControl1.ActivePage:= TabSheet1;
Semafor.Align:= alClient;
Caption:= Format(CaptionStr, [GSMEquipmentLongName[GSMDataModule.GSM.Equipment]]);
ImageList.GetBitmap(GetGlyphNum(glNone, False), IndNetRegStatus.Glyph);
ImageList.GetBitmap(GetGlyphNum(glNone, False), Semafor.Glyph);
for i:=Low(TGSMEquipment) to High(TGSMEquipment) do
ModemComboBox.Items.Add(GSMEquipmentLongName[i]);
// GSMDataModule.Comm1.Open;
Application.OnHint:= StatusLineOnHint;
DCS.ItemIndex:= 2;
Spec.ItemIndex:= 0;
fPictureBitmap:= TBitmap.Create;
fPictureBitmap.Monochrome:= True;
MelodyScale.Items.Clear;
N:= 55;
for I5:= Low(TSoundMelodyPatternScale) to High(TSoundMelodyPatternScale) do
begin
MelodyScale.Items.Add(Format('%dHz', [N]));
N:= N*2;
end;
MelodyNote.Items.Clear;
for I1:= Low(SoundMelodyPatternNoteEnum) to High(SoundMelodyPatternNoteEnum) do
MelodyNote.Items.Add(SoundMelodyPatternNoteEnum[I1]);
MelodyDuration.Items.Clear;
for I2:= Low(SoundMelodyPatternDurationEnum) to High(SoundMelodyPatternDurationEnum) do
MelodyDuration.Items.Add(SoundMelodyPatternDurationEnum[I2]);
MelodyDuration2.Items.Clear;
for I3:= Low(SoundMelodyPatternDurationSpecifierEnum) to High(SoundMelodyPatternDurationSpecifierEnum) do
MelodyDuration2.Items.Add(SoundMelodyPatternDurationSpecifierEnum[I3]);
MelodyStyle.Items.Clear;
for I4:= Low(SoundMelodyPatternStyleEnum) to High(SoundMelodyPatternStyleEnum) do
MelodyStyle.Items.Add(SoundMelodyPatternStyleEnum[I4]);
MelodyTempo.Items.Clear;
for J:= Low(SoundMelodyPatternTempoEnum) to High(SoundMelodyPatternTempoEnum) do
MelodyTempo.Items.Add(IntToStr(SoundMelodyPatternTempoEnum[J]));
MelodyGrid.ColCount:= 7;
fMelodyArray[0]:= MelodyScale;
fMelodyArray[1]:= MelodyNote;
fMelodyArray[2]:= MelodyDuration;
fMelodyArray[3]:= MelodyDuration2;
fMelodyArray[4]:= MelodyTempo;
fMelodyArray[5]:= MelodyStyle;
fMelodyArray[6]:= MelodyVolume;
S:= sMelodyTitles;
for J:= Low(fMelodyArray) to High(fMelodyArray) do
begin
MelodyGrid.ColWidths[J]:= fMelodyArray[J].Width;
MelodyGrid.Cells[J, 0]:= Copy(S, 1, Pos(';', S)-1);
Delete(S, 1, Pos(';', S));
end;
SndM:= TSoundMelody.Create;
try
SetMelodyToGrid(SndM);
finally
SndM.Free;
end;
MelodySetFromGrid;
siAction.ItemIndex:= 2;
slAction.ItemIndex:= 0;
end;
function TGSMCentralForm.GetGlyphNum;
begin
Result:= aGlyph;
Inc(Result, Byte((aGlyph > 0) and aOnOff));
end;
procedure TGSMCentralForm.CheckGSMActive;
begin
if not GSMDataModule.Active then
GSMError(sModemNotActive);
end;
procedure TGSMCentralForm.SendSMSPhn;
var
aSMS: TSMSSubmit;
resourcestring
sDeviceNotActive = 'Device not active. Connect?';
begin
if not GSMDataModule.Active then
begin
if MessageDlg(sDeviceNotActive, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
Abort;
SetConfiguration;
GSMDataModule.GSM.Open;
end;
CheckGSMActive;
aSMS:= TSMSSubmit.Create;
try
aSMS.GSM:= GSMDataModule.GSM;
aSMS.DA:= aDA;
if not aNoConv then
S:= ISOtoSMS(S);
if aUnicode then
aSMS.WideUD:= Copy(WS,1,70)
else
aSMS.UD:= Copy(S,1,MaxSMSLength);
aSMS.DCS:= aDCS;
aSMS.SRR:= aDeliveryNotification;
aSMS.UDHI:= aUDH;
GSMDataModule.SendSMS(aSMS);
GSMDataModule.LogSMS(aSMS);
finally
aSMS.Free;
end;
end;
procedure TGSMCentralForm.cmNetRegistrationChanged;
var
Col: Byte;
begin
case Msg.wParam of
1: Col:= glGreen;
2: Col:= glYellow;
else
Col:= glRed;
end;
IndNetRegStatus.Glyph:= nil;
ImageList.GetBitmap(GetGlyphNum(Col, True), IndNetRegStatus.Glyph);
end;
procedure TGSMCentralForm.cmModemStatusChanged;
var
Col: Byte;
i: Integer;
begin
for i:=0 to ConfigureGroupBox.ControlCount-1 do
ConfigureGroupBox.Controls[i].Enabled := not GSMDataModule.GSM.Active;
with SMSLogCheckBox do
SMSLogButton.Enabled := Enabled and Checked;
with GSMLogCheckBox do
GSMLogButton.Enabled := Enabled and Checked;
case Msg.wParam and $7F of
0: Col:= glRed;
1:
begin
Col:= glGreen;
with GSMDataModule do
if (Msg.wParam and $80 <> 0) and GSM.Active then
begin
ManufacturerId.Lines.Text:= Format('%s/%s'#13#10'%s'#13#10'S/N: %s', [GSM.ManufacturerId, GSM.ModelId, GSM.RevisionId, GSM.SerialNumberId]);
end;
end;
else
Col:= glNone;
end;
Semafor.Glyph:= nil;
ImageList.GetBitmap(GetGlyphNum(Col, True), Semafor.Glyph);
Application.ProcessMessages;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -