Ну, идея в том, что тебе надо просто перебирать последний символ. Если только буквы, то это довольно просто:
В общем, как то так:
	Код:
	function GetNextValue(var AValue : String) : Boolean;
  procedure IncValue(var AValue : String; AIndex : Integer);
  var
    Ch : Char;
  begin
    If (AIndex < 1) Or (AIndex > Length(AValue)) Then 
     Raise Exception.Create('Index out of bounds');
    Ch := AValue[AIndex];
    If Ch <> 'z' Then AValue[AIndex] := Chr(Ord(Ch) + 1) Else
      Begin
        AValue[AIndex] := 'a';
        If AIndex = 1 
          Then AValue := 'a' + AValue 
          Else IncValue(AValue,AIndex-1);
      End;
  end;
begin
  Result := True;
  If AValue = '' Then AValue := 'a' Else
    If AValue = 'zzzzzzzz' Then Result := False Else
        IncValue(AValue,Length(AValue);
end; 
 
Код не проверял. Просто идея.