unit uCreateGame; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit, FMX.EditBox, FMX.SpinBox, FMX.ListBox, FMX.StdCtrls, FMX.Controls.Presentation, System.Generics.Collections, System.IOUtils; type TfCreateGame = class(TForm) Button1: TButton; Label1: TLabel; cbGames: TComboBox; Label2: TLabel; sbWebServerPort: TSpinBox; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var fCreateGame: TfCreateGame; implementation {$R *.fmx} uses uGeneral; function GetGameFolders(const ARootDir: string): TArray; var gamesPath: string; folders: TStringDynArray; i: Integer; begin // Формируем полный путь к папке с играми gamesPath := IncludeTrailingPathDelimiter(ARootDir) + 'games'; // Проверяем существование папки if not TDirectory.Exists(gamesPath) then begin SetLength(Result, 0); Exit; end; // Получаем список подпапок folders := TDirectory.GetDirectories(gamesPath); SetLength(Result, Length(folders)); // Извлекаем только имена папок (без полного пути) for i := 0 to High(folders) do Result[i] := ExtractFileName(ExcludeTrailingPathDelimiter(folders[i])); end; procedure TfCreateGame.Button1Click(Sender: TObject); begin if cbGames.Text = '' then Exit; TTW_Bot.frOBS1.addGame(cbGames.Text, round(sbWebServerPort.Value)); close; end; procedure TfCreateGame.FormCreate(Sender: TObject); var gameFolders: TArray; folder: string; begin // Получаем список игровых папок gameFolders := GetGameFolders(ExtractFilePath(ParamStr(0))); // Укажите ваш корневой путь // Заполняем список (например, TComboBox) cbGames.Items.BeginUpdate; try cbGames.Items.Clear; for folder in gameFolders do cbGames.Items.Add(folder); finally cbGames.Items.EndUpdate; end; if cbGames.Items.Count > 0 then cbGames.ItemIndex := 0; end; end.