Programa em intervalo de hora
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
Curtidas 0
Melhor post
Emerson Nascimento
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.GOSTEI 2
Mais Respostas
Manoel Junior
20/08/2019
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.
GOSTEI 0
Jordan Bernardes
20/08/2019
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.
GOSTEI 0