Programa em intervalo de hora
20/08/2019
0
Bom dia.
Preciso de ajuda para que o sistema só funcione no intervalo de horas determinado.
Por exemplo: o sistema só vai funcionar das 08:00 - 12:00 e das 13:00 - 18:00.
Fora desse intervalo o sistema da um ShowMessage e encerra a aplicação automaticamente.
Se alguém tem alguma ideia agradeço.
Preciso de ajuda para que o sistema só funcione no intervalo de horas determinado.
Por exemplo: o sistema só vai funcionar das 08:00 - 12:00 e das 13:00 - 18:00.
Fora desse intervalo o sistema da um ShowMessage e encerra a aplicação automaticamente.
Se alguém tem alguma ideia agradeço.
Jordan Bernardes
Curtir tópico
+ 0
Responder
Post mais votado
20/08/2019
uma das formas é ter um timer numa thread. segue um exemplo:
Altere as constantes cHr1Ini, cHr1Fim, cHr2Ini e cHr2Fim conforme sua necessidade. Note que a verificação será feita a cada segundo. O intervalo pode ser alterado na propriedade Relogio.Interval.
Para utilizar, inclua a unit ThreadHorarioPermitido na cláusula uses do projeto (se não estiver declarada ali) e adicione a linha para criação da thread.
algo assim:
unit ThreadHorarioPermitido; interface uses System.Classes, Vcl.ExtCtrls, System.SysUtils, WinAPI.Windows; type THorarioPermitido = class(TThread) private { Private declarations } Relogio: TTimer; procedure Temporizador(Sender: TObject); protected procedure Execute; override; public constructor create; overload; destructor Destroy; override; end; const cHr1Ini: pchar = '08:00:00'; cHr1Fim: pchar = '12:00:00'; cHr2Ini: pchar = '13:00:00'; cHr2Fim: pchar = '18:00:00'; implementation { THorarioPermitido } constructor THorarioPermitido.create; begin Relogio := TTimer.Create(nil); Relogio.Enabled := False; Relogio.Interval := 1000; // 1 segundo Relogio.OnTimer := Temporizador; Relogio.Enabled := True; inherited create; end; destructor THorarioPermitido.Destroy; begin inherited; end; procedure THorarioPermitido.Execute; begin { Place thread code here } end; procedure THorarioPermitido.Temporizador(Sender: TObject); begin if not ( ( (TimeToStr(Time) >= cHr1Ini) and (TimeToStr(Time) <= cHr1Fim) ) or ( (TimeToStr(Time) >= cHr2Ini) and (TimeToStr(Time) <= cHr2Fim) ) ) then begin Relogio.Enabled := False; FreeAndNil(Relogio); MessageBox(0,pchar('Horário não disponível para utilização do sistema.'+chr(13)+chr(13)+ 'O sistema pode ser utilizado das '+cHr1Ini+' as '+cHr1Fim+' e das '+cHr2Ini+' as '+cHr2Fim), 'Uso não autorizado',mb_iconerror); Halt; end; end; end.
Para utilizar, inclua a unit ThreadHorarioPermitido na cláusula uses do projeto (se não estiver declarada ali) e adicione a linha para criação da thread.
algo assim:
program Project6; uses Vcl.Forms, Unit5 in 'Unit5.pas' , Unit1 in 'Unit1.pas' , ClasseTags in 'ClasseTags.pas', ThreadHorarioPermitido in 'ThreadHorarioPermitido.pas'; // << unit da thread de controle do horário de uso {$R *.res} var Form5: TForm5; HorarioPermitido: THorarioPermitido; // << variável para instância da thread begin Application.Initialize; Application.MainFormOnTaskbar := True; HorarioPermitido := THorarioPermitido.create; // << cria a instância da thread (e executa) Application.CreateForm(TForm5, Form5); Application.Run; end.
Emerson Nascimento
Responder
Mais Posts
20/08/2019
Manoel Junior
Bom dia. Se ele deve ser iniciado automaticamente, é necessário criar tarefas no agendador de tarefas do Windows. No próprio site da Microsoft disponibiliza a criação da tarefa por um script, xml ou c++: https://docs.microsoft.com/en-us/windows/win32/taskschd/starting-an-executable-at-a-spcific-time . Então, no Delphi será necessário apenas usar o CreateProcess para executar o script pelo CMD.
Responder
28/08/2019
Jordan Bernardes
Emerson primeiramente muito obrigado por sua atenção. Mais devido há uma alteração operacional o horário de funcionamento do software alterou para as 08:00 á 18:00 isso acabou facilitando um pouco. Fiz da seguinte forma, utilizei três componentes TTimeEdit com os nomes temp1, tempv2 e tempv3 dois timers. O timer1 fica atualizando o temp1 . E o outro timer fiz o seguinte,
.
E no tempv1 na propriedade time informei a hora 08:00:00 e no tempv2 na propriedade time informei a hora 18:00:00.
Muito obrigado.
temp1.Time:= Now;
if (temp1.Time < tempv1.Time) or (temp1.Time > tempv2.Time) then begin Timer2.Enabled:= False; MessageDlg('O horario de funcionamento do aplicativo é das 08:00h à 18:00h', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbOK], 0, procedure(const BotaoPressionado: TModalResult) begin case BotaoPressionado of mrOk: begin Application.Terminate; end; end; end ); end;
E no tempv1 na propriedade time informei a hora 08:00:00 e no tempv2 na propriedade time informei a hora 18:00:00.
Muito obrigado.
Responder
Clique aqui para fazer login e interagir na Comunidade :)