Oh, that's cool, but I've already solved the problem myself. Anyway, thanks for you tip. Here is the code I use now (might be helpful for others):
[pascal]
procedure TTorus.Render;
var
I, J: Integer;
theta, phi, theta1: Single;
cosTheta, sinTheta: Single;
cosTheta1, sinTheta1: Single;
ringDelta, sideDelta: Single;
cosPhi, sinPhi, dist: Single;
begin
inherited Render();

sideDelta := 2.0 * PI / FSides;
ringDelta := 2.0 * PI / FRings;
theta := 0.0;
cosTheta := 1.0;
sinTheta := 0.0;

for I := FRings -1 downto 0 do
begin
theta1 := theta + ringDelta;
cosTheta1 := Cos(theta1);
sinTheta1 := Sin(theta1);

glBegin(GL_QUAD_STRIP);
phi := 0.0;
for J := FSides downto 0 do
begin
phi := phi + sideDelta;
cosPhi := Cos(phi);
sinPhi := Sin(phi);
dist := FRadius + (FTubeRadius * cosPhi);

glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
glTexCoord2f(I / FRings, J / FSides);
glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, FTubeRadius * sinPhi);

glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
glTexCoord2f((I + 1) / FRings, J / FSides);
glVertex3f(cosTheta * dist, -sinTheta * dist, FTubeRadius * sinPhi);
end;
glEnd();

theta := theta1;
cosTheta := cosTheta1;
sinTheta := sinTheta1;
end;
end;
[/pascal]