Bonjour tout le monde,
encore une fois j'envoie une bouteille à la mer car je prépare une usine à gaz...
Mon idée : au lancement du logiciel, il scanne un dossier à la recherche des fichiers dont l'extension est ".sb2", puis les liste dans un menu "Exemples". Mais ce qu'il me manque est de paramétrer pour chaque entrée du menu une action sur le OnClick...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
  Extensions->Add(".sb2");
  // Appel à Search, avec pour liste des fichiers les items des deux listes "Biblio" & "Examples"
  SearchEx(ExtractFilePath(Application->ExeName)+"bibliotheque\\", Extensions, Biblio,0);
  SearchEx(ExtractFilePath(Application->ExeName)+"exemples\\", Extensions, Examples,1);
  delete Extensions;
}
//-----------------------------fonction de listage de fichiers------------------
void __fastcall TForm1::SearchEx(AnsiString FilePath, TStringList * Extensions, TStrings * ListeFichiers, int RangMenu)
{
  TSearchRec Infos_fichier;
  TMenuItem *NewItem = new TMenuItem(this);
  if (!FindFirst(FilePath+"*.*", faAnyFile, Infos_fichier))
  do
  {
	for (int i = 0 ; i < Extensions->Count ; i++)
	{
	  if (ExtractFileExt(Infos_fichier.Name).LowerCase() == Extensions->Strings[i].LowerCase())
	  {
		ListeFichiers->Add(ExpandFileName(Infos_fichier.Name));
		AnsiString CleanName = StringReplace(Infos_fichier.Name, ".sb2", "",TReplaceFlags() << rfReplaceAll);     //nom seul du fichier, sans le chemin
		//nettoie le nom de fichier de son extension sb2
		ListBox1->Items->Add(CleanName);
		//rajout d'entrées dans le menu
		NewItem = new TMenuItem(this);
		NewItem->Caption = CleanName;
		NewItem->Name =  CleanName;
		NewItem->OnClick=ExempleClick(Infos_fichier.Name); // et là ça ne marche pas ! J'aimerais que chaque entrée provoque l'utilisation du programme ci-dessous ExempleClick
		MainMenu1->Items->Items[0]->Items[RangMenu]->Add(NewItem);
	  }
	}
  }
  while(!FindNext(Infos_fichier));
  FindClose(Infos_fichier);
}
//---------------------pour le fichier ça écrit dans un fichier BAT puis le lance pour que ce soit visible/compréhensible par l'utilisateur------------------------------
 
void __fastcall TForm1::ExempleClick(AnsiString NomFichier)
{
ofstream fichier_s2("scratch2.bat", ios::out | ios::trunc);  // ouverture en écriture avec effacement du fichier ouvert
		if(fichier_s2)
		{
				//fichier_s2 << "@echo off\nbreak ON\ncls\nSET currentpath=%~dp1\nSET dossier_scratch="<< '"' << locate_scratch2 << '"'<< "\nstart %dossier_scratch% %currentpath%" << NomFichier << ".sb2";
				fichier_s2.close();
		}
		else ShowMessage("Le fichier scratch2.bat n'existe pas.");
ShellExecute(0, 0, "scratch2.bat", 0, 0 , SW_HIDE );
}
La création du "NewItem->Click=ExempleClick(Infos_fichier.Name);" ne fonctionne pas, il me dit "ce n'est pas un type autorisé"...et là je suis perdu.

Encore une fois merci de prendre le temps de me lire.