You're almost there! You've already retrieve the month, but there is something wrong with showing the result.
A correct example would be
procedure ShowMonth;
var
Day, Year, Month: Word;
Today: TDateTime;
begin
Today:= Now;
DecodeDate(Today, Year, Month, Day);
ShowMessage(IntToStr(Month));
end;
The problem is from the call to DateTimeToStr which takes a TDateTime which is just a type of Double which means number of days since Dec 30 1899.
So, the call to DateTimeToStr will just give you some day around 1900, depending on the value of Month you have got.