Mange tak for din hjælp Michael.
Jeg vil lige beskrive præcis hvad jeg mener.
Hvis du nu forestiller dig at f.eks om 14 dage kl. 16:30 skal mit program stoppe og vise min Ontimer event. I dette tilfælde ’Tiden er nået’. Det vil sige at min label1 skal vise hvor mange dage,timer,min og sek der er tilbage til datoen om 14 dage og tælle ned realtime.
Håber du kan hjælpe mig videre
Mvh
Martin
Hej,
Okay her er en funktion som kan give dig år, måneder, dage, timer, minutter og sekunder mellem tiden nu og en du angiver:
(***************************************************
Hvis du sætter en af params til -1 så bliver den ikke talt med
***************************************************)
function DateTimeReached( var AYears : Integer;
var AMonths : Integer;
var ADays : Integer;
var AHours : Integer;
var AMinutes : Integer;
var ASeconds : Integer;
ADateToReach : TDateTime) : Boolean;
var
Tmp, N : TDateTime;
begin
Result := (CompareDateTime(ADateToReach, Now) < 0);
if (Result) then
begin
if AYears <> -1 then
AYears := 0;
if AMonths <> -1 then
AMonths := 0;
if ADays <> -1 then
ADays := 0;
if AHours <> -1 then
AHours := 0;
if AMinutes <> -1 then
AMinutes := 0;
if ASeconds <> -1 then
ASeconds := 0;
end
else
begin
Tmp := ADateToReach;
N := Now;
if AYears <> -1 then
begin
AYears := YearsBetween(Tmp, N);
Tmp := IncYear(Tmp,-AYears);
end;
if AMonths <> -1 then
begin
AMonths := MonthsBetween(Tmp, N);
Tmp := IncMonth(Tmp,-AMonths);
end;
if ADays <> -1 then
begin
ADays := DaysBetween(Tmp, N);
Tmp := IncDay(Tmp,-ADays);
end;
if AHours <> -1 then
begin
AHours := HoursBetween(Tmp, N);
Tmp := IncHour(Tmp,-AHours);
end;
if AMinutes <> -1 then
begin
AMinutes := MinutesBetween(Tmp, N);
Tmp := IncMinute(Tmp,-AMinutes);
end;
if ASeconds <> -1 then
begin
ASeconds := SecondsBetween(Tmp, N);
end;
end;
end;
F.eks. så kunne dit timer event se således ud:
procedure TForm1.Timer1Timer(Sender: TObject);
function addValue(Value : Integer; Suffix : String) : String;
begin
Result := IntToStr(Value)+Suffix;
end;
var
Y, M, D, H, N, S : Integer;
begin
Y := 0;
M := 0;
D := 0;
H := 0;
N := 0;
S := 0;
if DateTimeReached(Y, M, D, H, N, S, FSlutDato) then
Label1.Caption := 'WHHEEEEE! IT''S TIME!!!'
else
Label1.Caption := AddValue(Y, ' år ')+
AddValue(M, ' måneder ')+
AddValue(D, ' dage ')+
AddValue(H, ' timer ')+
AddValue(N, ' minutter ')+
AddValue(S, ' sekunder ');
end;
Hvis du nu kun vil ha' dage, timer minutter og sekunder så sæt Y og M til -1 :
procedure TForm1.Timer1Timer(Sender: TObject);
function addValue(Value : Integer; Suffix : String) : String;
begin
Result := IntToStr(Value)+Suffix;
end;
var
Y, M, D, H, N, S : Integer;
begin
Y := 0;
M := 0;
D := 0;
H := 0;
N := 0;
S := 0;
if DateTimeReached(Y, M, D, H, N, S, FSlutDato) then
Label1.Caption := 'WHHEEEEE! IT''S TIME!!!'
else
Label1.Caption := AddValue(D, ' dage ')+
AddValue(H, ' timer ')+
AddValue(N, ' minutter ')+
AddValue(S, ' sekunder ');
end;
Håber det hjælper dig.
Hvis du skal gennem den dato/tid som programmet skal vente på, så brug evt. registry til at gemme denne variable.
Mvh
Michael.