function Combination(mStrings: TStrings; mStr: string;
mLen: Integer): Boolean; { 组合 }
procedure fCombination(mLeft, mRight: string);
var
I: Integer;
begin
if Length(mLeft) >= mLen then
mStrings.Add(mLeft)
else for I := 1 to Length(mRight) do
fCombination(mLeft + Copy(mRight, I, 1), Copy(mRight, I + 1, MaxInt));
end;
begin
Result := False;
if not Assigned(mStrings) then Exit;
mStrings.BeginUpdate;
try
mStrings.Clear;
fCombination('', mStr);
finally
mStrings.EndUpdate;
end;
Result := True;
end; { Combination }
procedure TForm1.FormCreate(Sender: TObject);
begin
Combination(Memo1.Lines, 'abcdef', 3);
end;