ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[resolvido] Criar lista de horários

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qua Jul 19, 2017 4:29 pm    Assunto: [resolvido] Criar lista de horários Responder com Citação

Amigos, preciso criar uma lista de horarios com intervalo de 45min.
Essa rotina deve ir das 08:00 até as 11:45 e depois das 13:30 até as 20:15

Só consegui gerar direto, sem intervalo ao meio dia.
Como poderia fazer?

Código:
var
  x : Integer;
  HoraIni : TTime;
begin
     // Abre e fecha o componente de memoria
     cdsHorarios.Close;
     cdsHorarios.IsEmpty;
     cdsHorarios.CreateDataSet;
     cdsHorarios.Open;

     // Procedimento de inicio de hora
     HoraIni := StrToTime('08:00');

     // For para ir das 08:00 as 19:00
     for x := 1 to 17 do
         begin
            cdsHorarios.Append;
            cdsHorarios.FieldByName('HORA').AsDateTime  := HoraIni;
            cdsHorarios.Post;
            HoraIni := IncMinute(HoraIni,45);
         end;

     cdsHorarios.First;


Editado pela última vez por renanbg em Qui Jul 20, 2017 4:01 pm, num total de 3 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Jul 19, 2017 4:47 pm    Assunto: Responder com Citação

Boa tarde,

Experimente dessa forma:

Código:
var
  x : Integer;
  Hora: TTime;
  HoraFim: TTime;
  HoraIntIni: TTime;
  HoraIntFim: TTime;
begin

     cdsHorarios.Close;
     cdsHorarios.CreateDataSet;
     cdsHorarios.Open;

     HoraFim    := EncodeTime(20, 15, 0, 0);
     HoraIntIni := EncodeTime(11, 45, 0, 0);
     HoraIntFim := EncodeTime(13, 30, 0, 0);
     Hora       := EncodeTime(8, 0, 0, 0);

     repeat
         if (Hora <= HoraIntIni) or
            (Hora >= HoraIntFim) then
           begin
             cdsHorarios.Append;
             cdsHorarios.FieldByName('HORA').AsDateTime  := Hora;
             cdsHorarios.Post;
           end;
         Hora := IncMinute(Hora, 45);
     until Hora > HoraFim;

     cdsHorarios.First;


Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Jul 19, 2017 4:48 pm    Assunto: Responder com Citação

Teste assim:

Código:
var
  x: Integer;
  HoraIni: TTime;
begin
  // Abre e fecha o componente de memoria
  cdsHorarios.Close;
  cdsHorarios.IsEmpty;
  cdsHorarios.CreateDataSet;
  cdsHorarios.Open;

  // Procedimento de inicio de hora
  HoraIni := StrToTime('07:15');

  // For para ir das 08:00 as 11:45 e 13:30 as 20:15
  for x := 1 to 16 do
  begin
    HoraIni := IncMinute(HoraIni, 45);

    cdsHorarios.Append;
    cdsHorarios.FieldByName('HORA').AsDateTime := HoraIni;
    cdsHorarios.Post;

    if HoraIni = StrToTime('11:45') then
      HoraIni := IncMinute(HoraIni, 60);
  end;

  cdsHorarios.First;
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qua Jul 19, 2017 4:56 pm    Assunto: Responder com Citação

Opa.

Muito bom pessoal.

Grato pela ajuda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Jul 20, 2017 3:34 pm    Assunto: Responder com Citação

Amigos, só uma duvida.

Gostaria de exibir o horario sem os segundos.

Precisaria mudar toda estrutura para String ao inves de TTime e então usar assim?

Código:
Formatdatetime('hh:nn',HoraIni);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Jul 20, 2017 3:50 pm    Assunto: Responder com Citação

Faça um teste mantendo o campo como Time e alterando a propriedade DisplayFormat para hh:nn.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Jul 20, 2017 3:59 pm    Assunto: Responder com Citação

Bingo!

Eu estava trabalhando nessa propriedade, mas usando as mascaras geradas pelo maskedit.

Grato.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB