Aviso a cada X dias...
Como faço para um determinado aviso aparecer a cada X dias??
Que tipo de função eu uso para trabalhar com o tempo dessa forma???
(X determinado pelo usuario)
Grato...
Que tipo de função eu uso para trabalhar com o tempo dessa forma???
(X determinado pelo usuario)
Grato...
Nino Marques
Curtidas 0
Respostas
Facc
23/07/2009
no seu banco vc coloca uma coluna com a qtd de dias e a proxima data de execução do aviso. no sistema, no momento que criar o form principal, faz um select e compara se a data é a mesma do computador.
Esse é o modo grosso, creio que alguem tenha outra ideia.
Esse é o modo grosso, creio que alguem tenha outra ideia.
GOSTEI 0
Nino Marques
23/07/2009
Mas me fala uma coisa...
Dessa forma vai ser uma data fixa o aviso???CErto?
Acho q não entendi muito bem oque vc quis dizer!!
Dessa forma vai ser uma data fixa o aviso???CErto?
Acho q não entendi muito bem oque vc quis dizer!!
GOSTEI 0
Carlosrm
23/07/2009
Nino Marques,
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
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
Nino Marques
23/07/2009
Uuuuhn...muito boa ideia do Carlos parece que eh bem oque eu quero..
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?
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
Carlosrm
23/07/2009
nino marques,
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
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
Carlosrm
23/07/2009
Nino Marques,
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
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
Nino Marques
23/07/2009
Vou testar certinho aqui em Breve te flo como foiii!!
Até então Brigado msm!!! Tá ajudando demais!!
Abrass
Até então Brigado msm!!! Tá ajudando demais!!
Abrass
GOSTEI 0
Nino Marques
23/07/2009
Me fla uma coisa....
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?
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
Carlosrm
23/07/2009
Nino Marques,
tente assim:
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
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
Nino Marques
23/07/2009
Tá funcionando certinho agora.....
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!
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
Carlosrm
23/07/2009
Nino Marques,
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
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
Nino Marques
23/07/2009
Valeu carlosrm....
Com certeza tem muito p aprender com a galera aqui do forum!!
Abraçoo!
Com certeza tem muito p aprender com a galera aqui do forum!!
Abraçoo!
GOSTEI 0
Nino Marques
23/07/2009
Cara to tendo um problema aqui....
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?
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
Martins
23/07/2009
Assim como o Facc, eu tb acho q vc deveria usar uma instrução SQL, com as datas armazenadas em uma tabela, isso seria mais fácil.
Qualquer coisa, poderemos postar um pequeno exemplo.
Boa sorte!
Qualquer coisa, poderemos postar um pequeno exemplo.
Boa sorte!
GOSTEI 0
Nino Marques
23/07/2009
Se vcs puderem dar um exemplo seria bom..pq eu num tenho ideia com se usa tabelas no Delphi...inclusive tem outro problema que não estou conseguindo resolver e me aconselharam a usar tabela temporaria...e eu nem sei...
Fico na esperaa!
Fico na esperaa!
GOSTEI 0
Nino Marques
23/07/2009
Alguem pode me ajudar a resolver só esse problema das variaveis...
Não quero mais mexer nisso nesse projeto..
Espero q alguem possa me dar uma mão rapido!!
Não quero mais mexer nisso nesse projeto..
Espero q alguem possa me dar uma mão rapido!!
GOSTEI 0
Martins
23/07/2009
[quote:e72cf27789=´Nino Marques´]Alguem pode me ajudar a resolver só esse problema das variaveis...
Não quero mais mexer nisso nesse projeto..
Espero q alguem possa me dar uma mão rapido!![/quote:e72cf27789]
Quanto a tabela temporária, seria interessante vc estudar sobre ClientDataSet.
Aproveite para ver algo sobre TQuery e SQL.
Vai tentando q nós te ajudamos a corrigir os erros.
Boa sorte.
Não quero mais mexer nisso nesse projeto..
Espero q alguem possa me dar uma mão rapido!![/quote:e72cf27789]
Quanto a tabela temporária, seria interessante vc estudar sobre ClientDataSet.
Aproveite para ver algo sobre TQuery e SQL.
Vai tentando q nós te ajudamos a corrigir os erros.
Boa sorte.
GOSTEI 0