Analisando as diferenças entre o Delphi 7 e o novo Delphi 2009 podemos ver que elas não se limitam apenas a diferenças de componentes ou bibliotecas. Alem das diferenças da própria linguagem, temos algumas diferenças de sintaxe. Nos exemplos abaixo mostrarei alguns exemplos de cálculos com números negativos que gerariam a exception de Integer Overflow no Delphi 7, mas que no Delphi 2009 funcionam perfeitamente.

Abaixo os comentarios estão separados por pipes "|". A esquerda comentei o resultado da função em Delphi 7 e a direita em delphi 2009. Teste nas duas versões.

{
    Esse pequeno programa demonstra um erro de integer ovrflow que ocorre diferente
    entre o delphi 7 e o 2009.

    Esse erro ocorre ao se declarar um int, porem tentar armazenar nele a multiplicação
    de -1* um numero do tipo longword (unsigned).

    O operador de multiplicação terá precedência sobre o unario de negativação e será negativado
    um número unsigned, fazendo com que seu bit mais significativo seja ativado e tornando-o enorme.


    O interessante da diferença entre o Delphi 7 e o 2009 é que no Delphi 2009, ao contrario do delphi 7,
    a negativação do longword automaticamente o converte para um integer. Porém, ao se multiplicar
    -1*[longword] o efeito é o mesmo obtido no delphi 7: ativação do bit mais significativo
    do longword resultando em um numero enorme.

    Para contornar esse problema, alem do número -1 precisar ser isolado entre parenteses
    para o operador de negativação ter maior precedência, sempre é bom converter o longword
    para integer, se possivel.
}

unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, DateUtils;

type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

var
    Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    mili: LongWord;
begin
    mili := MilliSecondOfTheDay(now);

                                        //NO DELPHI 7:                                                                      |NO DELPHI 2009:
    ShowMessage(IntToStr(mili));        //retorna o positivo corretamente                                                   |retorna o positivo corretamente
    ShowMessage(IntToStr(-mili));       //não retorna negativo, mas retorna um positivo exageradamente enorme               |ISSO DÁ CERTO, MOSTRA NEGATIVO COMO DEVERIA SER
    ShowMessage(IntToStr(-1*mili));     //isso tambem não retorna negativo, mas retorna um positivo exageradamente enorme   |isso não retorna negativo, mas retorna um positivo exageradamente enorme
    ShowMessage(IntToStr((-1)*mili));   //isso retorna o negativo corretamente                                              |isso retorna o negativo corretamente

end;

procedure TForm1.Button2Click(Sender: TObject);
var
    mili: LongWord;
begin
    mili := MilliSecondOfTheDay(now);

    //FUNCIONA IGUAL TANTO NO NO DELPHI 7 COMO NO 2009
    ShowMessage(IntToStr(mili*-1));   //funciona, traz negativo
    ShowMessage(IntToStr(mili*(-1))); //funciona, traz negativo

end;
end.