Scusa Narciso, ma compareDate ... da che unit è esportata?
L'ho trovata solo in amigados.pp ... ma nemmeno con un prototipo di chiamata corretto ...
FUNCTION CompareDates(const date1 : pDateStamp;const date2 : pDateStamp) : LONGINT;
BEGIN
ASM
MOVE.L A6,-(A7)
MOVE.L date1,D1
MOVE.L date2,D2
MOVEA.L _DOSBase,A6
JSR -738(A6)
MOVEA.L (A7)+,A6
MOVE.L D0,@RESULT
END;
END;
Narciso, le date in delphi e freepascal sono una specie di numero a virgola mobile.
I numeri decimali sono il tempo e gli interi sono la data effettiva.
Questa è una premessa da fare per capire il codice delle funzioni che ti allego.
Function CompareDate(const A, B: TDateTime): TValueRelationship;
begin
If SameDate(A,B) then
Result:=EQualsValue
else if A<B then
Result:=LessThanValue
else
Result:=GreaterThanValue;
end;
Function SameDate(const A, B: TDateTime): Boolean; inline;
begin
Result:=Trunc(A)=Trunc(B);
end;
Come suggerisce bonmario, sembra che la compare avvenga tra stringhe e non numeri.
Nelle funzioni non viene messa nessuna logica o algoritmi classici per la gestione delle date. Fanno un banale "compare" numerico
Uhm... Ho provato a mettere tre tedit e un tbutton su un form per vedere se in effetti comparedate non funziona:
procedure TForm1.Button1Click(Sender: TObject);
begin
// shortdateformat è deprecato
DefaultFormatSettings.ShortDateFormat:='dd/mm/yyyy';
case CompareDate(strtodate(edit1.Text), strtodate(Edit2.Text)) of
-1: edit3.Text:='data1 < data2';
0: edit3.Text:='data1 = data2';
1: edit3.Text:='data1 > data2';
end;
end;
Mi pare che funziona come dovrebbe ???
L'errore a questo punto potrebbe essere da qualche altra parte.
Basta modificare
2:result:=comparedate(strtodate(stringgrid1.cells[acol,arow]),strtodate(stringgrid1.cells[acol,arow]));
in
2:result:=comparedate(strtodate(stringgrid1.cells[acol,arow]),strtodate(stringgrid1.cells[bcol,brow]));
e a me funziona.
Ciao, Mario
eh eh ... prova a mettere questo pezzo di codice e dimmi se funziona ;) Sembrano uguali .. lo so :D
2:result:=comparedate(strtodate(stringgrid1.cells[acol,arow]),strtodate(stringgrid1.cells[bcol,brow]));