QUOTE(Tatiane.InterArt @ 12/04/2008 - 11:50)

(...) usando o MinutesBetween, o que está acontecendo é que dependendo do horário q tenho ele não retorna corretamente os minutos, por exemplo:
MaskEdit5 - MaskEdit6
18:00 - 18:54
12:00 - 12:54
e outras variações com minutos diferenciados
Var Min:Integer;
Begin
Min:=MinutesBetween(StrToTime(MaskEdit5.Text),StrToTime(MaskEdit6.Text));
Min deveria ser igual a 54 correto
mas ele me mostra 53
Tatiane.InterArt, isto muito provavelmente se deve a um problema associado a números com ponto flutuante e ao fato de
MinutesBetween não arredondar valores.
Veja o que consta no help:
"(...) MinutesBetween counts only entire minutes. Thus, MinutesBetween reports the difference between 9:00:00 AM and 9:00:59:999 AM as 0 because the difference is one millisecond short of an entire minute."lembrando que esta é a apresentação em forma de horas, quando o valor em si (um double), convertido em minutos seria:
09:00:00 => 540 minutos
09:00:55:999 => 540,9999833333...
e ao observar que ele considera a diferença como 0, concluí-se que a função não faz arredondamento - usa a parte inteira.
Associado a isso, tem a questão da operação com ponto flutuante - até já comentei isto na dica "
Formatando horas além das 23:59h" (no parágrafo em que cito uma correção incluída)
Uma sugestão especificamente para "substituição" da função
MinutesBetween - eu não sou tão bonzinho

CODE
function NewMinutesBetween(aNow, aThen :TDateTime) :Int64;
var
MinDiff :Extended;
begin
MinDiff := (aThen -aNow) *24 *60;
if (MinDiff -Trunc(MinDiff)) > 0.9999 then
MinDiff := Round(MinDiff);
Result := Trunc(MinDiff);
end;
A título de curiosidade, se quiser testar o que tentei explicar, a função
MinutesBetween deve estar definida mais ou menos assim:
CODE
function MinutesBetween(aNow, aThen :TDateTime) :Int64;
begin
Result := Trunc((aThen -aNow) *24 *60);
end;
E um exemplinho de teste, colocando os valores em 2 labels - observe os resultados:
CODE
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := IntToStr(MinutesBetween(StrToTime(MaskEdit1.Text),StrToTime(MaskEdit2.Text)));
Label2.Caption := IntToStr(NewMinutesBetween(StrToTime(MaskEdit1.Text),StrToTime(MaskEdit2.Text)));
end;
QUOTE(Rento @ 13/04/2008 - 01:45)

(...) Não me lembro como programei, da uma olhada porque funciona ^^ (...)

Abraços