Topic: Вывод списка имен файлов из папки в выподающем меню

Сдаюсь )))  Самому не получилось )))
Мне нужно вывести список файлов из папки в выпадающем меню
известно, что все файлы с расширением *.ini
колличество файлов не известно (может менятся)
при клике по имени должно происходить событие.

2 (edited by sibprogsistem 2018-11-02 20:54:59)

Re: Вывод списка имен файлов из папки в выподающем меню

список вывел

procedure Form1_OnShow (Sender: TObject; Action: string);
var
fiLang:TStringList;
i,s: integer;
mnFile: TMenuItem;
subfiLangi: TMenuItem;

st:string;
begin
 mnFile := TMenuItem.Create (Form1.MainMenu);
 mnFile.Caption := 'Языки';
 Form1.MainMenu.Items.Add(mnFile);
 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',false);
 s := fiLang.Count-1;
 for i:=0  to s  do
 begin
      subfiLangi:= TMenuItem.Create (Form1.MainMenu);
      subfiLangi.Caption := (fiLang[i]);
      subfiLangi.OnClick := @ckliclang;
      mnFile.Add(subfiLangi);
 end;
 fiLang.free  ;
end;

а вот дальше не получается... и в списке нужно полько имя файла вывести, без адреса...

procedure ckliclang (Sender: string);
var
ini:TiniFile;
begin
 ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'languagesOptions.ini');
 ini.WriteString('lang','directlang',??????????);
 ini.free ;
end;
begin

?????????? -  имя выбранного файла ini

Re: Вывод списка имен файлов из папки в выподающем меню

А связать этот список с тем же ComboBox?

Re: Вывод списка имен файлов из папки в выподающем меню

m.prokhachev wrote:

А связать этот список с тем же ComboBox?


procedure Form1_OnShow (Sender: TObject; Action: string);
var
fiLang:TStringList;
i,s: integer;
mnFile: TMenuItem;
subfiLangi: TMenuItem;

st:string;
begin
 mnFile := TMenuItem.Create (Form1.MainMenu);
 mnFile.Caption := 'Языки';
 Form1.MainMenu.Items.Add(mnFile);
 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',false);
 s := fiLang.Count-1;
 for i:=0  to s  do
 begin
    form1.ComboBox1.items.add(fiLang[i]);
 end;
 fiLang.free  ;
end;

Re: Вывод списка имен файлов из папки в выподающем меню

лишнии символы убрал так

      Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
      Delete(subfiLangi.Caption, 1, 10);

Re: Вывод списка имен файлов из папки в выподающем меню

sibprogsistem wrote:

... и в списке нужно полько имя файла вывести, без адреса...

Для получения имени файла без пути используй функцию ExtractFileName()

Визуальное программирование: блог и телеграм-канал.

Re: Вывод списка имен файлов из папки в выподающем меню

k245 wrote:
sibprogsistem wrote:

... и в списке нужно полько имя файла вывести, без адреса...

Для получения имени файла без пути используй функцию ExtractFileName()

Мне нужен список файлов...
ну я это уже сделал осталось получить секцию в меню на которую кликаю

Выглядит это пока что так...

procedure Form1_OnShow (Sender: TObject; Action: string);
var
fiLang:TStringList;
i,s: integer;
mnFile: TMenuItem;
subfiLangi: TMenuItem;
st:string;
begin
 mnFile := TMenuItem.Create (Form1.MainMenu);
 mnFile.Caption := 'Язык';
 Form1.MainMenu.Items.Add(mnFile);
 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',False);
 s := fiLang.Count-1;
 for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (Form1.MainMenu);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnFile.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;
 end;
  fiLang.free  ;
end;


procedure clicklang (sender: string);
var
ini:TiniFile;
LangFilename:string;
begin
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'languagesOptions.ini');
ini.WriteString('lang','directlang',LangFilename);
ini.free ;
end;
begin
end.

Re: Вывод списка имен файлов из папки в выподающем меню

работает, но появилась новая проблема .... теперь у меня появиляется этот символ &

procedure Form1_OnShow (Sender: TObject; Action: string);
var
fiLang:TStringList;
i,s: integer;
mnFile: TMenuItem;
subfiLangi: TMenuItem;
st:string;
begin
 mnFile := TMenuItem.Create (Form1.MainMenu);
 mnFile.Caption := 'Язык';
 Form1.MainMenu.Items.Add(mnFile);
 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',False);
 s := fiLang.Count-1;
for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (Form1.MainMenu);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnFile.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;

 end;
  fiLang.free  ;
end;


procedure clicklang (sender: string);
var
ini:TiniFile;
y:string;
begin
y:=TMenuItem(Sender).Caption;
showmessage(y);
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'languagesOptions.ini');
ini.WriteString('lang','directlang',y);
ini.free ;
end;

Re: Вывод списка имен файлов из папки в выподающем меню

сделано...
нужно было

y:=TMenuItem(Sender).caption;

поменять на

y:=TMenuItem(Sender).Hint;

10 (edited by sibprogsistem 2018-11-05 14:01:50)

Re: Вывод списка имен файлов из папки в выподающем меню

Дмитрий .. Я думаю тут все правильно ))

Оставляю полный код для всех желающих...

procedure Form1_OnShow (Sender: TObject; Action: string);
var
fiLang:TStringList;
i,s: integer;
mnFile: TMenuItem;
subfiLangi: TMenuItem;
st:string;
begin
 mnFile := TMenuItem.Create (Form1.MainMenu);
 mnFile.Caption := 'Язык';
 Form1.MainMenu.Items.Add(mnFile);
 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',False);
 s := fiLang.Count-1;
for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (Form1.MainMenu);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnFile.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;
end;
  fiLang.free  ;
end;


procedure clicklang (sender: string);
var
ini:TiniFile;
y:string;
begin
y:=TMenuItem(Sender).Hint; // получаю адрес файла ini
showmessage(y); // вывожу в сообщении (можно убрать строку)
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'languagesOptions.ini');
ini.WriteString('lang','directlang',y); // записываю полученный адрес в ini
ini.free ;
end;
begin
end.