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.