Thanks to BigChimp for the wiki and others for info as well.
I have found another variation of the code posted on the wiki. The wiki sends a static text ('hi') to SpVoice.Speak() call. But I wanted to send dynamic text to the TTS engine. For example, reading the current time.
First I tried with a string, then many other things (even StringToOleStr) but no luck. But Finally I found a solution. The trick is to create a WideString, instead of a String/AnsiString. Here is a code that reads the current time

:
uses ... , comobj;
var
SavedCW: Word;
SpVoice: Variant;
myWideString : WideString;
begin
SpVoice := CreateOleObject('SAPI.SpVoice');
// Change FPU interrupt mask to avoid SIGFPE exceptions
SavedCW := Get8087CW;
// Store in the WideChar what needs to be read
myWideString := 'Hello, the time is ' + TimeToStr(Time);
try
Set8087CW(SavedCW or $4);
// We send our created WideString to Speak() call
SpVoice.Speak(myWideString, 0);
finally
// Restore FPU mask
Set8087CW(SavedCW);
end;