Wie oben bereits beschrieben ist deine Variable Text leer.
Du setzt den Startwert auf 1, zählst in deiner Schleife sofort 1 hoch: Ergebnis ist 2.
Wie ebenfalls bereits oben beschrieben zählst du nicht die Wörter sondern die Anzahl Zeichen. Also solltest du in deiner Schleife nur dann hochzählen, wenn ein Leerzeichen ausgewertet wird. Continue ist hier überflüssig! Sorge mit Trim noch dafür das weder am Anfang noch am Ende deines Strings Leerzeichen stehen (Trailing-Spaces). Dann kannst du die naheliegende Variante verwenden, indem du jedes Zeichen Text[i] auf Space / Leerzeichen auswertest.
Diese "naive" Variante kannst du dann wie oben bereits angezeigt, verfeinern und um die Zeichen erweitern, die ebenfalls zur Trennung von Worten führen. Beispielroutine ist ungetestet.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i, woerter : integer;
text : string;
begin
woerter:= 0;
text := Trim('Dies ist ein kurzer Text') // Trailing-Spaces entfernen;
for i := 1 to length (text) do
begin
if text[i] = ' ' then
inc(woerter);
// continue; // überflüssig!
end;
// das letzte Wort mitnehmen
inc(woerter);
Edit3.Text:= inttostr(woerter);
end;