253 lines
6.8 KiB
ObjectPascal
253 lines
6.8 KiB
ObjectPascal
unit fAutoActions;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, System.Types, System.UITypes, System.Classes,
|
|
System.Variants,
|
|
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
|
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox, FMX.Edit, StrUtils,
|
|
FMX.Controls.Presentation, uMyTimer, uRecords, System.Generics.Collections;
|
|
|
|
type
|
|
TfrAutoActions = class(TFrame)
|
|
GroupBox20: TGroupBox;
|
|
edtMessage: TEdit;
|
|
edtInterval: TEdit;
|
|
btnAddMessage: TButton;
|
|
btnRmMessage: TButton;
|
|
btnEditMessage: TButton;
|
|
btnNotifyTest: TButton;
|
|
sgTimers: TStringGrid;
|
|
ccTimerEnable: TCheckColumn;
|
|
scTimerMessage: TStringColumn;
|
|
icTimerInterval: TIntegerColumn;
|
|
ccTimerO: TCheckColumn;
|
|
GroupBox23: TGroupBox;
|
|
edtBanWords: TEdit;
|
|
btnBanWordsAdd: TButton;
|
|
btnBanWordsEdt: TButton;
|
|
btnBanWordsDel: TButton;
|
|
sgBanWords: TStringGrid;
|
|
scRegEx: TStringColumn;
|
|
btnBanWordsCheck: TButton;
|
|
Label6: TLabel;
|
|
edtBanWordsCheck: TEdit;
|
|
Label7: TLabel;
|
|
lBanWordsCheck: TLabel;
|
|
GroupBox17: TGroupBox;
|
|
edtCounterName: TEdit;
|
|
edtCounterTrigger: TEdit;
|
|
edtCounterCount: TEdit;
|
|
btnCounterAdd: TButton;
|
|
btnCounterDelete: TButton;
|
|
btnCounterP: TButton;
|
|
btnCounterM: TButton;
|
|
btnCounterEdit: TButton;
|
|
sgCounter: TStringGrid;
|
|
scCounterName: TStringColumn;
|
|
scCounterTrigger: TStringColumn;
|
|
icCounterCount: TIntegerColumn;
|
|
ccCounterAuto: TCheckColumn;
|
|
procedure btnAddMessageClick(Sender: TObject);
|
|
procedure btnEditMessageClick(Sender: TObject);
|
|
procedure btnRmMessageClick(Sender: TObject);
|
|
procedure btnNotifyTestClick(Sender: TObject);
|
|
procedure sgTimersEditingDone(Sender: TObject; const ACol, ARow: Integer);
|
|
private
|
|
{ Private declarations }
|
|
procedure OnMyTimerExec(Sender: TObject; const txt: string; o: Boolean);
|
|
|
|
public
|
|
{ Public declarations }
|
|
FTimerList: TObjectList<TMyTimerThread>;
|
|
listTimer: TArray<TListTimer>;
|
|
procedure UpdateGridFromArray;
|
|
procedure initTimers;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.fmx}
|
|
|
|
uses uGeneral;
|
|
|
|
procedure TfrAutoActions.btnAddMessageClick(Sender: TObject);
|
|
var
|
|
TimerThread: TMyTimerThread;
|
|
NewRec: TListTimer;
|
|
begin
|
|
if (edtMessage.text = '') or (edtInterval.text = '') then
|
|
exit;
|
|
|
|
TimerThread := TMyTimerThread.Create(edtInterval.text.ToInteger,
|
|
edtMessage.text, false);
|
|
TimerThread.OnTimerExec := OnMyTimerExec;
|
|
FTimerList.Add(TimerThread);
|
|
|
|
NewRec.Enable := 1;
|
|
NewRec.interval := edtInterval.text.ToInteger;
|
|
NewRec.o := 0;
|
|
NewRec.mess := edtMessage.text;
|
|
|
|
SetLength(listTimer, Length(listTimer) + 1);
|
|
listTimer[High(listTimer)] := NewRec;
|
|
|
|
UpdateGridFromArray;
|
|
DB.SaveRecordArray<TListTimer>('listTimer', listTimer);
|
|
|
|
edtMessage.text := '';
|
|
edtInterval.text := '10';
|
|
end;
|
|
|
|
procedure TfrAutoActions.btnEditMessageClick(Sender: TObject);
|
|
var
|
|
SelectedRow: Integer;
|
|
NewText: string;
|
|
NewInterval: Integer;
|
|
RowIndex: Integer;
|
|
begin
|
|
SelectedRow := sgTimers.Row;
|
|
if (edtMessage.text = '') or (edtInterval.text = '') or (SelectedRow <= 0) or
|
|
(SelectedRow >= sgTimers.RowCount) then
|
|
exit;
|
|
NewText := edtMessage.text;
|
|
NewInterval := StrToIntDef(edtInterval.text, 0);
|
|
|
|
RowIndex := sgTimers.Row;
|
|
if (RowIndex < 0) or (RowIndex > High(listTimer)) then
|
|
exit;
|
|
if NewInterval <= 0 then
|
|
exit;
|
|
|
|
// Îáíîâëÿåì íàñòðîéêè òàéìåðà
|
|
FTimerList[SelectedRow].Update(sgTimers.Cells[2, SelectedRow].ToInteger,
|
|
sgTimers.Cells[1, SelectedRow], (sgTimers.Cells[3, SelectedRow] = 'True'));
|
|
listTimer[RowIndex].interval := NewInterval;
|
|
listTimer[RowIndex].mess := NewText;
|
|
UpdateGridFromArray;
|
|
DB.SaveRecordArray<TListTimer>('listTimer', listTimer);
|
|
|
|
edtMessage.text := '';
|
|
edtInterval.text := '';
|
|
end;
|
|
|
|
procedure TfrAutoActions.btnNotifyTestClick(Sender: TObject);
|
|
var
|
|
s: string;
|
|
B: Boolean;
|
|
begin
|
|
s := sgTimers.Cells[1, sgTimers.Row];
|
|
B := sgTimers.Cells[3, sgTimers.Row] = 'True';
|
|
{ if B then
|
|
ttw_API.sendNotify(s)
|
|
else
|
|
ttw_IRS.sendMessage(s); }
|
|
end;
|
|
|
|
procedure TfrAutoActions.btnRmMessageClick(Sender: TObject);
|
|
var
|
|
SelectedRow: Integer;
|
|
i, RowIndex: Integer;
|
|
begin
|
|
SelectedRow := sgTimers.Row;
|
|
// Ïðîâåðÿåì âàëèäíîñòü âûáðàííîé ñòðîêè
|
|
if (SelectedRow < 0) or (SelectedRow >= sgTimers.RowCount) then
|
|
exit;
|
|
// Ïðîâåðÿåì íàëè÷èå òàéìåðà â ñïèñêå
|
|
if (SelectedRow < FTimerList.Count) then
|
|
begin
|
|
// Îñòàíàâëèâàåì è óíè÷òîæàåì òàéìåð
|
|
if Assigned(FTimerList[SelectedRow]) then
|
|
begin
|
|
FTimerList[SelectedRow].StopT;
|
|
FTimerList[SelectedRow].TerminateAndDestroy; // Ìåòîä äëÿ îñòàíîâêè ïîòîêà
|
|
FTimerList.Delete(SelectedRow); // Óäàëÿåì èç ñïèñêà ñ àâòîóíè÷òîæåíèåì
|
|
end;
|
|
end;
|
|
// Óäàëÿåì ñòðîêó èç ñåòêè
|
|
|
|
RowIndex := sgTimers.Row;
|
|
if (RowIndex < 0) or (RowIndex > High(listTimer)) then
|
|
exit;
|
|
|
|
// Ñäâèãàåì ýëåìåíòû ìàññèâà
|
|
for i := RowIndex to High(listTimer) do
|
|
listTimer[i] := listTimer[i + 1];
|
|
SetLength(listTimer, Length(listTimer) - 1);
|
|
UpdateGridFromArray;
|
|
DB.SaveRecordArray<TListTimer>('listTimer', listTimer);
|
|
end;
|
|
|
|
procedure TfrAutoActions.initTimers;
|
|
var
|
|
i: Integer;
|
|
TimerThread: TMyTimerThread;
|
|
begin
|
|
for i := 0 to High(listTimer) do
|
|
begin
|
|
TimerThread := TMyTimerThread.Create(listTimer[i].interval,
|
|
listTimer[i].mess, listTimer[i].o = 1);
|
|
TimerThread.OnTimerExec := OnMyTimerExec;
|
|
FTimerList.Add(TimerThread);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrAutoActions.OnMyTimerExec(Sender: TObject; const txt: string;
|
|
o: Boolean);
|
|
begin
|
|
{ if o then
|
|
ttw_API.sendNotify(txt)
|
|
else
|
|
ttw_IRS.sendMessage(txt); }
|
|
end;
|
|
|
|
procedure TfrAutoActions.sgTimersEditingDone(Sender: TObject;
|
|
const ACol, ARow: Integer);
|
|
var
|
|
NewRec: TListTimer;
|
|
begin
|
|
NewRec.Enable := strtoint(ifthen(sgTimers.Cells[0, ARow] = 'True', '1', '0'));
|
|
NewRec.o := strtoint(ifthen(sgTimers.Cells[3, ARow] = 'True', '1', '0'));
|
|
NewRec.interval := strtoint(sgTimers.Cells[2, ARow]);
|
|
NewRec.mess := sgTimers.Cells[1, ARow];
|
|
if ACol = 0 then // Êîëîíêà enabled
|
|
begin
|
|
if NewRec.Enable = 1 then
|
|
FTimerList[ARow].StartT
|
|
else
|
|
FTimerList[ARow].StopT;
|
|
end;
|
|
if ACol = 3 then // Êîëîíêà o
|
|
begin
|
|
// Îáíîâëÿåì íàñòðîéêè òàéìåðà
|
|
FTimerList[ARow].Update(NewRec.interval, NewRec.mess, (NewRec.o = 1));
|
|
end;
|
|
listTimer[ARow] := NewRec;
|
|
UpdateGridFromArray;
|
|
DB.SaveRecordArray<TListTimer>('listTimer', listTimer);
|
|
end;
|
|
|
|
procedure TfrAutoActions.UpdateGridFromArray;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
sgTimers.BeginUpdate;
|
|
try
|
|
sgTimers.RowCount := 0; // Ñáðàñûâàåì ñòðîêè (îñòàâëÿåì òîëüêî çàãîëîâêè)
|
|
|
|
for i := 0 to High(listTimer) do
|
|
begin
|
|
sgTimers.RowCount := i + 1;
|
|
sgTimers.Cells[0, i] := ifthen(listTimer[i].Enable = 1, 'True', 'False');
|
|
sgTimers.Cells[1, i] := listTimer[i].mess;
|
|
sgTimers.Cells[2, i] := IntToStr(listTimer[i].interval);
|
|
sgTimers.Cells[3, i] := ifthen(listTimer[i].o = 1, 'True', 'False');
|
|
end;
|
|
finally
|
|
sgTimers.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
end.
|