unit Unit1;
interface
uses
{UnitIO, }Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SerialNG, ComCtrls, Buttons, ExtCtrls, DB, DBTables, DBCtrls, Mask, Grids, DBGrids, MPlayer;
type
TForm1 = class(TForm)
SerialPortNG1: TSerialPortNG; Timer1: TTimer;
Timer2: TTimer;
StatusBar1: TStatusBar; DataSource1: TDataSource; Table1: TTable;
Table1TANGGAL: TStringField; Table1JAM: TStringField;
Table1NO_PENGIRIM: TStringField; Table1SMS: TMemoField;
TimerJam: TTimer; Panel6: TPanel;
Table2: TTable;
StringField1: TStringField;
StringField2: TStringField; StringField3: TStringField;
MemoField1: TMemoField; DataSource2: TDataSource;
Timer3: TTimer; TimerAwal: TTimer;
Panel3: TPanel; Memo2: TMemo;
Label7: TLabel; Label6: TLabel;
Label3: TLabel; Label9: TLabel;
SBGetMCTR: TSpeedButton; SBSetHP: TSpeedButton;
Label20: TLabel; CBCom: TComboBox;
CBBoud: TComboBox; ESetHP: TEdit;
EMCTR: TEdit; E_SMS: TEdit; POUTBOX: TPanel;
Label10: TLabel;
Label16: TLabel; Label17: TLabel; Label18: TLabel;
Label19: TLabel; DBEdit4: TDBEdit;
DBEdit5: TDBEdit; DBEdit6: TDBEdit;
DBMemo2: TDBMemo; DBNavigator2: TDBNavigator;
Panel1: TPanel; Label1: TLabel;
SpeedButton2: TSpeedButton; Label5: TLabel;
Label2: TLabel; Label4: TLabel;
SBSetup: TSpeedButton; SBINBOX: TSpeedButton;
SBOUTBOX: TSpeedButton; EHPNomor: TEdit;
PINBOX: TPanel; Label11: TLabel;
Label12: TLabel; Label13: TLabel;
Label14: TLabel; Label8: TLabel;
DBEdit1: TDBEdit; DBEdit2: TDBEdit;
DBEdit3: TDBEdit; DBMemo1: TDBMemo;
DBNavigator1: TDBNavigator; Panel4: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Label15: TLabel; EKTKUNCI: TEdit; ESMS: TEdit;
EDURASI: TEdit; ETGL2: TEdit;
EKATEGORI: TEdit; MKirimBalik: TMemo;
EKirimBalik: TEdit; MSimulasi: TMemo;
Button1: TButton; Button3: TButton;
TabSheet4: TTabSheet; PHide: TPanel;
SBConvSMS: TSpeedButton; SBConvMCtr: TSpeedButton;
SBConvHP: TSpeedButton; SBGetNoHP: TSpeedButton;
SpeedButton1: TSpeedButton; Label22: TLabel;
ECMC: TEdit; EKode: TEdit;
Edit6: TEdit; EAT: TEdit;
SMDR: TMemo; Button2: TButton;
Memo1: TMemo; BBDEL: TBitBtn;
BSMSIN: TButton; BCek_n_Del1: TButton;
BCek_n_Del: TButton; Edit1: TEdit;
PageControl2: TPageControl;
TabSheet5: TTabSheet;
BB_AddLagu: TBitBtn; DBNavigator3: TDBNavigator; OpenDialog1: TOpenDialog;
BB_PollBaru: TBitBtn; Label21: TLabel;
DBE_No: TDBEdit; DSPoll: TDataSource;
Label24: TLabel;
DBE_Judul_Lagu: TDBEdit;
Label25: TLabel;
DBE_Group_Penyanyi: TDBEdit;
Label26: TLabel;
DBE_File_Name: TDBEdit;
Label27: TLabel; DBE_Dir: TDBEdit;
Label28: TLabel; DBE_Count: TDBEdit;
Label29: TLabel; DBE_Diputar: TDBEdit;
BB_Post: TBitBtn; BB_Del: TBitBtn;
BB_Edit: TBitBtn; E_Judul_Lagu: TEdit;
E_Group_Penyanyi: TEdit; TPoll: TTable;
MP1: TMediaPlayer; TimerPlay: TTimer;
Panel2: TPanel; DBGrid1: TDBGrid;
SBClose: TSpeedButton; Label31: TLabel;
TabSheet2: TTabSheet;
TimerDurasi: TTimer;
TabSheet6: TTabSheet; Label30: TLabel; PB1: TProgressBar;
TBDurasi: TTrackBar; Label32: TLabel;
LDurasi: TLabel; Label35: TLabel;
Label36: TLabel; BitBtn1: TBitBtn;
BB_STOP_N_PLAY: TBitBtn; Shape1: TShape;
TabSheet7: TTabSheet; Button4: TButton;
BB_Sort: TBitBtn; Edit2: TEdit;
Shape3: TShape; TimerDetik: TTimer;
SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton;
Label37: TLabel; Label34: TLabel;
Shape2: TShape; Label33: TLabel;
Label38: TLabel; Label39: TLabel;
TBLamaPoll: TTrackBar; BB_Matic: TBitBtn;
Shape4: TShape;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SerialPortNG1RxClusterEvent(Sender: TObject); procedure SBGetMCTRClick(Sender: TObject);
procedure MemoTextChange(Sender: TObject);
procedure SBConvSMSClick(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SBConvMCtrClick(Sender: TObject);
procedure SBConvHPClick(Sender: TObject); procedure CBComClick(Sender: TObject);
procedure SBSetupClick(Sender: TObject); procedure CBBoudClick(Sender: TObject);
procedure SBCloseClick(Sender: TObject); procedure MemoTextClick(Sender: TObject);
procedure Button2Click(Sender: TObject); procedure SBGetNoHPClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject);
procedure TimerJamTimer(Sender: TObject); procedure SBINBOXClick(Sender: TObject);
procedure HidePanel;
procedure SBOUTBOXClick(Sender: TObject);
procedure SBSetHPClick(Sender: TObject); procedure EHPNomorChange(Sender: TObject);
procedure Timer3Timer(Sender: TObject); procedure BSMSINClick(Sender: TObject);
procedure SMDRChange(Sender: TObject); procedure BCek_n_Del1Click(Sender: TObject);
procedure BCek_n_DelClick(Sender: TObject); procedure TimerAwalTimer(Sender: TObject);
procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject);
procedure BB_AddLaguClick(Sender: TObject); procedure BB_CancelClick(Sender: TObject);
procedure BB_PostClick(Sender: TObject); procedure BB_DelClick(Sender: TObject); procedure BB_EditClick(Sender: TObject);
procedure DBE_Judul_LaguChange(Sender: TObject);
procedure DBE_Group_PenyanyiChange(Sender: TObject); procedure E_SMSChange(Sender: TObject);
procedure DBE_NoKeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Button4Click(Sender: TObject);
procedure BB_SortClick(Sender: TObject);
procedure BB_STOP_N_PLAYClick(Sender: TObject);
procedure TimerPlayTimer(Sender: TObject); procedure BB_PollBaruClick(Sender: TObject);
procedure TBDurasiChange(Sender: TObject); procedure BitBtn1Click(Sender: TObject);
procedure BB_MaticClick(Sender: TObject); procedure TimerDurasiTimer(Sender: TObject);
procedure TBLamaPollChange(Sender: TObject); procedure CBComChange(Sender: TObject);
procedure TimerDetikTimer(Sender: TObject); procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject); private
public
{ Public declarations }
end;
var
Form1: TForm1;
i: word;
SS, GabPDU, balik, CodHP, PDUSMS, TerimaBaru: string;
testing, Terima, CodHP1, Tgl1, Jam1, PDUSMS1, SMS1, codeTGL, codeJAM {punya procedure Conv SMS In}: string;
pjh1, pjm1, panjang, SMSCount: integer; lpt0, dtout, countdel: byte;
lpt1: array [0..7] of byte;
adaOK, adaCMGL, adatitik2, adaCMGD, idx, pjlagu, Dur: integer;
passok: byte; nolagu: byte;
START_POLL: BOOLEAN;
implementation
//uses mainform, UnitIDPass;
{$R *.dfm}
procedure AddHexString(S : String; Lines : TStrings ); const SLen = 30;
begin SS:=S;
end;
procedure ConvMsg(InText: string; var E6, E2, E3, E4 :String; pjm: integer); var pj, pj2, x, y, a, b, c, ind, ind1,
buff1, buff2, BUFF3, cod: byte; cods, cods1, cods2,
ED1, ED2, ED3, ED4, ED6, sx0, sx1: string; msg1: array [0..160] of Char; // character
msg2: array [0..160] of byte; // asci
msg3: array [0..160] of string; // biner string
msg4: array [0..160] of string; // bantuan biner string per bit msg5: array [0..160] of byte; // data char dlm byte
msg6: array [0..160] of string; // data char Hex String
begin ED2:=''; ED3:='';
ED1:=InText;
pj:=length(ED1); //pjm:=pj;
case (pj and $0F) of
$00: sx0:='0'; $01: sx0:='1';
$02: sx0:='2'; $03: sx0:='3';
$04: sx0:='4'; $05: sx0:='5';
$06: sx0:='6'; $07: sx0:='7';
$08: sx0:='8'; $09: sx0:='9';
$0A: sx0:='A'; $0B: sx0:='B';
$0C: sx0:='C'; $0D: sx0:='D';
$0E: sx0:='E'; $0F: sx0:='F';
case (pj and $F0) of $00: sx1:='0';
$10: sx1:='1'; $20: sx1:='2';
$30: sx1:='3'; $40: sx1:='4';
$50: sx1:='5'; $60: sx1:='6';
$70: sx1:='7'; $80: sx1:='8';
$90: sx1:='9'; $A0: sx1:='A'; $B0: sx1:='B';
$C0: sx1:='C';
$D0: sx1:='D'; $E0: sx1:='E'; $F0: sx1:='F';
end;
x:=0;
StrLCopy(Msg1, PChar(ED1), pj);
repeat
Msg2[x]:=ord(Msg1[x]);
ED2:=ED2+intTOstr(Msg2[x]); y:=0;
Msg3[x]:=''; buff1:=Msg2[x];
repeat inc(y);
buff3:=Buff1 div 2; Buff2:=Buff1 mod 2;
if buff2=0 then
Msg3[x]:='0'+Msg3[x]
buff1:=buff3; until y=7;
ED3:=Msg3[x]+ED3; x:=x+1;
until x=pj; a:=7*pj;
b:=a mod 8; c:=8-b;
case c of
1: ED3:='0'+ED3;
2: ED3:='00'+ED3; 3: ED3:='000'+ED3; 4: ED3:='0000'+ED3;
5: ED3:='00000'+ED3;
6: ED3:='000000'+ED3; 7: ED3:='0000000'+ED3; 8: ED3:=ED3;
end; xx:=0;
pj2:=length(ED3); ED4:='';
ED6:=''; IND:=pj2+1;
repeat ind:=ind-8;
Msg4[xx]:=copy(ED3,ind,8); y:=1;
cod:=0; ind1:=1;
Msg6[xx]:=''; repeat
cods1:=copy(Msg4[xx],ind1,4); ind1:=5;
if cods1='0000' then cods2:='0'; if cods1='0001' then cods2:='1';
if cods1='0010' then cods2:='2'; if cods1='0011' then cods2:='3';
if cods1='0100' then cods2:='4'; if cods1='0101' then cods2:='5';
if cods1='0110' then cods2:='6'; if cods1='0111' then cods2:='7';
if cods1='1000' then cods2:='8'; if cods1='1001' then cods2:='9';
if cods1='1010' then cods2:='A'; if cods1='1011' then cods2:='B'; if cods1='1100' then cods2:='C';
if cods1='1101' then cods2:='D';
if cods1='1110' then cods2:='E'; if cods1='1111' then cods2:='F'; Msg6[xx]:=Msg6[xx]+Cods2;
until y>2; y:=1;
Msg5[xx]:=0; REPEAT
cods:=copy(Msg4[xx],y,1); case y of
1: if cods='0' then cod:=0 else cod:=$80; 2: if cods='0' then cod:=0 else cod:=$40;
3: if cods='0' then cod:=0 else cod:=$20; 4: if cods='0' then cod:=0 else cod:=$10;
5: if cods='0' then cod:=0 else cod:=$08; 6: if cods='0' then cod:=0 else cod:=$04;
7: if cods='0' then cod:=0 else cod:=$02; 8: if cods='0' then cod:=0 else cod:=$01;
end; inc(y);
UNTIL y>8;
ED4:=ED4+Msg4[xx];
ED6:=ED6+Msg6[xx]; until ind=1;
E6:=sx1+sx0+ED6; E2:=ED2;
E3:=ED3; E4:=ED4;
end;
procedure TForm1.FormCreate(Sender: TObject); var xx: integer;
begin
START_POLL:=FALSE; passok:=0;
Table1.Open;
Table2.Open;
Timer2.Enabled:=True;
HidePanel; SBSetup.Click;
SELF.WindowState:=WSMAXIMIZED;
LDurasi.Caption:=intTOstr(TBDurasi.Position); LLamaPoll.Caption:=intTOstr(TBLamaPoll.Position);
SerialPortNG1.Active := True;
TPoll.Open;
BB_Cancel.Enabled:=False;
BB_Post.Enabled:=False;
{ if FileExists('.\hp.dat') = false then begin
'Isikan No. Validasi HP dan Klik Tombol Validasi HP'); end
else begin
xx:=1;
Memo1.Lines.LoadFromFile('.\hp.dat');
ESetHP.Text:=''; repeat
ESetHP.Text:=ESetHP.Text+copy(Memo1.Text,xx,1); xx:=xx+1;
until copy(Memo1.Text,xx,1)=chr(13); end; }
end;
procedure TForm1.FormDestroy(Sender: TObject); begin
SerialPortNG1.Active := False; if TPoll.Active=true then TPoll.Close;
end;
procedure TForm1.SerialPortNG1RxClusterEvent(Sender: TObject); var MCtr, Mctr1, AA, ax: string;
pj, AAA: integer; begin
smdr.Clear;
if SerialPortNG1.NextClusterSize >= 0 then
begin
AddHexString(SerialPortNG1.ReadNextClusterAsString,SMDR.Lines);
end;
SMDR.Lines.Add(ss);
idx:=1;
case Form1.Tag of 0: begin
MCtr:=SMDR.Lines.Text; pj:=length(MCtr);
repeat
AA:=copy(Mctr,idx,1);
inc(idx);
until (AA='"') or (idx>pj);
AA:=''; MCtr1:='';
repeat
Mctr1:=MCtr1+AA; AA:=copy(Mctr,idx,1);
inc(idx);
until (AA='"') or (idx>pj); Form1.Tag:=1;
EMCTR.Text:=MCtr1;
end;
3: begin // 3.. 5 Send SMS
if (AnsiPos('>', Balik))> 0 then begin
SerialPortNG1.SendString(GabPDU); Form1.Tag:=4;
end; end;
4: begin
Form1.Tag:=5;
end; 5: begin
aaa:=AnsiPos('OK', Balik); if aaa>0 then
begin
//ShowMessage('Pesan terkirim');
else ShowMessage('Pesan tidak terkirim...'+chr(13)+ 'Ada ERROR'+chr(13)+
'Cek No HP dan Pesan'); Form1.Tag:=1;
Timer1.Enabled:=True; end;
6: begin // Test AT Command
AA:=SMDR.Text; AA:=Testing;
AA:=''; end; 7: begin
AA:=SMDR.Text;
pj:=length(AA); Terima:=''; idx:=1;
repeat
ax:=copy(AA,idx,2);
inc(idx);
until (ax='OK') or (idx>pj);
Form1.Tag:=1; end;
10: begin
Timer1.Enabled:=False;
BSMSIN.Click; end;
20: begin
adaOK:=pos('OK',Testing);
adaCMGL:=pos('+CMGL:',Testing);
if ((adaOK>0) and (adaCMGL>0)) then begin
Form1.Tag:=1; end;
if (adaOK>0) and (adaCMGL=0) and (adaCMGD=0) then begin
TimerAwal.Enabled:=False; Timer1.Enabled:=True;
end; end;
end;
end;
procedure Convert(InText: string; Pilih: Boolean; var OutText: String; pjh: integer);
var pjhp, ul1, count1, idx, Kon: integer;
code1, NoHP, KodePj: string;
HP1: array [0..20] of string; // biner string begin
count1:=0; repeat
HP1[count1]:=''; inc(Count1);
until Count1>20;
pjHP:=Length(InText); code1:=copy(InText,1,1);
if (code1='0') or (code1='+') then NoHP:=copy(InText,2,pjHP-1) else NoHP:=InText;
code1:=copy(NoHP,1,2);
if (code1<>'62') then NoHP:='62'+NoHP;
pjHP:=Length(NoHP);
if (pjHP mod 2)<>0 then NoHP:=NoHP+'F' else
if pilih=False then begin
pjHP:=Length(NoHP); Kon:=(pjHP div 2) + 1;
end else
begin
Kon:=pjHP;
end; case Kon of
$00: KodePj:='00'; $01: KodePj:='01'; $02: KodePj:='02';
$03: KodePj:='03';
$04: KodePj:='04'; $05: KodePj:='05'; $06: KodePj:='06';
$07: KodePj:='07'; $08: KodePj:='08';
$09: KodePj:='09'; $0A: KodePj:='0A';
$0B: KodePj:='0B'; $0C: KodePj:='0C';
$0D: KodePj:='0D'; $0E: KodePj:='0E';
$0F: KodePj:='0F'; end;
if ((pjHP mod 2)<>0) and (pilih=True) then ul1:=(pjHP+1) div 2 else
ul1:=pjHP div 2; count1:=0;
idx:=1; repeat
HP1[count1]:=copy(HP1[count1],2,1)+copy(HP1[count1],1,1); idx:=idx+2;
inc(Count1); until Count1=ul1;
count1:=0; NoHP:='';
repeat
NoHP:=NoHP+HP1[count1];
inc(Count1); until Count1=ul1;
OutText:=KodePj+'91'+NoHP; end;
procedure TForm1.SBGetMCTRClick(Sender: TObject);
begin
Form1.Tag:=0;
if SerialPortNG1.CommPort=CBCom.Text then
begin
SerialPortNG1.SendString('AT+CSCA?'+#$0D);
end;
if SerialPortNG1.CommPort<>CBCom.Text then
begin
Timer2.Enabled:=True;
end; end;
procedure TForm1.MemoTextChange(Sender: TObject);
begin
Label5.Caption:=intTOstr(length(MemoText.Lines.Text));
if (EHPNomor.Text<>'') and (MemoText.Text<>'') then SpeedButton2.Enabled:=True
else
SpeedButton2.Enabled:=False;
procedure TForm1.SBConvSMSClick(Sender: TObject);
VAR EE6,EE2,EE3,EE4: STRING; pjss: integer;
begin
if MemoText.Lines.Text='' then MemoText.Lines.Text:=' ';
ConvMsg((MemoText.Lines.Text),EE6,EE2,EE3,EE4,pjss); pjm1:=pjss;
PDUSMS:=EE6; end;
procedure TForm1.SpeedButton2Click(Sender: TObject); begin
Timer1.Enabled:=False;
SBConvMCtr.Click; SBConvHP.Click; SBConvSMS.Click;
panjang:=(length('0100'+CodHP+'0000'+PDUSMS)) div 2;
GabPDU:=ECMC.Text+'0100'+CodHP+'0000'+PDUSMS+chr(26);
EAT.Text:='';
EAT.Text:='AT+CMGS='+intTOstr(panjang);
Form1.Tag:=3;
SerialPortNG1.SendString(EAT.Text+#$0D);
Table2.Append;
Table2.Fields[0].AsString:=dateTOstr(date); Table2.Fields[1].AsString:=timeTOstr(time);
Table2.Fields[2].AsString:=EHPNomor.Text; Table2.Fields[3].AsString:=MemoText.Text;
Table2.Post; end;
procedure TForm1.SBConvMCtrClick(Sender: TObject);
pjk: integer; begin
Convert(EMCTR.Text, False,SSS,pjk); ECMC.Text:=SSS;
end;
procedure TForm1.SBConvHPClick(Sender: TObject); var SSS: String; pjs: integer;
begin
if EHPNomor.Text='' then ShowMessage('Inputkan No HP !')
else begin
Convert(EHPNomor.Text, True,SSS,pjs);
pjh1:=pjs;
CodHP:=SSS;
EKode.Text:=CodHP;//+' '+intTOstr(pjh1)+' '+CodHP; end;
end;
procedure TForm1.CBComClick(Sender: TObject); begin
SerialPortNG1.CommPort:=CBCom.Text; end;
procedure TForm1.SBSetupClick(Sender: TObject);
begin
HidePanel;
PSETUP.Visible:=True; end;
procedure TForm1.CBBoudClick(Sender: TObject);
begin
SerialPortNG1.BaudRate := StrToIntDef(CBBoud.Text,57600);
end;
procedure TForm1.SBCloseClick(Sender: TObject); begin
Close; end;
procedure TForm1.MemoTextClick(Sender: TObject);
begin
SBSetup.Tag:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Tag:=6; Testing:='';
SerialPortNG1.SendString(EAT.Text+#$0D);
end;
procedure TForm1.SBGetNoHPClick(Sender: TObject); var codes, codehps, xs,xxxs, codeSMS, codeSMSb,
codepj, codeSMSc: string;
codei, codehpi, codeSMSi, x, y, pj, pjb: integer;
begin
codes:=copy(Terima,1,2);
if codes='01' then codei:=1; if codes='02' then codei:=2; if codes='03' then codei:=3; if codes='04' then codei:=4;
if codes='05' then codei:=5; if codes='06' then codei:=6; if codes='07' then codei:=7; if codes='08' then codei:=8;
if codes='09' then codei:=9; if codes='0A' then codei:=10; if codes='0B' then codei:=11; if codes='0C' then codei:=12;
if codes='0D' then codei:=13; if codes='0E' then codei:=14; if codes='0F' then codei:=15; if codes='00' then codei:=0;
codei:=((codei+2)*2)+1;
CodeHPs:=copy(Terima,codei,2); // panjang no hp
if codeHPs='01' then codeHPi:=1; if codeHPs='02' then codeHPi:=2;
if codeHPs='03' then codeHPi:=3; if codeHPs='04' then codeHPi:=4; if codeHPs='05' then codeHPi:=5; if codeHPs='06' then codeHPi:=6;
if codeHPs='07' then codeHPi:=7; if codeHPs='08' then codeHPi:=8; if codeHPs='09' then codeHPi:=9; if codeHPs='0A' then codeHPi:=10;
if codeHPs='0B' then codeHPi:=11; if codeHPs='0C' then codeHPi:=12; if codeHPs='0D' then codeHPi:=13; if codeHPs='0E' then codeHPi:=14;
if codeHPs='0F' then codeHPi:=15; if codeHPs='00' then codeHPi:=0; //codeHPi:=strTOint(codeHPs);
Xs:=copy(Terima,codei+2,2);// 19 PAKE KODE INTERNASIONAL
if ((codeHPi mod 2)<>0) then
CodHP1:=copy(Terima,codei+2+2,codeHPi+1) else
CodHP1:=copy(Terima,codei+2+2,codeHPi);
x:=1; xxxs:='';
repeat
xxxs:=xxxs+copy(codHP1,x+1,1);
xxxs:=xxxs+copy(codHP1,x,1); x:=x+2;
until x>codeHPi;
if (codeHPi mod 2)<>0 then
begin
xxxs:=copy(xxxs,1,codeHPi);
codeHPi:=codeHPi+1; end;
xxxs:='+'+xxxs; codHP1:=xxxs;
codeTGL:=copy(Terima,codei+2+2+codeHPi+4,6);
codeTGL:=copy(xxxs,6,1)+copy(xxxs,5,1)+'/'+ copy(xxxs,4,1)+copy(xxxs,3,1)+'/'+
copy(xxxs,2,1)+copy(xxxs,1,1);
codeJAM:=copy(Terima,codei+2+2+codeHPi+4+6,6); xxxs:=codeJAM;
codeJam:=copy(xxxs,2,1)+copy(xxxs,1,1)+':'+ copy(xxxs,4,1)+copy(xxxs,3,1);
codePJ:=copy(Terima,codei+2+2+codeHPi+4+6+6+2,2);//+2 karena validasi sms tdk
dipakai
pj:=strTOint('$'+codePJ);
codeSMS:=copy(Terima,codei+2+2+codeHPi+4+6+6+2+2,1+(length(Terima)-(codei+2+2+codeHPi+4+6+6+2+2)));
x:=length(codeSMS); y:=1;
codeSMSb:='';
repeat // membalik hex
codeSMSb:=copy(codeSMS,y,2)+codeSMSb;
y:=y+2; until y>x;
codeSMS:=codeSMSb; codeSMSb:='';
y:=1;
repeat // hec to bin
case strTOint('$'+copy(codeSMS,y,1)) of $0: codeSMSb:=codeSMSb+'0000';
$1: codeSMSb:=codeSMSb+'0001'; $2: codeSMSb:=codeSMSb+'0010';
$3: codeSMSb:=codeSMSb+'0011'; $4: codeSMSb:=codeSMSb+'0100';
$5: codeSMSb:=codeSMSb+'0101'; $6: codeSMSb:=codeSMSb+'0110';
$8: codeSMSb:=codeSMSb+'1000'; $9: codeSMSb:=codeSMSb+'1001';
$A: codeSMSb:=codeSMSb+'1010'; $B: codeSMSb:=codeSMSb+'1011';
$C: codeSMSb:=codeSMSb+'1100'; $D: codeSMSb:=codeSMSb+'1101';
$E: codeSMSb:=codeSMSb+'1110'; $F: codeSMSb:=codeSMSb+'1111';
end; inc(y);
until y>x;
pjb:=length(codeSMSb);
codeSMSb:=copy(codeSMSb,pjb-(pj*7)+1,pjb-(pjb-(pj*7)));
pjb:=length(codeSMSb);
y:=1;
codeSMS:='';
repeat // bin to sms
codeSMSc:=copy(codeSMSb,y,7);
codeSMSi:=(strTOint(copy(codeSMSc,1,1))*$40)+
(strTOint(copy(codeSMSc,2,1))*$20)+ (strTOint(copy(codeSMSc,3,1))*$10)+
(strTOint(copy(codeSMSc,4,1))*$08)+ (strTOint(copy(codeSMSc,5,1))*$04)+
(strTOint(copy(codeSMSc,6,1))*$02)+ (strTOint(copy(codeSMSc,7,1))*$01);
codeSMS:=chr(codeSMSi)+codeSMS; y:=y+7
until y>pjb; Table1.Append;
Table1.Fields[0].AsString:=codeTGL; Table1.Fields[1].AsString:=codeJAM;
Table1.Fields[2].AsString:=codHP1; Table1.Fields[3].AsString:=codeSMS;
MemoText.Clear;
MemoText.Lines.Add(codeTGL);
MemoText.Lines.Add(codeJAM); MemoText.Lines.Add(codeSMS);
EHPNomor.Text:=codHP1;
E_SMS.Text:=codeSMS; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin
Label23.Caption:=intTOstr(Timer1.Tag);
Timer1.Tag:=Timer1.Tag+1; if Timer1.Tag<=25 then
begin
BBDel.Click;
Timer1.Enabled:=False;
end;
if Timer1.Tag>25 then
begin
Timer2.Enabled:=True;
Timer1.Enabled:=False; Timer1.Tag:=0;
Timer2.Tag:=0; end;
end;
procedure TForm1.Timer2Timer(Sender: TObject); begin
Label22.Caption:=intTOstr(Timer2.Tag); Timer2.Tag:=Timer2.Tag+1;
begin
SBGetMCTR.Click;
StatusBar1.Panels[2].Text:='SEARCHING CONNECTION'; end;
if (Timer2.Tag=7) and (EMCTR.Text='') then begin
Timer2.Tag:=0;
StatusBar1.Panels[2].Text:='UNCONNECTED';
end;
if Timer2.Tag=9then
begin
Timer2.Enabled:=False;
StatusBar1.Panels[2].Text:='CONNECTED';
BCek_n_Del1.Click;
end; end;
procedure TForm1.TimerJamTimer(Sender: TObject); var adasp, pj, xx: integer;
begin
if StatusBar1.Panels[0].Text<> dateTOstr(date) then
StatusBar1.Panels[0].Text:=dateTOstr(date); if StatusBar1.Panels[1].Text<> timeTOstr(time) then
StatusBar1.Panels[1].Text:=timeTOstr(time);
procedure TForm1.SBINBOXClick(Sender: TObject); begin
HidePanel;
PINBOX.Visible:=True;
end;
procedure TForm1.HidePanel; begin
POUTBOX.Visible:=False; PSETUP.Visible :=False;
end;
procedure TForm1.SBOUTBOXClick(Sender: TObject); begin
HidePanel;
POUTBOX.Visible:=True;
end;
procedure TForm1.EHPNomorChange(Sender: TObject); begin
if (EHPNomor.Text<>'') and (MemoText.Text<>'') then
SpeedButton2.Enabled:=True
else
SpeedButton2.Enabled:=False; end;
procedure TForm1.BBDELClick(Sender: TObject);
begin // terima + del
Form1.Tag:=10;
TerimaBaru:=''; Testing:='';
SerialPortNG1.SendString('AT+CMGL=4'+#$0D); end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
Timer3.Tag:=Timer3.Tag+1;
if timer3.Tag=10 then begin
SpeedButton2.Click; Timer3.Enabled:=False;
end;
procedure TForm1.BSMSINClick(Sender: TObject); var aa, ax: string;
pj: integer; begin
Timer1.Enabled:=True; TerimaBaru:=Testing;
Edit1.Text:=Testing; AA:=Testing;
pj:=length(AA); Terima:=''; idx:=1;
repeat
ax:=copy(AA,idx,2); inc(idx);
until (ax='OK') or (idx>pj);
if ax='OK' then begin
idx:=1; repeat
ax:=copy(AA,idx,6); inc(idx);
until (ax='+CMGL:') or (idx>pj); if ax='+CMGL:' then
begin repeat
ax:=copy(AA,idx,1); inc(idx);
until (ax=chr($A)) or (idx>pj); terima:='';
repeat
ax:=copy(AA,idx,1);
inc(idx);
until (copy(AA,idx,1)=chr($D)) or (idx>pj);
SBGetNoHP.Click;
SerialPortNG1.SendString('AT+CMGD=1'+#$0D);
Form1.Tag:=7; SMDR.Clear;
end; end
else begin
// end; //idx:=1;
Timer1.Enabled:=True;
end;
procedure TForm1.SMDRChange(Sender: TObject);
begin
Testing:=Testing+SMDR.Text; // ambil data sms format text
end;
procedure TForm1.BCek_n_Del1Click(Sender: TObject); begin
TerimaBaru:=''; Testing:='';
SerialPortNG1.SendString('AT+CMGL=4'+#$0D); Form1.Tag:=20;
TimerAwal.Enabled:=True; end;
procedure TForm1.BCek_n_DelClick(Sender: TObject);
var aa, ax, call1 : string; pj, indx: integer;
// jika ada sms awal di del dulu TerimaBaru:=Testing;
Edit1.Text:=Testing; AA:=Testing;
pj:=length(AA); Terima:='';
idx:=1; //...cari ok
adaOK:=pos('OK',Testing);
if adaOK>1 then begin
adaCMGL:=pos('+CMGL:',Testing);
if adaCMGL>0 then
begin
adatitik2:=pos(':',Testing); indx:=adatitik2+1;
call1:=''; // mencari sms ke repeat
ax:=copy(Testing,indx,1);
if (ax='0') or (ax='1') or (ax='2') or (ax='3') or (ax='4') or
(ax='5') or (ax='6') or (ax='7') or (ax='8') or (ax='9') then call1:=call1+ax;
inc(indx);
until copy(Testing,indx,1)=',';
TerimaBaru:=''; Testing:='';
SMDR.Clear;
SerialPortNG1.SendString('AT+CMGD='+call1+#$0D);
end; end;
end;
begin
Memo2.Text:=Testing;
adaOK:=pos('OK',Testing);
adaCMGD:=pos('CMGD',Testing);
if ((adaOK>0) and (adaCMGD>0)) then begin
BCek_n_Del1.Click; Form1.Tag:=20;
end; end;
procedure TForm1.Button1Click(Sender: TObject); begin
MSimulasi.Lines.SaveToFile('.\kirim.txt');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
codHP1:='+6285640341643';
codeTGL:=dateTOstr(date); codeJAM:=timeTOstr(time);
end;
procedure TForm1.BB_AddLaguClick(Sender: TObject); var m3path, chks: string;
pj, poss: integer; begin
TPoll.Last;
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then begin
TPoll.Append;
m3path:=OpenDialog1.FileName;
chks:=copy(ExtractFileName(m3path),1,pj-4); E_Judul_Lagu.Text:=chks;
DBE_File_Name.Text:=ExtractFileName(m3path);
DBE_Dir.Text:=ExtractFileDir(m3path); chks:=DBE_Dir.Text;
poss:=pos('\',chks); pj:=length(chks);
if poss<>0 then chks:=copy(chks,poss+1,pj); poss:=pos('\',chks);
pj:=length(chks);
if poss<>0 then E_Group_Penyanyi.Text:=copy(chks,poss+1,pj);
ShowMessage('KOREKSI KEMBALI ISIAN TANGGA LAGU'+chr(13)+
'ISIKAN NO LAGU, DAN JIKA PERLU EDIT JUDUL DAN PE NYANYI');
BB_Cancel.Enabled:=True; BB_Post.Enabled:=True; BB_AddLagu.Enabled:=False;
end; end;
procedure TForm1.BB_CancelClick(Sender: TObject);
begin
TPoll.Cancel;
E_Judul_Lagu.Text:=DBE_Judul_Lagu.Text;
E_Group_Penyanyi.Text:=DBE_Group_Penyanyi.Text;
BB_Cancel.Enabled:=False; BB_Post.Enabled:=False;
BB_AddLagu.Enabled:=True; end;
procedure TForm1.BB_PostClick(Sender: TObject);
begin
if DBE_No.Text<>'' then
DBE_Judul_Lagu.Text:=E_Judul_Lagu.Text;
DBE_Group_Penyanyi.Text:=E_Group_Penyanyi.Text;
DBE_Count.Text:='0';
DBE_Diputar.Text:='BELUM';
TPoll.Post;
BB_Cancel.Enabled:=False;
BB_Post.Enabled:=False; BB_AddLagu.Enabled:=True;
end else
ShowMessage('ISIKAN NO LAGU'); end;
procedure TForm1.BB_DelClick(Sender: TObject);
begin
if not TPoll.Eof then TPoll.Delete; end;
procedure TForm1.BB_EditClick(Sender: TObject);
begin TPoll.Edit;
BB_Post.Enabled:=True; BB_Cancel.Enabled:=True;
end;
procedure TForm1.DBE_Judul_LaguChange(Sender: TObject); begin
E_Judul_Lagu.Text:=DBE_Judul_Lagu.Text;
end;
procedure TForm1.DBE_Group_PenyanyiChange(Sender: TObject);
E_Group_Penyanyi.Text:=DBE_Group_Penyanyi.Text; end;
procedure TForm1.E_SMSChange(Sender: TObject);
var panjang, posi: integer; sds: string;
adasps: boolean; begin
TPoll.Refresh;
panjang:=length(E_SMS.Text);
if (pos('TGLG ',E_SMS.Text)>0) AND (START_POLL=TRUE) then begin
posi:=pos(' ',E_SMS.Text);
sds:=copy(E_SMS.Text,posi+1,panjang);
nolagu:=strTOint(sds); TPoll.First;
while not TPoll.Eof do
begin
if DBE_No.Text=sds then
begin TPoll.Edit;
DBE_Count.Text:=intTOstr(strTOint(DBE_Count.Text)+1); TPoll.Post;
E_SMS.Text:=''; end;
TPoll.Next; end;
TPoll.Refresh; end;
end;
procedure TForm1.DBE_NoKeyPress(Sender: TObject; var Key: Char); begin
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin
if not((key>=#48) and (key<=#57)) then key:=#0; end;
procedure TForm1.Button4Click(Sender: TObject);
begin
E_SMS.Text:='TGLG '+Edit2.Text;
end;
procedure TForm1.BB_SortClick(Sender: TObject);
begin
TPoll.IndexName:='by_count'; end;
procedure TForm1.BB_STOP_N_PLAYClick(Sender: TObject);
begin
TIMERDURASI.Enabled:=False;
START_POLL:=FALSE; BB_Sort.Click;
TPoll.First; MP1.Close;
MP1.FileName:=DBE_Dir.Text+'\'+DBE_File_Name.Text; MP1.Open;
MP1.TimeFormat:=tfMilliseconds; pjlagu:=MP1.Length;
PB1.Max:=pjlagu; MP1.Play;
TimerPlay.Enabled:=True; end;
procedure TForm1.TimerPlayTimer(Sender: TObject);
Dur:=(pjLagu*TBDurasi.Position) div 100;
Label30.Caption:=intTOstr(MP1.Position div 1000)+' / '+intTOstr(pjlagu div 1000)+
' | Dimainkan selama '+intTOstr(Dur div 1000) + ' detik '; PB1.Position:=MP1.Position;
if MP1.Position>(Dur) then begin
MP1.Stop; TPoll.Edit;
DBE_Diputar.Text:='SUDAH'; TPoll.Post;
if not TPoll.Eof then begin
TPoll.Next;
MP1.FileName:=DBE_Dir.Text+'\'+DBE_File_Name.Text;
MP1.Open;
MP1.TimeFormat:=tfMilliseconds; pjlagu:=MP1.Length;
PB1.Max:=pjlagu; MP1.Play;
end;
if TPoll.Eof then
begin MP1.Stop;
TPoll.Edit;
DBE_Diputar.Text:='SUDAH';
TPoll.Post;
TimerPlay.Enabled:=False;
end; end;
end;
procedure TForm1.BB_PollBaruClick(Sender: TObject); begin
while not TPoll.Eof do TPoll.Delete; START_POLL:=FALSE;
end;
procedure TForm1.TBDurasiChange(Sender: TObject); begin
LDurasi.Caption:=intTOstr(TBDurasi.Position); end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
START_POLL:=TRUE; end;
procedure TForm1.BB_MaticClick(Sender: TObject); var
menit,detik : integer;
begin
START_POLL:=TRUE;
TIMERDURASI.Enabled:=TRUE; TIMERDURASI.Tag:=0;
TimerDetik.Enabled:=TRUE; TimerDetik.Tag:=0;
end;
procedure TForm1.TimerDurasiTimer(Sender: TObject); var
detik, menit : integer; begin
TIMERDURASI.Tag:=TIMERDURASI.Tag+1;
menit:=(TBLamaPoll.Position*60)-(TIMERDURASI.Tag);
menit:=(menit div 60);
Label38.Caption:=intTOstr(menit)+ ' menit';
begin
TIMERDURASI.Enabled:=False;
TimerDetik.Enabled:=False; detik:=0;
Label39.Caption:=intTOstr(detik)+ ' detik '; BB_STOP_N_PLAY.Click;
end; end;
procedure TForm1.TBLamaPollChange(Sender: TObject);
begin
LLamaPoll.Caption:=intTOstr(TBLamaPoll.Position); end;
procedure TForm1.CBComChange(Sender: TObject); begin
SerialPortNG1.CommPort:=CBCom.Text;
end;
procedure TForm1.TimerDetikTimer(Sender: TObject); var
detik : integer; begin
detik:=60;
TimerDetik.Tag:=TimerDetik.Tag+1;
detik:=detik-TimerDetik.Tag;
Label39.Caption:=intTOstr(detik)+ ' detik ';
IF TimerDetik.Tag=60 then begin
TimerDetik.Enabled:=TRUE; TimerDetik.Tag:=0;
end; end;
begin
PageControl2.Visible:=True;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject); begin
PageControl2.Visible:=False; end;