Fórum Aviso a cada X dias... #372661
23/07/2009
0
Que tipo de função eu uso para trabalhar com o tempo dessa forma???
(X determinado pelo usuario)
Grato...
Nino Marques
Curtir tópico
+ 0Posts
23/07/2009
Facc
Esse é o modo grosso, creio que alguem tenha outra ideia.
Gostei + 0
23/07/2009
Nino Marques
Dessa forma vai ser uma data fixa o aviso???CErto?
Acho q não entendi muito bem oque vc quis dizer!!
Gostei + 0
23/07/2009
Carlosrm
eu testei bem rápido e acho que a idéia geral pode ser útil:
Código:
procedure aviso;
var
datainicial : TDatetime;
intervalo : integer;
begin
datainicial := strtodate(´23/07/2009´);
intervalo := 10;
if ((trunc(date - datainicial) MOD intervalo) = 0) then
showmessage(´Hoje expira o prazo que foi combinado!´)
else
showmessage(´Ainda não...!´);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aviso;
end;
Observações:
Datainicial é uma variável do tipo data e hora (TDatetime), que vai armazenar uma data base para a função verificar se já se passaram tantos dias (intervalo), quando comparada com a data corrente (date).
Do jeito que está, é possível colocar data atual ou anteriores. Em princípio não faz sentido. Para evitar isso, acrescente um IF tratando essa situação.
Intervalo é a variável que armazena quantos dias devem ocorrer entre um aviso e outro.
MOD é o operador módulo, que retorna o resto da uma divisão de inteiros. Se a diferença entre as duas datas (tratada com TRUNC) for igual ou múltiplo da variável intervalo, a showmessage fará sua aparição, já que o resto da divisão (MOD) será 0 (zero). Note que em outras versões do Delphi o símbolo deste operador pode ser diferente. Eu testei no Delphi 2006 (Explorer).
Trunc é uma função que elimina o ponto (ou vírgula) separador de decimais e também as casa decimais que existirem num tipo com casas decimais. Ah, o tipo TDatetime, na realidade é um tipo double, cuja parte inteira armazena os dias e cuja parte decimal armazena as horas.
Eu coloquei um button para chamar a função, pois assim você pode alterar a data do sistema sem precisar fechar o aplicativo (clique com o botão direito sobre o reloginho do desktop/Ajustar Data/Hora). Acho que mais prático seria fazer diretamente uma chamada à função num evento tipo FormCreate.
Note que você também pode modificar o valor da variável intervalo, de modo que os intervalos sejam progressivamente crescentes/decrescentes.
carlosrm
Gostei + 0
24/07/2009
Nino Marques
Só confesso q não entendi bem essa parte:
´Datainicial é uma variável do tipo data e hora (TDatetime), que vai armazenar uma data base para a função verificar se já se passaram tantos dias (intervalo), quando comparada com a data corrente (date).
Do jeito que está, é possível colocar data atual ou anteriores. Em princípio não faz sentido. Para evitar isso, acrescente um IF tratando essa situação. ´
Pode Explicar melhor?
Gostei + 0
24/07/2009
Carlosrm
estou um pouco enrolado agora, mas já já envio mais detalhes.
Nesse meio tempo, se ainda não o fez, experimente acrescentar essas linhas de código (num projeto novo ou num já existente) e teste. abraço.
carlosrm
Gostei + 0
28/07/2009
Carlosrm
Primeiro, desculpe a demora...
DataInicial é a primeira data (dd/mm/aaa) em que vai disparar o aviso, isto é, quando (e sempre) que a data do computador coincidir com a DataInicial informada. (É possível, por exemplo, alterar a data do micro e inicializar o programa várias vezes num mesmo dia, várias máquinas...).
A menos que se altere a data do sistema, uma data (dd/mm/aaa) tem duração de 24 hs. Para fazer com que um evento ocorra em intervalos de tempo fixos, uma maneira é estabelecer uma data base (eu a chamei de DataInicial) e disparar o aviso na DataInicial, na DataInicial + (intervalo * 1), DataInicial + (intervalo * 2), DataInicial + (intervalo * 3),... até chegar na maior data que a linguagem utilizada permitir. Mais ou menos assim:
DataInicial := strtodate(´15/11/2009´);
intervalo := 17;
O aviso será disparado quando a data do computador for:
DataInicial + (intervalo * 0)
DataInicial + (intervalo * 1)
DataInicial + (intervalo * 2)
DataInicial + (intervalo * 3)
e assim por diante.... (no Delphi, até o ano 9999, se não me engano...).
Eu usei na função o operador MOD, que informa se a data do computador é uma ´data múltipla´ da DataInicial informada, de acordo com o Intervalo informado.
Quanto à frase ´...acrescente um IF...´, peço para você ignorar e me desculpar. Simplesmente pensei asneira e escrevi besteira.
Se ainda fui pouco claro, ou pior, se não funcionar, por favor, avise. No BDS2006 (D9) funcionou nos poucos testes que fiz.
carlosrm
Gostei + 0
28/07/2009
Nino Marques
Até então Brigado msm!!! Tá ajudando demais!!
Abrass
Gostei + 0
29/07/2009
Nino Marques
Eu queria assim..q no dia em que expirasse o tempo determinado, um form aparecesse AUTOMATICAMENTE logo na abertura do programa, com as opçoes do usuario...
Tentei assim:
Application.CreateForm(TFexemplo,Fexemplo);
Fexemplo.Show;
mas não deu certo!!!
Como fazer?
Gostei + 0
29/07/2009
Carlosrm
tente assim:
...
implementation
uses u_fexemplo;
{$R *.dfm}
procedure aviso;
var
datainicial : TDatetime;
intervalo : integer;
begin
datainicial := strtodate(´23/07/2009´);
intervalo := 10;
if ((trunc(date - datainicial) MOD intervalo) = 0) then
try
Application.CreateForm(TFexemplo,Fexemplo);
Fexemplo.Showmodal;
finally
FreeAndNil(FExemplo);
end
else
showmessage(´Ainda não...!´);
end;
procedure TForm1.FormCrete(Sender: TObject);
begin
aviso;
end;
...
Atente para chamar a função Aviso no evento FormCreate do form principal, método showMODAL para exibir o FExemplo e o formulário FExemplo precisa estar definido como Available Forms (Project\Optios...\Forms).
Qulquer coisa, avise.
carlosrm
Gostei + 0
29/07/2009
Nino Marques
Só uma ultima coisa...hehehe...se for possivel....
No form q eh chamado de X em X dias queria q aparecesse o tamanho em Bytes de uma pasta, tentei alguma funções como:
Sizeof (caminho) mas não deu certo...e creio q não é tão simples....
Sei q num tem haver com o titulo do topico maaaas se possivel me ajude....
Senão Problema Resolvidoo!
Gostei + 0
29/07/2009
Carlosrm
fico contente que foi útil. Quanto ao tamnaho de uma pasta, achei algo aqui na DevMedia mesmo (Artigos, Dicas ClubeDelphi) no endereço:
[url]
https://www.devmedia.com.br/articles/viewcomp.asp?comp=1100&hl=*foldersize*
[/url]
Se houver alguma dificuldade, eu procurei em ClubeDelphi/Artigos e pesquisei por foldersize (que eu já tinha procurado pelo Google...).
E continue frequentando o Fórum, tem muitos ´fera´ sempre ensinando muita coisa para nós...
abraço,
carlosrm
Gostei + 0
30/07/2009
Nino Marques
Com certeza tem muito p aprender com a galera aqui do forum!!
Abraçoo!
Gostei + 0
11/08/2009
Nino Marques
o dia de hoje e o tempo para mostrar a mensagem eu quero q seja definida pelo usuario, então criei duas variaveis e coloquei +- assim...
_______________________________________________
procedure TFhd1.FormCreate(Sender: TObject);
var
hoje2 : string;
diash1: string;
begin
hoje2 := dhoje.Text;
diash1:= diasf.Text;
end;
procedure aviso;
var
datainicial : TDatetime;
intervalo : integer;
begin
datainicial := strtodate(hoje2);
intervalo := strtoint(diash1);
if ((trunc(date - datainicial) MOD intervalo) = 0) then
try
Application.CreateForm(TMainform,Mainform);
MainForm.Showmodal;
finally
FreeAndNil(MainForm);
end
end;
____________________________
Mas não está dando certoo...
Qual seria a forma certa de fazer isso?
Gostei + 0
12/08/2009
Martins
Qualquer coisa, poderemos postar um pequeno exemplo.
Boa sorte!
Gostei + 0
12/08/2009
Nino Marques
Fico na esperaa!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)