{Copyright (c) 2005 Jahény Benoît. Ce fichier fait partie de MultiConfig.

MultiConfig est un logiciel libre; vous pouvez le redistribuer et/ou le modifier
selon les termes de la GNU General Public License (Licence Publique Générale GNU) 
telle qu'elle a été publiée par la Free Software Foundation


MultiConfig est distribué dans l'espoir qu'il sera utile, mais SANS LA MOINDRE GARANTIE;
pas même la garantie implicite de COMMERCIABILITE ou d'ADEQUATION A UN BUT PARTICULIER.
Voir la GNU General Public License pour plus de détails.

Vous devriez avoir reçu une copie de la GNU General Public License en même temps que ce programme;
sinon, merci d'écrire à la Free Software Foundation, Inc, 59 Temple Place, Suite 330, Boston, MA02111-1307 USA.

Vous devez respecter la GNU General Public License à tous les égards pour tout code utilisé.
Si vous modifiez ce fichier, vous pouvez étendre cette exception à votre version du fichier,
mais n'êtes pas obligé de le faire. Si vous ne souhaitez pas le faire, supprimez cette déclaration
l'exception de votre version.}

{

A FAIRE
- éviter les redites de nom de profil
}


unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, ComCtrls, ExtCtrls, StdCtrls, FileCtrl, Spin, Buttons,
  shellApi, iniFiles, Menus, WinHelpViewer, XPMan, LabelLien, Printers,
  Registry, DKLang;

Const
  // Définition d'un message personnalisé.
  // Ce message est envoyé par Windows sur demande quand un évènement
  // lié à la souris intervient.
  WM_MONICONE = WM_USER +1;

type

  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    MainMenu1: TMainMenu;
    Menu1: TMenuItem;
    Configurerunnouveauprofil1: TMenuItem;
    Quitterleprogramme1: TMenuItem;
    Apropos1: TMenuItem;
    Modifierunprofil1: TMenuItem;
    AidedeFSMultiConfig1: TMenuItem;
    AproposdeFSMultiConfig1: TMenuItem;
    XPManifest1: TXPManifest;
    Langue1: TMenuItem;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label8: TLabel;
    Label9: TLabel;
    Label11: TLabel;
    Image1: TImage;
    Label6: TLabel;
    Label10: TLabel;
    LabelLien1: TLabelLien;
    LabelLien2: TLabelLien;
    Button1: TButton;
    TabSheet2: TTabSheet;
    Label2: TLabel;
    Label4: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    Button14: TButton;
    GroupBox12: TGroupBox;
    Label22: TLabel;
    CheckBox1: TCheckBox;
    Edit2: TEdit;
    Button7: TButton;
    TabSheet3: TTabSheet;
    Button3: TButton;
    Button13: TButton;
    GroupBox13: TGroupBox;
    Button8: TButton;
    Button12: TButton;
    Button11: TButton;
    Button10: TButton;
    Button9: TButton;
    Edit7: TEdit;
    Edit6: TEdit;
    Edit5: TEdit;
    Edit4: TEdit;
    Edit3: TEdit;
    GroupBox14: TGroupBox;
    Button36: TButton;
    CheckBox2: TCheckBox;
    TabSheet7: TTabSheet;
    Label1: TLabel;
    GroupBox5: TGroupBox;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    GroupBox7: TGroupBox;
    GroupBox8: TGroupBox;
    GroupBox6: TGroupBox;
    Label23: TLabel;
    Button6: TButton;
    ComboBox2: TComboBox;
    Button33: TButton;
    Button32: TButton;
    Button31: TButton;
    Button30: TButton;
    Button29: TButton;
    Button28: TButton;
    Button27: TButton;
    Button26: TButton;
    Button25: TButton;
    Button24: TButton;
    Button23: TButton;
    Button22: TButton;
    Edit19: TEdit;
    Edit18: TEdit;
    Edit17: TEdit;
    Edit16: TEdit;
    Edit15: TEdit;
    GroupBox9: TGroupBox;
    Button5: TButton;
    RadioButton1: TRadioButton;
    GroupBox10: TGroupBox;
    Button34: TButton;
    TabSheet6: TTabSheet;
    Label35: TLabel;
    GroupBox2: TGroupBox;
    Edit8: TEdit;
    Button39: TButton;
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Button21: TButton;
    Button4: TButton;
    Button20: TButton;
    GroupBox11: TGroupBox;
    GroupBox3: TGroupBox;
    Edit14: TEdit;
    Button35: TButton;
    GroupBox4: TGroupBox;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button40: TButton;
    Button41: TButton;
    Button42: TButton;
    Button43: TButton;
    Button44: TButton;
    CheckBox3: TCheckBox;
    GroupBox15: TGroupBox;
    Label3: TLabel;
    RadioGroup1: TRadioGroup;
    TabSheet4: TTabSheet;
    Button37: TButton;
    Button38: TButton;
    GroupBox16: TGroupBox;
    ListView1: TListView;
    DKLanguageController1: TDKLanguageController;
    Button45: TButton;
    Button46: TButton;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    Button47: TButton;
    Label5: TLabel;
    Button48: TButton;
    ListBox1: TListBox;
    Edit20: TEdit;
    Label34: TLabel;
    Label36: TLabel;
    Edit21: TEdit;
    TimerRetardMessage: TTimer;
    TimerMiseAJour: TTimer;
    PopUpGauche: TPopupMenu;
    PopUpDroit: TPopupMenu;
    QuitterItem: TMenuItem;
    RestaurerItem: TMenuItem;
    procedure RestaurerItemClick(Sender: TObject);
    procedure QuitterItemClick(Sender: TObject);
    //fin icone
    procedure Button47Click(Sender: TObject);
    procedure Button48Click(Sender: TObject);
    procedure CheckBox5Click(Sender: TObject);
    procedure Button46Click(Sender: TObject);
    procedure Button45Click(Sender: TObject);
    procedure Restaurerfskneeboardkeyshtm1Click(Sender: TObject);
    procedure English1Click(Sender: TObject);
    procedure Franais1Click(Sender: TObject);
    procedure Button44Click(Sender: TObject);
    procedure Button43Click(Sender: TObject);
    procedure Button42Click(Sender: TObject);
    procedure Button41Click(Sender: TObject);
    procedure Button40Click(Sender: TObject);
    procedure Button39Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure Button38Click(Sender: TObject);
    procedure Button37Click(Sender: TObject);
    procedure Button36Click(Sender: TObject);
    procedure Button34Click(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure AproposdeFSMultiConfig1Click(Sender: TObject);
    procedure AidedeFSMultiConfig1Click(Sender: TObject);
    procedure Button35Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button26Click(Sender: TObject);
    procedure Button25Click(Sender: TObject);
    procedure Button24Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button32Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button33Click(Sender: TObject);
    procedure Button31Click(Sender: TObject);
    procedure Button30Click(Sender: TObject);
    procedure Button29Click(Sender: TObject);
    procedure Button28Click(Sender: TObject);
    procedure Button27Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Modifierunprofil1Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Quitterleprogramme1Click(Sender: TObject);
    procedure Configurerunnouveauprofil1Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure LangChange(Sender: TObject);
    procedure TimerRetardMessageTimer(Sender: TObject);
  private
    { Déclarations privées }
    DernierMSG   :TMsg;
    Procedure MessageIcone(Var Msg: TMsg);Message WM_MONICONE;
    procedure AjouteIcone;
    procedure SupprimeIcone;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  Parametre: TStrings;
  PRofIni: TInifile;
  MultIni: TInifile;

  StartInfo   : TStartupInfo;
  ProcessInfo : TProcessInformation;
  tmpS: string;
  contenuFichier: tstringlist;
  contenuMcg: tstringlist;
  adr: string;
  ligne: string;
  Section  : TStringList;
  cleappli: Tstringlist;
  lignecle: string;
  fs9_cfg: string;
  ListAjout: TlistItem;
  //variable de lecture du fs9 pour supprimer/remplace le profil
  marque: integer;
  E3:integer;
  E4:integer;
  E5:integer;
  E6:Integer;
  E7, FinApp:integer;
  Fin: Boolean;
  PReAttrib: string;
  attrib: TInifile;
  Entete, Details, PiedPage: TRect; {pour connaître les limites des zones respectives}
  YCurr: integer; {La position en cours pour l'écriture d'une ligne}
  C: TCanvas; {Notre canvas pour imprimer}
  Li: integer; {nombre de lignes imprimées }
  Dx, Dy: integer; {Décalage par rapport aux marges}
  NPage: word = 0;  {Le numéro de page à incrémenter à chaque nouvelle page}
  TotalPages: word = 0;  {Le nombre de pages à imprimer. Pour afficher Page x / TotalPages }
  NbrLien: integer;


implementation
uses ABOUT, attention, Unit2, Unit3, Unit4;
{$R *.dfm}
{$R images.RES}
{$WARN SYMBOL_PLATFORM OFF}



//-------------------------------Fonctions-------------------------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

//ajout d'icone et retrait barre des tâches

Procedure TForm1.AjouteIcone;
Var Info:TNotifyIconData;
begin
  // If faut tout d'abord remplir la structure Info
  // avec ce que l'on veut faire

  // cbSize doit contenir la taille de la structure
  Info.cbSize := SizeOf(Info);
  // Wnd doit contenir le Handle de la fenêtre qui recevra les messages de
  // notification d'évènement de la souris
  Info.Wnd    := Handle;
  // uID Numéro d'icone, c'est utile si plusieurs icones sont affichées en
  // simultannées dans la barre des taches. Car c'est ce numéro qui permettra
  // ensuite de modifier celle que l'on veut.
  Info.uID    := 1;
  // szTip contient le texte de l'info bulle affiché au dessus de l'icone
  Info.szTip  := 'MultiConfig';
  // hIcon contient le handle de l'icone qui doit être affichée
  Info.hIcon  := LoadIcon(hInstance, ('progicon'));
  // uCallBackMessage contient le message qui sera retourné à la fenêtre
  // donnée par Wnd quand un évènement de souris apparait sur l'icone
  Info.uCallbackMessage := WM_MONICONE;
  // uFlags doit contenir le liste des champs utilisés dans la structure
  // parmis les champs szTip,hIcon et uCallBackMessage
  Info.uFlags := NIF_TIP Or NIF_ICON Or NIF_MESSAGE;

  // Appel de la fonction API ajoutant l'icone
  Shell_NotifyIcon(NIM_ADD,@Info);
End;

Procedure TForm1.SupprimeIcone;
Var Info:TNotifyIconData;
begin
  // Dans le cas de la suppression d'une icone, seuls les champs ci-dessous
  // sont nécessaires
  Info.cbSize := SizeOf(Info);
  Info.Wnd    := Handle;
  Info.uID    := 1;
  Shell_NotifyIcon(NIM_DELETE,@Info);
End;

Procedure TForm1.MessageIcone(Var MSG:TMSG);
Begin
  // Click du bouton gauche
  If MSG.wParam=WM_LBUTTONDOWN
  Then Begin
    // Attention, si le double click doit être géré, il ne faut pas exécuter
    // tout de suite l'action liè à ce message. Surtout si un menu est affiché
    // sur le click gauche. Dans ce cas le double-click ne se produit pas car
    // le deuxième click n'est plus lié à l'icone mais au menu.

    // Le message est enregistré, pour être tester plus tard si aucun autre
    // click et/ou double-clique n'est reçu
    DernierMSG := MSG;
    // C'est le timer qui exécutera le message en cas de besoin
    TimerRetardMessage.Enabled:=True;
  End;
  If MSG.wParam=WM_RBUTTONUP
  Then Begin
    // Dans le cas du bouton droit, le double-clique n'est pas géré
    // le menu liè au bouton droit peut donc être affiché de suite.
    // Il est préférable dans ce cas d'utiliser WM_RBUTTONUP plutôt
    // que WM_RBUTTONDOWN
    PopUpDroit .Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
  End;
  If MSG.wParam=WM_LBUTTONDBLCLK
  Then Begin
    // Un double-clique est détecté, alors il faut annuler le timer avant
    // qu'il n'arrive à terme. Ainsi le l'action liée au click simple
    // n'est pas exécutée
    TimerRetardMessage.Enabled:=False;
    // Le double-click ici restaure l'application
    // et elle est mise au premier plan
    Application.Restore;
    Application.BringToFront
  End;
End;

// Procédure lié au timer de retard sur le click-gauche
procedure TForm1.TimerRetardMessageTimer(Sender: TObject);
begin
  // Il faut vérifier que le message en attente est bien un click-gauche
  If DernierMSG.wParam=WM_LBUTTONDOWN
  Then Begin
    // Dans ce cas le menu lié au click gauche est affiché
    PopUpGauche.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
  End;
  // Le timer est ensuite annulé pour ne pas répéter le message...
  TimerRetardMessage.Enabled := False;
end;

//Fin procedures ajout d'icone et retrait


{ ------------------------------< Fonction GoNext >--------------------------- }

procedure GoNext;
var
  Index_main, MaxPages_main : integer;

begin
  Index_main     := Form1.PageControl1.ActivePageIndex;
  MaxPages_main  := Form1.PageControl1.PageCount;
  if (Index_main + 1) >= MaxPages_main then Exit;    //Si on peut pas changer, on se casse.
  Form1.PageControl1.ActivePageIndex := Index_main + 1;
end;

{ ------------------------------< Fonction GoPrev >--------------------------- }

procedure GoPrev;
var
  Index_main : integer;

begin
  Index_main     := Form1.PageControl1.ActivePageIndex;
  if (Index_main - 1) = -1 then Exit;  //Si on peut pas changer, on se casse.
  Form1.PageControl1.ActivePageIndex := Index_main - 1;
end;

{ ------------------------------< FIN DES PROCEDURES >------------------------ }

{============================================================================}
{ fonction qui renvoie la sous chaine de caractère situè à droite de la sous }
{ chaine substr                                                              }
{ ex: si substr = '\' et S= 'truc\tr\essai.exe' gauche renvoie truc          }
{============================================================================}

function droite(substr: string; s: string): string;
begin
  if pos(substr,s)=0 then result:='' else
    result:=copy(s, pos(substr, s)+length(substr), length(s)-pos(substr, s)+length(substr));
end;

{============================================================================}
{ fonction qui renvoie la sous chaine de caractère situè à gauche de la sous }
{ chaine substr                                                              }
{ ex: si substr = '\' et S= 'truc\tr\essai.exe' gauche renvoie truc          }
{============================================================================}

function gauche(substr: string; s: string): string;
begin
  result:=copy(s, 1, pos(substr, s)-1);
end;

{=================================================================}
{ fonction renvoyant la date et heure de la création du Fichier   }
{=================================================================}

function DateHeureCreationFichier1(fichier: string): TDateTime;
var SearchRec:TSearchRec;
    Resultat:longint;
begin
  Result:=0;
  Resultat:=FindFirst(fichier, FaAnyFile, SearchRec);
  if Resultat=0 then Result:=FileDateToDateTime(SearchRec.Time); // FileDateToDateTime transforme une date de type dos en format TDateTime
  FindClose(SearchRec);
end;

{=================================================================}
{ fonction renvoyant le nom d'utilisateur ayant ouvert la session }
{=================================================================}

function UserName : string;
var
  Utilisateur : Array[0..255] Of Char;
  Taille      : Cardinal;
begin
  Taille := SizeOf(Utilisateur);
  If GetUserName(@Utilisateur,Taille) then
     Result := strpas(Utilisateur)
  else
    Result :='';
end;

{=================================================================}
{ fonction renvoyant la version de windows                        }
{=================================================================}
function WindowsVersion: string;
begin
  case Win32MajorVersion of
    3: Result:='Microsoft Windows NT 3.51';
    4: case Win32MinorVersion of
         0:  case Win32Platform of
               1: case Win32CSDVersion[1] of
                    'A':    Result:='Microsoft Windows 95';
                    'B','C':    Result:='Microsoft Windows 95 OSR2';
                  else
                    Result:='Inconnue';
                  end;
               2: Result:='Microsoft Windows NT 4.0'
             else
               Result:='Inconnue';
             end;
         10: case Win32CSDVersion[1] of
               'A':    Result:='Microsoft Windows 98';
               'B':    Result:='Microsoft Windows 98 SE';
             else
               Result:='Inconnue';
             end;
         90: Result:='Microsoft Windows Millennium Edition';
       else
         Result:='Inconnue';
       end;
    5: case Win32MinorVersion of
         0:  Result:='Microsoft Windows 2000';
         1:  Result:='Microsoft Windows XP';
         2:  Result:='Microsoft Windows Server 2003';
       else
         Result:='Inconnue';
       end;
  else
    Result:='Inconnue';
  end;
  end;

{=================================================================}
{fonction qui renvoie la partie nom, d'un nom de fichier constitué}
{  d'un nom et d'une extension                                    }
{=================================================================}

Function ExtractFileNameOnly(FileName:TFileName): TFileName;
var ExtPart : TFileName;
    lgExt   : Integer;

begin
 ExtPart := ExtractFileExt(FileName);
 LgExt:=Length(ExtPart);
 Delete(FileName,Length(FileName)-lgExt+1,lgExt);
 Result:=FileName;
end;

{=================================================================}
{ fonction renvoyant le nom du attrib à utiliser selon language   }
{=================================================================}
function LangAttrib (LangueID: integer) : string ;
Var Info   : TSearchRec;
    RDFolder: Tstringlist;
    Chemin: string;
    i:integer;
    RDList: TStringList;
begin

  Chemin := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)+'lang\');
  RDFOlder:= TstringList.create;
  If FindFirst(Chemin+'*.lng',faAnyFile,Info)=0 Then
  Begin
    Repeat
      If ((Info.Attr And faDirectory)=0) then
       RDFolder.Add(Info.FindData.cFileName)
    Until FindNext(Info)<>0;
    FindClose(Info);
  End;
RDList:= Tstringlist.Create;
for i:=0 to RDFolder.count-1 do
begin
RDList.LoadFromFile(chemin+RDFolder.Strings[i]);
if strtoint(Droite('=',RDList.Strings[1])) = LangueID then
Result:=ExtractFileNameOnly(RDFolder.Strings[i])+'_'
else
Result:='french_'
end;

end;


{=================================================================}
{            fonction qui génère le "kneeboard_keys.htm           }
{=================================================================}

function fskneeboard(nom_profil: string):string;
var  Prog_bis: String;
     i: integer;
     i10: integer;
     Section1: TStringLIst;
     Section2: TStringLIst;
     Section3: TStringLIst;
     Section4: TStringLIst;
     Section5: TStringLIst;
     Section6: TStringLIst;
     Section7: TStringLIst;
     Section8: TStringLIst;
     Section9: TStringLIst;
     Section10:TStringLIst;
     Section11:TStringLIst;
     Section12:TStringList;
     SectionMark: integer;
     ComList: TStringlist;
     Touclist: TStringlist;
     toucheCPL: string;
     touche:string;
     toucheMod:String;
     UsrTouch:string;
     UsrTouchMod:string;
     UsrCom: string;
     INIFS9: TInifile;
     f: TextFile;
     Rfs9_cfg: string;
     sec_prof: Tstringlist;

// fin variables lecture touche
begin
PRofIni:= TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
Prog_bis:= PRofIni.ReadString(nom_profil, 'Application', '');
Rfs9_cfg:= PRofIni.ReadString(nom_profil, 'CHEMIN', '');
ComList:=  TStringList.Create;
ToucList:= TStringList.Create;
Section1:= TstringList.Create;
Section2:= TstringList.Create;
Section3:= TstringList.Create;
Section4:= TstringList.Create;
Section5:= TstringList.Create;
Section6:= TstringList.Create;
Section7:= TstringList.Create;
Section8:= TstringList.Create;
Section9:= TstringList.Create;
Section10:= TstringList.Create;
Section11:= TstringList.Create;
Section12:= TstringList.Create;
Sec_prof:= Tstringlist.Create;
ProfIni.ReadSection(Nom_Profil, sec_prof);
INIFS9:=TInifile.Create(Rfs9_cfg);
INIFS9.ReadSection('KEYBOARD_MAIN' ,ComList);
AssignFile(F,(ExtractFilePath(Prog_bis)+'\Aircraft\kneeboard_keys.htm'));
attrib:=TInifile.Create(ExtractFilePath(Application.ExeName)+'lang\'+LangAttrib(LangManager.LanguageID)+'attrib.cfg');
  if fileexists(ExtractFilePath(Prog_bis)+'\Aircraft\kneeboard_keys.htm') then
  begin
    Erase(F);
  end;

//-------------------repartition des commandes...----------------//
  for i:=0 to ComList.Count-1 do
     begin
       toucheCPL:=INIFS9.ReadString('KEYBOARD_MAIN',Comlist.Strings[i], 'pas de touche attribuée');
       touche:=Gauche(',',toucheCPL);
       toucheMod:=Droite(',',toucheCPL);
       UsrTouch:=attrib.ReadString('TOUCHES',touche,'');
       UsrTouchMod:=attrib.ReadString('modificateur',toucheMod,'');
       UsrCom:=droite(';',attrib.ReadString('commandes',Comlist.Strings[i],''));
       if UsrCom <> '' then
       begin
         SectionMark:=strtoint(gauche(';',attrib.ReadString('commandes',Comlist.Strings[i],'')));
           case SectionMark of
           1:  Section1.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           2:  Section2.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           3:  Section3.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           4:  Section4.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           5:  Section5.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           6:  Section6.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           7:  Section7.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           8:  Section8.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
           9:  Section9.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
          10: Section10.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
          11: Section11.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
          end;
       end
       else begin
       Section12.Add(Comlist.Strings[i]+'='+UsrTouchMod+UsrTouch)
       end;
  end;
Section1.Sort;
Section2.Sort;
Section3.Sort;
Section4.Sort;
Section5.Sort;
Section6.Sort;
Section7.Sort;
Section8.Sort;
Section9.Sort;
Section10.Sort;
Section11.Sort;
Section12.Sort;

//-------------------écriture du fichier------------------------//
ReWrite(F);
WriteLn(F, '<head>');
WriteLn(F, '<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=windows-1252">');
WriteLn(F, '</head>');
WriteLn(F, '<pre><font style="font-size: 9pt;" face="Arial"><b><big><big><span ');
WriteLn(F, ' style="text-decoration: underline;"><span');
WriteLn(F, ' style="font-weight: bold;">PROFIL:'+nom_profil);
WriteLn(F, '</span></span></big></big>');
WriteLn(F, '<pre><font style="font-size: 9pt;" face="Arial"><b><big><big><span ');
WriteLn(F, ' style="text-decoration: underline;"><span');
WriteLn(F, ' style="font-weight: bold;">Liens');
WriteLn(F, '</span></span></big></big>');
  for i:=0 to sec_prof.Count-1 do begin
    for i10:=0 to sec_prof.Count-1 do begin
      if sec_prof.Strings[i]='Lien'+inttostr(i10) then
      begin
      WriteLn(F, '<a href="'+gauche(';', ProfIni.ReadString(Nom_Profil, sec_prof.Strings[i] ,''))+'">'+droite(';', ProfIni.ReadString(Nom_Profil, sec_prof.Strings[i] ,''))+'</a>');
      end;
    end;
  end;
WriteLn(F, '<br><br><br>');
WriteLn(F, attrib.Readstring('Ch_Res','REM', '')+':</b>');
WriteLn(F, attrib.Readstring('Ch_Res','REM_TXT', '')+'</font></PRE>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','SIM', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="357" id="AutoNumber12">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="192">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section1.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section1.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="162">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section1.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section1.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','GOUV', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber4">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="256">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section2.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section2.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="216">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section2.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section2.Strings[i])));
  end;
WriteLn(F, '</font></td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table></P>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','MOT', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="357" id="AutoNumber3">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="354" colspan="2">');
WriteLn(F, '<font face="Arial" style="font-size: 9pt">'+attrib.Readstring('Ch_Res','MOT_TXT', '')+'(<B>E+&amp;</B>, <B>E+é</B>, etc.).</font></td>');
WriteLn(F, '</tr>');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="193">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section3.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section3.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="161">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section3.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section3.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','GEN', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber4">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="256">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section4.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section4.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="216">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section4.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section4.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table></P>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','FEU', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="356" id="AutoNumber5">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="205">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section5.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section5.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="148">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section5.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section5.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table></P>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','RAD', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="356" id="AutoNumber6">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="206" bordercolor="#C0C0C0">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section6.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section6.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="147" bordercolor="#C0C0C0">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section6.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section6.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table></P>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','P_A', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="357" id="AutoNumber7">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="206">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section7.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section7.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '<td width="148">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section7.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section7.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td>');
WriteLn(F, '</tr>');
WriteLn(F, '</table></PRE>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','P_A', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber8">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="205">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section8.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section8.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '<td width="150">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section8.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section8.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td></tr>');
WriteLn(F, '</table></PRE>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','VUE', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber9">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="205"><PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section9.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section9.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '<td width="150">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section9.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section9.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td></tr> ');
WriteLn(F, '</table></P>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','PAN', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber10">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="204"><PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section10.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section10.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '<td width="151">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section10.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section10.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td></tr>');
WriteLn(F, '</table></PRE>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','MUL', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber9">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="205"><PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');  for i:=0 to Section11.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section11.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '<td width="150">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section11.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section11.Strings[i])));
  end;
WriteLn(F, '</tbody>');
WriteLn(F, '</table>');
WriteLn(F, '</p>');
WriteLn(F, '<P><font face="Arial" style="font-size: 9pt"><b>'+attrib.Readstring('Ch_Res','EXT', '')+'</b></font>');
WriteLn(F, '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="358" id="AutoNumber10">');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="355" colspan="2"><font face="Arial" style="font-size: 9pt">');
WriteLn(F, attrib.Readstring('Ch_Res','EXT_TXT', ''));
WriteLn(F, '</font></td></tr> ');
WriteLn(F, '<tr>');
WriteLn(F, '<td width="204"><PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt">');
  for i:=0 to Section12.Count-1 do
     begin
       WriteLn(F, (Gauche('=',Section12.Strings[i])));
  end;
WriteLn(F, '</font></PRE> ');
WriteLn(F, '</td>');
WriteLn(F, '<td width="151">');
WriteLn(F, '<PRE style="margin-top: 0; margin-bottom: 0"><font face="Arial" style="font-size: 9pt; font-weight:700">');
  for i:=0 to Section12.Count-1 do
     begin
       WriteLn(F, (Droite('=',Section12.Strings[i])));
  end;
WriteLn(F, '</font></PRE>');
WriteLn(F, '</td></tr>');
WriteLn(F, '</table></PRE>');
WriteLn(F, '<pre><font style="font-size: 9pt;" face="Arial">'+attrib.Readstring('Ch_Res','FIN', ''));
WriteLn(F, '</body>');
WriteLn(F, '</html>');
CloseFile(F);
ComList.Free;
ToucList.Free;
 end;


{=================================================================}
{                  fonction de lecture des touches                }
{=================================================================}

function LectTouch(Nom_Prof, Rfs9_cfg:string; cible: TlistView; Memo_Stock: TlistBox):string;
var  i: integer;
     i10: integer;
     Section1: TStringLIst;
     Section2: TStringLIst;
     Section3: TStringLIst;
     Section4: TStringLIst;
     Section5: TStringLIst;
     Section6: TStringLIst;
     Section7: TStringLIst;
     Section8: TStringLIst;
     Section9: TStringLIst;
     Section10:TStringLIst;
     Section11:TStringLIst;
     Section12:TStringLIst;
     SectionMark: integer;
     ComList: TStringlist;
     Touclist: TStringlist;
     toucheCPL: string;
     touche:string;
     toucheMod:String;
     UsrTouch:string;
     UsrTouchMod:string;
     UsrCom: string;
     INIFS9: TInifile;
     Sec_Prof: TstringList;

// fin variables lecture touche
begin
PRofIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
ComList:=  TStringList.Create;
ToucList:= TStringList.Create;
Section1:= TstringList.Create;
Section2:= TstringList.Create;
Section3:= TstringList.Create;
Section4:= TstringList.Create;
Section5:= TstringList.Create;
Section6:= TstringList.Create;
Section7:= TstringList.Create;
Section8:= TstringList.Create;
Section9:= TstringList.Create;
Section10:= TstringList.Create;
Section11:= TstringList.Create;
Section12:= TstringList.Create;
INIFS9:=TInifile.Create(Rfs9_cfg);
INIFS9.ReadSection('KEYBOARD_MAIN' ,ComList);
//AssignFile(F,(ExtractFilePath(Prog_bis)+'\Aircraft\kneeboard_keys.htm'));
attrib:=TInifile.Create(ExtractFilePath(Application.ExeName)+'lang\'+LangAttrib(LangManager.LanguageID)+'attrib.cfg');


//-------------------repartition des commandes...----------------//
  for i:=0 to ComList.Count-1 do
     begin
       toucheCPL:=INIFS9.ReadString('KEYBOARD_MAIN',Comlist.Strings[i], 'pas de touche attribuée');
       touche:=Gauche(',',toucheCPL);
       toucheMod:=Droite(',',toucheCPL);
       UsrTouch:=attrib.ReadString('TOUCHES',touche,'');
       UsrTouchMod:=attrib.ReadString('modificateur',toucheMod,'');
       UsrCom:=droite(';',attrib.ReadString('commandes',Comlist.Strings[i],''));
       if UsrCom <> '' then
       begin
       SectionMark:=strtoint(gauche(';',attrib.ReadString('commandes',Comlist.Strings[i],'')));
       case SectionMark of
       1:  Section1.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       2:  Section2.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       3:  Section3.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       4:  Section4.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       5:  Section5.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       6:  Section6.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       7:  Section7.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       8:  Section8.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       9:  Section9.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       10: Section10.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       11: Section11.Add(UsrCom+'='+UsrTouchMod+UsrTouch) ;
       end;
       end
       else begin
       Section12.Add(Comlist.Strings[i]+'='+UsrTouchMod+UsrTouch)
       end;
  end;
Section1.Sort;
Section2.Sort;
Section3.Sort;
Section4.Sort;
Section5.Sort;
Section6.Sort;
Section7.Sort;
Section8.Sort;
Section9.Sort;
Section10.Sort;
Section11.Sort;
Section12.Sort;

//////////////////////Ecriture du ListView//////////////////////////////


ListAjout := cible.Items.Insert(0);
ListAjout.Caption := attrib.Readstring('Ch_Res','SIM', '');
for i:=0 to Section1.Count-1 do
    begin
ListAjout := cible.Items.Insert(i+1);
ListAjout.Caption := (Gauche('=',Section1.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section1.Strings[i]));
    end;
i10:=section1.count+1;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','GOUV', '');
for i:=0 to Section2.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section2.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section2.Strings[i]));
    end;
i10:=i10+3+Section2.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','MOT', '');
for i:=0 to Section3.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section3.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section3.Strings[i]));
    end;
i10:=i10+3+Section3.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','GEN', '');
for i:=0 to Section4.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section4.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section4.Strings[i]));
    end;
i10:=i10+3+Section4.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','FEU', '');
for i:=0 to Section5.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section5.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section5.Strings[i]));
    end;
i10:=i10+3+Section5.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','RAD', '');
for i:=0 to Section6.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section6.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section6.Strings[i]));
    end;
i10:=i10+3+Section6.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','P_A', '');
for i:=0 to Section7.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section7.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section7.Strings[i]));
    end;
i10:=i10+3+Section7.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','INS', '');
for i:=0 to Section8.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section8.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section8.Strings[i]));
    end;
i10:=i10+3+Section8.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','VUE', '');
for i:=0 to Section9.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section9.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section9.Strings[i]));
    end;
i10:=i10+3+Section9.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','PAN', '');
for i:=0 to Section10.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section10.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section10.Strings[i]));
    end;
i10:=i10+3+Section10.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','MUL', '');
for i:=0 to Section11.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section11.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section11.Strings[i]));
    end;
i10:=i10+3+Section11.Count;
ListAjout := cible.Items.Insert(i10+1);
ListAjout.Caption := ('');
ListAjout := cible.Items.Insert(i10+2);
ListAjout.Caption := attrib.Readstring('Ch_Res','EXT', '');
for i:=0 to Section12.Count-1 do
    begin
ListAjout := cible.Items.Insert(i10+3+i);
ListAjout.Caption := (Gauche('=',Section12.Strings[i]));
ListAjout.SubItems.Add(Droite('=',Section12.Strings[i]));
    end;
/////////////////////////////////////////////////////////////////////////
//----------------lecture des liens supplémentaires--------------------//
sec_prof:=tstringlist.Create;
ProfIni.ReadSection(Nom_Prof, sec_prof);
NbrLien:=0;
for i:=0 to sec_prof.Count-1 do begin
for i10:=0 to sec_prof.Count-1 do begin
if sec_prof.Strings[i]='Lien'+inttostr(i10) then begin
Memo_stock.Items.add(droite(';', ProfIni.ReadString(Nom_Prof, sec_prof.Strings[i] ,'')));
NbrLien:=NbrLien+1
end;
end;
end;
//----------------fin lecture liens supp-------------------------------//
ComList.Free;
ToucList.Free;
sec_prof.Free;
end;



function IfChecked(LID: integer): boolean;
begin
if fileexists(ExtractFilePath(Application.ExeName)+'MultiConfig.ini') then
begin
MultIni:= TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
if MultIni.ValueExists('lang','langage') then
if strtoint(MultIni.ReadString('lang','langage', '1036'))=LID then
Result:=True
else Result:=False;
end
else if LID=1036 then Result:=True
else Result:=false;
MultIni.free;
end;


//-------------------------------Contenant principal---------------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

procedure TForm1.FormCreate(Sender:TObject);
var prog: String;
    Key_marc: string;
    i: integer;
    alphatri:tstringlist;
    suiveur: string;
    Timer: Integer;
    Tc: Cardinal;
begin
//chargement de l'icone
Form1.Icon.Handle:=LoadIcon(hInstance, ('progicon'));


for i := 0 to LangManager.LanguageCount-1 do
 //chargement du menu langage
 begin
   langue1.Add(NewItem(LangManager.LanguageNames[i],1,IfChecked(LangManager.LanguageIDs[i]),true,LangChange,1,'langue'+inttostr(2+i)));
 end;

//fin multilangage




//Chargement de l'image de fond
Image1.Picture.Bitmap.LoadFromResourceName(hInstance,'fond');

//on cache les pages visibles
for i := 0 to PageControl1.PageCount - 1 do
  PageControl1.Pages[i].TabVisible := False;
  PageControl1.ActivePageIndex := 0;

  //on défini la page visible suivant l'existence du fichier ini
  if not FileExists(ExtractFilePath(Application.ExeName)+'profils.ini') then
      begin
            Modifierunprofil1.Enabled:= false;
            PageControl1.ActivePageIndex := 0;
      end
      else begin
//mise à jour pour versions précédentes
   ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
   MultIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
   alphatri:=tstringlist.Create;
   PRofIni.ReadSections(alphatri);
   for i:=0 to alphatri.Count-1 do begin
      if not ProfIni.ValueExists(Alphatri.Strings[i],'CHEMIN')  then begin
            if (ProfIni.ReadString(Alphatri.Strings[i],'fichier1','')='fs9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier1','')='FS9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier1','')='FS9.CFG') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier1','')='fs9.CFG') then begin
            ProfIni.WriteString(Alphatri.Strings[i],'CHEMIN',ProfIni.ReadString(Alphatri.Strings[i],'fichier1',''))
            end
            else
            if (ProfIni.ReadString(Alphatri.Strings[i],'fichier2','')='fs9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier2','')='FS9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier2','')='FS9.CFG') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier2','')='fs9.CFG') then begin
            ProfIni.WriteString(Alphatri.Strings[i],'CHEMIN',ProfIni.ReadString(Alphatri.Strings[i],'fichier2',''))
            end
            else
            if (ProfIni.ReadString(Alphatri.Strings[i],'fichier3','')='fs9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier3','')='FS9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier3','')='FS9.CFG') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier3','')='fs9.CFG') then begin
            ProfIni.WriteString(Alphatri.Strings[i],'CHEMIN',ProfIni.ReadString(Alphatri.Strings[i],'fichier3',''))
            end
            else
            if (ProfIni.ReadString(Alphatri.Strings[i],'fichier4','')='fs9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier4','')='FS9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier4','')='FS9.CFG') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier4','')='fs9.CFG') then begin
            ProfIni.WriteString(Alphatri.Strings[i],'CHEMIN',ProfIni.ReadString(Alphatri.Strings[i],'fichier4',''))
            end
            else
            if (ProfIni.ReadString(Alphatri.Strings[i],'fichier5','')='fs9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier5','')='FS9.cfg') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier5','')='FS9.CFG') or (ProfIni.ReadString(Alphatri.Strings[i],'fichier5','')='fs9.CFG') then begin
            ProfIni.WriteString(Alphatri.Strings[i],'CHEMIN',ProfIni.ReadString(Alphatri.Strings[i],'fichier5',''))
            end;
      end;
      if not ProfIni.ValueExists(Alphatri.Strings[i],'Suivi')  then begin
            ProfIni.WriteString(Alphatri.Strings[i],'Suivi', '0');
      end;
      if not ProfIni.ValueExists(Alphatri.Strings[i],'DUREE')  then begin
             ProfIni.WriteString(Alphatri.Strings[i],'DUREE', '30000');
      end;       
      if not MultIni.ValueExists('PAGEKEY',Alphatri.Strings[i]) then begin
            MultIni.WriteString('PAGEKEY',Alphatri.Strings[i], '0')
      end;
   end;
//fin de mise à jour

            PageControl1.Pages[1].TabVisible := True;
            PageControl1.Pages[3].TabVisible := True;
            PageControl1.Pages[4].TabVisible := True;
            PageControl1.ActivePageIndex := 3;
            Modifierunprofil1.Enabled:= True;
            alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox2.Items:=alphatri;
//le INI existe, on teste si il y a paramètres en ligne de commande
        if  paramStr(1)<>'' then
          begin
            CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.1'), PChar(PRofIni.ReadString(paramStr(1), 'fichier1', '')), FALSE);
            CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.2'), PChar(PRofIni.ReadString(paramStr(1), 'fichier2', '')), FALSE);
            CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.3'), PChar(PRofIni.ReadString(paramStr(1), 'fichier3', '')), FALSE);
            CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.4'), PChar(PRofIni.ReadString(paramStr(1), 'fichier4', '')), FALSE);
            CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.5'), PChar(PRofIni.ReadString(paramStr(1), 'fichier5', '')), FALSE);

            ////////////////création Kneyboard_keys.htm//////////////////////////
            Key_marc:= MultIni.ReadString('PAGEKEY',paramStr(1),'');
            prog:= PRofIni.ReadString(paramStr(1), 'Application', '');
            if Key_marc='1' then
            fskneeboard(paramStr(1));
            Suiveur:= PRofIni.ReadString(paramStr(1), 'Suivi', '');

            // Démarrage avec suivi
            if Suiveur='1' then begin
            { Mise à zéro de la structure StartInfo }
              FillChar(StartInfo,SizeOf(StartInfo),#0);
            { Seule la taille est renseignée, toutes les autres options }
            { laissées à zéro prendront les valeurs par défaut }
            StartInfo.cb     := SizeOf(StartInfo);
            { Lancement de la ligne de commande }
            If CreateProcess(Nil, PAnsiChar(prog), Nil, Nil, False, 0, Nil, Nil, StartInfo,ProcessInfo) Then
                  Begin
                  { L'application est bien lancée, on va en attendre la fin }
                  { ProcessInfo.hProcess contient le handle du process principal de l'application }
                  AjouteIcone;
                  Form1.Hide;
                  Fin:=False;
                  FinApp:=1;
                    Repeat
                  { On attend la fin de l'application }
                  Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
                    WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
                    WAIT_TIMEOUT  :;          { elle n'est pas terminée, on continue d'attendre }
                  End;
                  { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
                  Application.ProcessMessages;
                  Until Fin;
                  case FinApp of
                  0: Application.terminate;
                  1: begin
                        //sauvegarde des fichiers du profil aprés fermeture de l'application
                        Timer:= strtoint(ProfIni.ReadString(paramStr(1), 'DUREE', '20000'));
                        Tc := GetTickCount;
                        repeat
                        Application.ProcessMessages;
                        until Cardinal(GetTickCount - Tc) > Timer;
                        CopyFile(PChar(PRofIni.ReadString(paramStr(1), 'fichier1', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.1'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(paramStr(1), 'fichier2', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.2'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(paramStr(1), 'fichier3', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.3'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(paramStr(1), 'fichier4', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.4'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(paramStr(1), 'fichier5', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+paramStr(1)+'_fichier.5'),FALSE);
                        Form1.Show;
                        SupprimeIcone;
                        showmessage(paramStr(1)+': maintenance complete');
                     end;
                  2: begin
                  showmessage('abandon');
                  Form1.Show;
                  SupprimeIcone;
                  end;
                  end;
                  End
                  Else RaiseLastOSError;
            end
            else begin
            CreateProcess(Nil,PAnsiChar(prog),Nil,Nil,False,0,Nil,Nil,StartInfo,ProcessInfo);
            if   paramStr(2) = 'fin' then
              begin
              Application.terminate;
              end;
            end;
         end;
  end;
end;


// Procédure pour changement de langage
procedure TForm1.LangChange(Sender: TObject);
var i: integer;
begin
MultIni:= TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
for i:=0 to Langue1.Count-1 do
Langue1.Items[i].Checked:= False;
TMenuItem(Sender).checked:=true;
LangManager.LanguageID:= LangManager.LanguageIDs[TMenuItem(Sender).menuIndex];
MultIni.WriteString('lang', 'langage', inttostr(LangManager.LanguageID));
end;
// Fin procédure changement de langage



/////////////////////////////////Gestion des changements d'onglets//////////////////
////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.PageControl1Change(Sender: TObject);
var
  {Registre: TRegistry; }
  i: integer;
  alphatri:tstringlist;
begin
if   PageControl1.ActivePageIndex = 4 then
begin
PRofIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
            alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox1.Items:=alphatri;
ComboBox1.Text:='...';
     Edit9.Text:='';
     Edit10.Text:='';
     Edit11.Text:='';
     Edit12.Text:='';
     Edit13.Text:='';
ProfIni.Free;
end;
if   PageControl1.ActivePageIndex = 3 then
begin
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
            alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox2.Items:=alphatri;
ComboBox2.Text:='...';
     Edit15.Text:='';
     Edit16.Text:='';
     Edit17.Text:='';
     Edit18.Text:='';
     Edit19.Text:='';
  Label12.Visible:=false;
  Label24.Visible:=false;
  Label13.Caption:='';
  Label29.Caption:='';
  Label14.Visible:=false;
  Label25.Visible:=false;
  Label18.Caption:='';
  Label30.Caption:='';
  Label15.Visible:=false;
  Label26.Visible:=false;
  Label19.Caption:='';
  Label31.Caption:='';
  Label16.Visible:=false;
  Label27.Visible:=false;
  Label20.Caption:='';
  Label32.Caption:='';
  Label17.Visible:=false;
  Label28.Visible:=false;
  Label21.Caption:='';
  Label33.Caption:='';
  ProfIni.Free;
end;
if PageControl1.ActivePageIndex = 1 then
begin
  {Registre := TRegistry.Create;
  Registre.RootKey := HKEY_LOCAL_MACHINE;
  if Registre.KeyExists('\Software\Microsoft\Microsoft Games\Flight Simulator\9.0')
  then
  begin
  Registre.OpenKey('\Software\Microsoft\Microsoft Games\Flight Simulator\9.0', False);
  Edit2.Text:= Registre.ReadString('EXE PATH')+'\FS9.EXE';
  if (WindowsVersion='Microsoft Windows 2000') or (WindowsVersion='Microsoft Windows XP')  or (WindowsVersion='Microsoft Windows Server 2003') then
  Edit3.Text:='C:\Documents and Settings\'+UserName+'\Application Data\Microsoft\FS9\fs9.CFG';
  Edit3.SelStart:= 1000;
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit3.Text;
  end;
  Registre.CloseKey;
  Registre.Free;}
  if Fileexists(ExtractFilePath(Application.ExeName)+'profils.ini') then
    begin
    Section:= TstringList.Create;
    Section.LoadFromFile(ExtractFilePath(Application.ExeName)+'profils.ini');
     for i:=0 to Section.count-1 do
      if Section.Strings[i]='Application='+Edit2.Text then
      begin
      Label22.Visible:=true;
      CheckBox1.Visible:=True;
      end;
    end;
end;
end;





//------------------------------Barre de menu----------------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Configurerunnouveauprofil1Click(Sender: TObject);
begin
   PageControl1.ActivePageIndex := 1;
end;

procedure TForm1.Modifierunprofil1Click(Sender: TObject);
var alphatri:tstringlist;
begin
       PageControl1.ActivePageIndex := 4;
                   alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox1.Items:=alphatri;
end;

procedure TForm1.Quitterleprogramme1Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.AidedeFSMultiConfig1Click(Sender: TObject);
begin
ShellExecute(GetDesktopWindow,'open',PChar(ExtractFilePath(Application.ExeName)+'help\'+LangAttrib(LangManager.LanguageID)+'hlp.pdf'),nil,nil,SW_MAXIMIZE);
end;

procedure TForm1.AproposdeFSMultiConfig1Click(Sender: TObject);
begin
    AboutBox.Show;
end;

//popup

procedure TForm1.QuitterItemClick(Sender: TObject);
begin
  // Quitter l'application
  FinApp:=0;
  Fin:= true;
end;

procedure TForm1.RestaurerItemClick(Sender: TObject);
begin
  // Restaurer l'application
  FinApp:=2;
  Fin:= true;
end;


//------------------------------page Fonctionnement du programme -------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
  {Registre: TRegistry;}
  i: integer;
begin
  {Registre := TRegistry.Create;
  Registre.RootKey := HKEY_LOCAL_MACHINE;
  if Registre.KeyExists('\Software\Microsoft\Microsoft Games\Flight Simulator\9.0')
  then
  begin
  Registre.OpenKey('\Software\Microsoft\Microsoft Games\Flight Simulator\9.0', False);
  Edit2.Text:= Registre.ReadString('EXE PATH')+'\FS9.EXE';
  if (WindowsVersion='Microsoft Windows 2000') or (WindowsVersion='Microsoft Windows XP')  or (WindowsVersion='Microsoft Windows Server 2003') then
  Edit3.Text:='C:\Documents and Settings\'+UserName+'\Application Data\Microsoft\FS9\fs9.CFG';
  Edit3.SelStart:= 1000;
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit3.Text;
  end;
  Registre.CloseKey;
  Registre.Free; }
  if Fileexists(ExtractFilePath(Application.ExeName)+'profils.ini') then
    begin
    Section:= TstringList.Create;
    Section.LoadFromFile(ExtractFilePath(Application.ExeName)+'profils.ini');
     for i:=0 to Section.count-1 do
      if Section.Strings[i]='Application='+Edit2.Text then
      begin
      Label22.Visible:=true;
      CheckBox1.Visible:=True;
      end;
    end;
  GoNext;
end;


//------------------------------Page nouveau profil-----------------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button2Click(Sender: TObject);
begin
      E3:=0;
      E4:=0;
      E5:=0;
      E6:=0;
      E7:=0;
{}//vérification du remplissage du cadre de texte nom de profil
{}   if Edit1.Text<>''then
{}    begin
{}{}//testExe: teste si l'application est en EXE
{}{}      if (ExtractFileExt(Edit2.Text)='.exe')or (ExtractFileExt(Edit2.Text)='.EXE') then
{}{}      begin
{}{}{}//récupération des fichiers si un profil
{}{}{}//a été défini pour l'application selectionnée
{}{}{}//La liste restera telle quel (non modifiable) sauf si checkbox est checked }
{}{}{}        if  FileExists(ExtractFilePath(Application.ExeName)+'Multiconfig.ini') then
{}{}{}          begin
{}{}{}          Section:= TstringList.Create;
{}{}{}          MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'Multiconfig.ini');
{}{}{}          ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'Profils.ini');
{}{}{}{}          if MultIni.SectionExists(Edit2.Text) then
{}{}{}{}              begin
{}{}{}{}              MultIni.ReadSection(Edit2.Text,Section);
{}{}{}{}              if ProfIni.ValueExists(Section.Strings[0],'fichier1') then
{}{}{}{}                begin
{}{}{}{}                Edit3.Text:=ProfIni.ReadString(Section.Strings[0],'fichier1','');
{}{}{}{}                E3:=1;
{}{}{}{}                end;
{}{}{}{}                if (ExtractFileName(Edit3.Text)='fs9.cfg') or (ExtractFileName(Edit3.Text)='FS9.cfg') or (ExtractFileName(Edit3.Text)='fs9.CFG') or (ExtractFileName(Edit3.Text)='FS9.CFG') then
{}{}{}{}                  begin
{}{}{}{}                  GroupBox14.Visible:=true;
{}{}{}{}                  fs9_cfg:=Edit3.Text;
{}{}{}{}                  end ;
{}{}{}{}              if ProfIni.ValueExists(Section.Strings[0],'fichier2') then
{}{}{}{}                begin
{}{}{}{}                Edit4.Text:=ProfIni.ReadString(Section.Strings[0],'fichier2','');
{}{}{}{}                E4:=1;
{}{}{}{}                end;
{}{}{}{}              if (ExtractFileName(Edit4.Text)='fs9.cfg') or (ExtractFileName(Edit4.Text)='FS9.cfg') or (ExtractFileName(Edit4.Text)='fs9.CFG') or (ExtractFileName(Edit4.Text)='FS9.CFG') then
{}{}{}{}                begin
{}{}{}{}                GroupBox14.Visible:=true;
{}{}{}{}                fs9_cfg:=Edit4.Text;
{}{}{}{}                end ;
{}{}{}{}              if ProfIni.ValueExists(Section.Strings[0],'fichier3') then
{}{}{}{}                begin
{}{}{}{}                Edit5.Text:=ProfIni.ReadString(Section.Strings[0],'fichier3','');
{}{}{}{}                E5:=1;
{}{}{}{}                end;
{}{}{}{}              if (ExtractFileName(Edit5.Text)='fs9.cfg') or (ExtractFileName(Edit5.Text)='FS9.cfg') or (ExtractFileName(Edit5.Text)='fs9.CFG') or (ExtractFileName(Edit5.Text)='FS9.CFG') then
{}{}{}{}                begin
{}{}{}{}                GroupBox14.Visible:=true;
{}{}{}{}                fs9_cfg:=Edit5.Text;
{}{}{}{}                end;
{}{}{}{}              if ProfIni.ValueExists(Section.Strings[0],'fichier4') then
{}{}{}{}                begin
{}{}{}{}                Edit6.Text:=ProfIni.ReadString(Section.Strings[0],'fichier4','');
{}{}{}{}                E6:=1;
{}{}{}{}                end;
{}{}{}{}              if (ExtractFileName(Edit6.Text)='fs9.cfg') or (ExtractFileName(Edit6.Text)='FS9.cfg') or (ExtractFileName(Edit6.Text)='fs9.CFG') or (ExtractFileName(Edit6.Text)='FS9.CFG') then
{}{}{}{}                begin
{}{}{}{}                GroupBox14.Visible:=true;
{}{}{}{}                fs9_cfg:=Edit6.Text;
{}{}{}{}                end;
{}{}{}{}              if ProfIni.ValueExists(Section.Strings[0],'fichier5') then
{}{}{}{}                begin
{}{}{}{}                Edit7.Text:=ProfIni.ReadString(Section.Strings[0],'fichier5','');
{}{}{}{}                E7:=1;
{}{}{}{}                end;
{}{}{}{}              if (ExtractFileName(Edit7.Text)='fs9.cfg') or (ExtractFileName(Edit7.Text)='FS9.cfg') or (ExtractFileName(Edit7.Text)='fs9.CFG') or (ExtractFileName(Edit7.Text)='FS9.CFG') then
{}{}{}{}                begin
{}{}{}{}                GroupBox14.Visible:=true;
{}{}{}{}                fs9_cfg:=Edit7.Text;
{}{}{}{}                end;
{}{}{}{}              if CheckBox1.checked=false then
{}{}{}{}                begin
{}{}{}{}                Edit3.ReadOnly:=True;
{}{}{}{}                Button8.Enabled:=false;
{}{}{}{}                Edit4.ReadOnly:=True;
{}{}{}{}                Button9.Enabled:=false;
{}{}{}{}                Edit5.ReadOnly:=True;
{}{}{}{}                Button10.Enabled:=false;
{}{}{}{}                Edit6.ReadOnly:=True;
{}{}{}{}                Button11.Enabled:=false;
{}{}{}{}                Edit7.ReadOnly:=True;
{}{}{}{}                Button12.Enabled:=false;
{}{}{}{}                end;
{}{}{}{}              end;//fin testappli
{}{}{}          end;
{}{}     section.Free;
{}{}     MultIni.Free;
{}{}     ProfIni.Free;
{}{}     GoNext;
{}{}     end//Fin testExe: teste si l'application est en EXE
{}      else //testExe faux
{}      Form3.Show;
{}      Form3.Label1.visible:= true;
{}//Fin vérification du remplissage du cadre de texte nom de profil
{}end
else//testNomProfil faux
Form3.Show;
Form3.Label2.visible:= true;

end;

procedure TForm1.Button7Click(Sender: TObject);
var i : integer;
begin
  if  OpenDialog2.Execute then
    Edit2.Text:=OpenDialog2.FileName;
if Fileexists(ExtractFilePath(Application.ExeName)+'profils.ini') then
    begin
    Section:= TstringList.Create;
    Section.LoadFromFile(ExtractFilePath(Application.ExeName)+'profils.ini');
     for i:=0 to Section.count-1 do
      if Section.Strings[i]='Application='+Edit2.Text then
      begin
      Label22.Visible:=true;
      CheckBox1.Visible:=True;
      end;
end
else
    checkBox1.Checked:= true;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
GoPrev
end;

//-----------------------------Page fichiers du profil-----------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button3Click(Sender: TObject);
var     i: integer;
        alphatri: tstringlist;
        Timer: integer;
begin
MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
PRofIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
//Ecriture du marquage de coordination
if checkBox1.Checked=false then
begin
MultIni.WriteString(Edit2.Text,Edit1.Text,Edit1.Text);
end;
if CheckBox4.Checked=True then ProfIni.WriteString(Edit1.Text,'Suivi','1')
else  ProfIni.WriteString(Edit1.Text,'Suivi','1');
// création du répertoire "fichier"
  if not DirectoryExists(ExtractFilePath(Application.ExeName)+'\fichiers') then
  if not CreateDir(ExtractFilePath(Application.ExeName)+'\fichiers') then
    raise Exception.Create(ExtractFilePath(Application.ExeName)+'\fichiers');

// Ecriture du fichier INI
PRofIni.WriteString(Edit1.Text, 'Application', Edit2.Text);
PRofIni.WriteString(Edit1.Text, 'fichier1', Edit3.Text);
if  E4=1 then
PRofIni.WriteString(Edit1.Text, 'fichier2', Edit4.Text);
if  E5=1 then
PRofIni.WriteString(Edit1.Text, 'fichier3', Edit5.Text);
if  E6=1 then
PRofIni.WriteString(Edit1.Text, 'fichier4', Edit6.Text);
if  E7=1 then
PRofIni.WriteString(Edit1.Text, 'fichier5', Edit7.Text);

//ecriture du chemin du cfg pour génération du fichier kneeboard_keys.htm
PRofIni.WriteString(Edit1.Text, 'CHEMIN', fs9_cfg);
//Fin

//Ecriture de la durée d'attente du programme
if Edit20.Text = '' then Timer:=0
else begin
Timer:= strtoint(Edit20.Text);
Timer:= Timer*1000;
end;
ProfIni.WriteString(Edit1.Text, 'DUREE', inttostr(Timer));
//fin

//*copie des fichiers pour le profil
    CopyFile(PChar(Edit3.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.1'), FALSE);
    CopyFile(PChar(Edit4.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.2'), FALSE);
    CopyFile(PChar(Edit5.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.3'), FALSE);
    CopyFile(PChar(Edit6.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.4'), FALSE);
    CopyFile(PChar(Edit7.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.5'), FALSE);

//On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  ExtractFileExt(Edit3.Text)='.cfg' then
    begin
     adr:=ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.1';
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(adr);
     for i:=0 to contenufichier.count-10 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            contenufichier.Delete(i);
            end;
        end;
     contenufichier.Add('[MultiConfig_'+Edit1.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.1');
     end;

    if  ExtractFileExt(Edit4.Text)='.cfg' then
    begin
     adr:=ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.2';
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(adr);
     for i:=0 to contenufichier.count-10 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            contenufichier.Delete(i);
            end;
        end;
     contenufichier.Add('[MultiConfig_'+Edit1.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.2');
     end;

    if  ExtractFileExt(Edit5.Text)='.cfg' then
    begin
     adr:=ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.3';
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(adr);
     for i:=0 to contenufichier.count-10 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            contenufichier.Delete(i);
            end;
        end;
     contenufichier.Add('[MultiConfig_'+Edit1.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.3');
     end;

    if  ExtractFileExt(Edit6.Text)='.cfg' then
    begin
     adr:=ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.4';
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(adr);
     for i:=0 to contenufichier.count-10 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            contenufichier.Delete(i);
            end;
        end;
     contenufichier.Add('[MultiConfig_'+Edit1.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.4');
     end;

    if  ExtractFileExt(Edit7.Text)='.cfg' then
    begin
     adr:=ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.5';
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(adr);
     for i:=0 to contenufichier.count-10 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            contenufichier.Delete(i);
            end;
        end;
     contenufichier.Add('[MultiConfig_'+Edit1.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit1.Text+'_fichier.5');
     contenufichier.Free;
     end;

//Générer le fichier contenant la liste complète des touches pour le profil
if  CheckBox2.Checked=true then
begin
           //écriture du ini pour la création du fichier
           MultIni.WriteString('PAGEKEY',Edit1.Text, '1');
           //sauvegarde du fichier original
           if not FileExists(ExtractFilePath(Edit2.Text)+'Aircraft\MultiConfig_original_kneeboard_keys.htm') then
           CopyFile(PChar(ExtractFilePath(Edit2.Text)+'Aircraft\kneeboard_keys.htm'),PChar(ExtractFilePath(Edit2.Text)+'Aircraft\MultiConfig_original_kneeboard_keys.htm'), FALSE);
end
else
begin
MultIni.WriteString('PAGEKEY',Edit1.Text, '0');
end;
Edit1.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Edit6.Text:='';
Edit7.Text:='';
CheckBox1.Checked:=False;
CheckBox2.Checked:=False;
//* activer la page qui apparaitra à l'écran
    PageControl1.Pages[1].TabVisible := True;
    PageControl1.Pages[3].TabVisible := True;
    PageControl1.Pages[4].TabVisible := True;
    PageControl1.ActivePageIndex := 3;
    alphatri:=tstringlist.Create;
    PRofIni.ReadSections(alphatri);
    Alphatri.Sort;
    ComboBox2.Items:=alphatri;
    Modifierunprofil1.Enabled:= True;
    MultIni.Free;
    PRofIni.Free;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  Edit3.Text:=OpenDialog1.FileName;
  E3:=1;
  if (ExtractFileName(Edit3.Text)='fs9.cfg') or (ExtractFileName(Edit3.Text)='FS9.cfg') or (ExtractFileName(Edit3.Text)='FS9.CFG') or (ExtractFileName(Edit3.Text)='fs9.CFG')then
begin
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit3.Text;
  end
  end;
  end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  Edit4.Text:=OpenDialog1.FileName;
  if (ExtractFileName(Edit4.Text)='fs9.cfg') or (ExtractFileName(Edit4.Text)='FS9.cfg') or (ExtractFileName(Edit4.Text)='FS9.CFG') or (ExtractFileName(Edit4.Text)='fs9.CFG') then
begin
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit4.Text;
  end;
  E4:=1;
  end;
  end;

procedure TForm1.Button10Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  Edit5.Text:=OpenDialog1.FileName;
  if (ExtractFileName(Edit5.Text)='fs9.cfg') or (ExtractFileName(Edit5.Text)='FS9.cfg') or (ExtractFileName(Edit5.Text)='FS9.CFG') or (ExtractFileName(Edit5.Text)='fs9.CFG')then
begin
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit5.Text;
  end;
  E5:=1;
  end;
  end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  Edit7.Text:=OpenDialog1.FileName;
  if (ExtractFileName(Edit7.Text)='fs9.cfg') or (ExtractFileName(Edit7.Text)='FS9.cfg') or (ExtractFileName(Edit7.Text)='FS9.CFG') or (ExtractFileName(Edit7.Text)='fs9.CFG')then
begin
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit7.Text;
  end;
  E6:=1;
  end;
  end;

procedure TForm1.Button12Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  Edit6.Text:=OpenDialog1.FileName;
  if (ExtractFileName(Edit6.Text)='fs9.cfg') or (ExtractFileName(Edit6.Text)='FS9.cfg') or (ExtractFileName(Edit6.Text)='FS9.CFG') or (ExtractFileName(Edit6.Text)='fs9.CFG')then
begin
  GroupBox14.Visible:=true;
  fs9_cfg:=Edit6.Text;
  end;
  E7:=1;
  end;
  end;

procedure TForm1.Button13Click(Sender: TObject);
begin
 GoPrev
end;

procedure TForm1.Button36Click(Sender: TObject);
var i:integer;
begin
LectTouch(Edit1.Text, fs9_cfg ,ListView1, ListBox1);
Button38.Visible:=true;
//on cache les pages visibles
for i := 0 to PageControl1.PageCount - 1 do
  PageControl1.Pages[i].TabVisible := False;
PageControl1.ActivePageIndex := 5; 
end;

//-----------------------------page Courant-----------------------------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//------------------Liste déroulante
procedure TForm1.ComboBox2Change(Sender: TObject);
var     i: integer;
begin
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
  if  PRofIni.ValueExists(ComboBox2.Text, 'fichier1') then
  begin
  Edit15.Text:= PRofIni.ReadString(ComboBox2.Text, 'fichier1', '');
  Label12.Visible:=true;
  Label24.Visible:=true;
  Label13.Caption:=DateToStr(DateHeureCreationFichier1(Edit15.Text));
  Label29.Caption:=TimeToStr(DateHeureCreationFichier1(Edit15.Text));
  end;

  if  PRofIni.ValueExists(ComboBox2.Text, 'fichier2') then
  begin
  Edit16.Text:= PRofIni.ReadString(ComboBox2.Text, 'fichier2', '');
  Label14.Visible:=true;
  Label25.Visible:=true;
  Label18.Caption:=DateToStr(DateHeureCreationFichier1(Edit16.Text));
  Label30.Caption:=TimeToStr(DateHeureCreationFichier1(Edit16.Text));
  end;

  if  PRofIni.ValueExists(ComboBox2.Text, 'fichier3') then
  begin
  Edit17.Text:= PRofIni.ReadString(ComboBox2.Text, 'fichier3', '');
  Label15.Visible:=true;
  Label26.Visible:=true;
  Label19.Caption:=DateToStr(DateHeureCreationFichier1(Edit17.Text));
  Label31.Caption:=TimeToStr(DateHeureCreationFichier1(Edit17.Text));
  end;

  if  PRofIni.ValueExists(ComboBox2.Text, 'fichier4') then
  begin
  Edit18.Text:= PRofIni.ReadString(ComboBox2.Text, 'fichier4', '');
  Label16.Visible:=true;
  Label27.Visible:=true;
  Label20.Caption:=DateToStr(DateHeureCreationFichier1(Edit18.Text));
  Label32.Caption:=TimeToStr(DateHeureCreationFichier1(Edit18.Text));
  end;

  if  PRofIni.ValueExists(ComboBox2.Text, 'fichier5') then
  begin
  Edit19.Text:= PRofIni.ReadString(ComboBox2.Text, 'fichier5', '');
  Label17.Visible:=true;
  Label28.Visible:=true;
  Label21.Caption:=DateToStr(DateHeureCreationFichier1(Edit19.Text));
  Label33.Caption:=TimeToStr(DateHeureCreationFichier1(Edit19.Text));
  end;


// test fichier 1 pour trouver la référence du profil
    if  (ExtractFileExt(Edit15.Text)='.cfg') or (ExtractFileExt(Edit15.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit15.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            Button45.Visible:=true;
            end;
         end;
     end;
//test fichier 2 si pas de profil chargé
if (Label23.Caption='') or (Label23.Caption='Aucun') then
  begin
    if  (ExtractFileExt(Edit16.Text)='.cfg') or (ExtractFileExt(Edit16.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit16.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            Button45.Visible:=true;
            end;
         end;
     end;
  end;

//test fichier 3 si pas de profil chargé
if (Label23.Caption='') or (Label23.Caption='Aucun') then
  begin
    if  (ExtractFileExt(Edit17.Text)='.cfg') or (ExtractFileExt(Edit17.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit17.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
end;

//test fichier 4 si pas de profil chargé
if (Label23.Caption='') or (Label23.Caption='Aucun') then
  begin
    if  (ExtractFileExt(Edit18.Text)='.cfg') or (ExtractFileExt(Edit18.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit18.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
  end;

//test fichier 5 si pas de profil chargé
if (Label23.Caption='') or (Label23.Caption='Aucun') then
  begin
    if  (ExtractFileExt(Edit19.Text)='.cfg') or (ExtractFileExt(Edit19.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit19.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
  end;
// finalement, s'il n'y a pas de profil de chargé, on affiche 'aucun profil'
if Label23.Caption='' then
begin
   Label23.Caption:='...';
   button45.Visible:=false;
   end;
if (ExtractFileName(Edit15.Text)='fs9.cfg') or (ExtractFileName(Edit15.Text)='FS9.cfg') or (ExtractFileName(Edit15.Text)='fs9.CFG') or (ExtractFileName(Edit15.Text)='FS9.CFG') then
begin
GroupBox10.Visible:=true;
fs9_cfg:=Edit15.Text;
end
else
if (ExtractFileName(Edit16.Text)='fs9.cfg') or (ExtractFileName(Edit16.Text)='FS9.cfg') or (ExtractFileName(Edit16.Text)='fs9.CFG') or (ExtractFileName(Edit16.Text)='FS9.CFG') then
begin
GroupBox10.Visible:=true;
fs9_cfg:=Edit16.Text;
end
else
if (ExtractFileName(Edit17.Text)='fs9.cfg') or (ExtractFileName(Edit17.Text)='FS9.cfg') or (ExtractFileName(Edit17.Text)='fs9.CFG') or (ExtractFileName(Edit17.Text)='FS9.CFG') then
begin
GroupBox10.Visible:=true;
fs9_cfg:=Edit17.Text;
end
else
if (ExtractFileName(Edit18.Text)='fs9.cfg') or (ExtractFileName(Edit18.Text)='FS9.cfg') or (ExtractFileName(Edit18.Text)='fs9.CFG') or (ExtractFileName(Edit18.Text)='FS9.CFG') then
begin
GroupBox10.Visible:=true;
fs9_cfg:=Edit18.Text;
end
else
if (ExtractFileName(Edit19.Text)='fs9.cfg') or (ExtractFileName(Edit19.Text)='FS9.cfg') or (ExtractFileName(Edit19.Text)='fs9.CFG') or (ExtractFileName(Edit19.Text)='FS9.CFG') then
begin
GroupBox10.Visible:=true;
fs9_cfg:=Edit19.Text;
end;
if not ProfIni.ValueExists(ComboBox2.Text,'CHEMIN') then ProfIni.WriteString(ComboBox2.Text,'CHEMIN', fs9_cfg);
  Edit15.SelStart:= 1000;
  Edit16.SelStart:= 1000;
  Edit17.SelStart:= 1000;
  Edit18.SelStart:= 1000;
  Edit19.SelStart:= 1000;
  if ProfIni.ReadString(ComboBox2.Text,'Suivi','')='1' then
  RadioButton1.Visible:= false
  else
  RadioButton1.Visible:= true;
  ProfIni.Free;
end;

//-----------------bouton fermer

procedure TForm1.Button6Click(Sender: TObject);
begin
  Application.Terminate;
end;

//----------------boutons copier

procedure TForm1.Button22Click(Sender: TObject);
var     i: integer;
begin
if CopyFile(PChar(Edit15.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'), FALSE) then
  begin
  //On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  (ExtractFileExt(Edit15.Text)='.cfg') or (ExtractFileExt(Edit15.Text)='.CFG') then
       begin
        marque:=-1;
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit15.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
         if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
        contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
        contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1');
        contenufichier.Free;
       end;
   Form3.Show;
   Form3.Label3.visible:= true;
  end;
end;

procedure TForm1.Button23Click(Sender: TObject);
var     i: integer;
begin
if CopyFile(PChar(Edit16.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'), FALSE)
then
  begin
  //On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  (ExtractFileExt(Edit16.Text)='.cfg') or (ExtractFileExt(Edit16.Text)='.CFG') then
    begin
    showmessage('pouet');
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit16.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2');
     contenufichier.Free;
     end;
   Form3.Show;
   Form3.Label3.visible:= true;
 end;
end;

procedure TForm1.Button24Click(Sender: TObject);
var     i: integer;
begin
if CopyFile(PChar(Edit17.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'), FALSE)
then
  begin
  //On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  (ExtractFileExt(Edit17.Text)='.cfg') or (ExtractFileExt(Edit17.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit17.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3');
      contenufichier.Free;
     end;
   Form3.Show;
   Form3.Label3.visible:= true;
 end;
end;

procedure TForm1.Button25Click(Sender: TObject);
var     i: integer;
begin
if CopyFile(PChar(Edit18.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'), FALSE)
then
  begin
  //On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  (ExtractFileExt(Edit18.Text)='.cfg') or (ExtractFileExt(Edit18.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit18.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4');
      contenufichier.Free;
     end;
   Form3.Show;
   Form3.Label3.visible:= true;
 end;
end;

procedure TForm1.Button26Click(Sender: TObject);
var     i: integer;
begin
if CopyFile(PChar(Edit19.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'), FALSE)
then
  begin
  //On enlève la référence du profil dans les fichiers CFG  si elle existe
    if  (ExtractFileExt(Edit19.Text)='.cfg') or (ExtractFileExt(Edit19.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit19.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5');
      contenufichier.Free;
     end;
   Form3.Show;
   Form3.Label3.visible:= true;

 end;
 end;

procedure TForm1.Button32Click(Sender: TObject);
var     i: integer;
begin
    CopyFile(PChar(Edit15.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'), FALSE);
    CopyFile(PChar(Edit16.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'), FALSE);
    CopyFile(PChar(Edit17.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'), FALSE);
    CopyFile(PChar(Edit18.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'), FALSE);
    CopyFile(PChar(Edit19.Text),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'), FALSE);
    if  (ExtractFileExt(Edit15.Text)='.cfg') or (ExtractFileExt(Edit15.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit15.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1');
     contenufichier.Free;
     end;
    if  (ExtractFileExt(Edit16.Text)='.cfg') or (ExtractFileExt(Edit16.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit16.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2');
      contenufichier.Free;
     end;
    if  (ExtractFileExt(Edit17.Text)='.cfg') or (ExtractFileExt(Edit17.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit17.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3');
      contenufichier.Free;
     end;
    if  (ExtractFileExt(Edit18.Text)='.cfg') or (ExtractFileExt(Edit18.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit18.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4');
      contenufichier.Free;
     end;
    if  (ExtractFileExt(Edit19.Text)='.cfg') or (ExtractFileExt(Edit19.Text)='.CFG') then
    begin
     contenufichier:= TstringList.Create;
     contenufichier.LoadFromFile(Edit19.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            marque:=i
            end;
         end;
        if marque<>-1 then contenufichier.Delete(marque);
     contenufichier.Add('[MultiConfig_'+ComboBox2.Text+']');
     contenufichier.SaveToFile(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5');
      contenufichier.Free;
     end;

   Form3.Show;
   Form3.Label4.visible:= true;
end;

//-----------boutons replacer

procedure TForm1.Button27Click(Sender: TObject);
var i:integer;
begin
   if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'),PChar(Edit15.Text),FALSE)
   then
   begin
   Form3.Show;
   Form3.Label5.visible:= true;
   end;
// test fichier 1 pour trouver la référence du profil
    if  (ExtractFileExt(Edit15.Text)='.cfg') or (ExtractFileExt(Edit15.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit15.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
end;

procedure TForm1.Button28Click(Sender: TObject);
var i:integer;
begin
   if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'),PChar(Edit16.Text),FALSE)
   then
   begin
   Form3.Show;
   Form3.Label5.visible:= true;
   end;
    if  (ExtractFileExt(Edit16.Text)='.cfg') or (ExtractFileExt(Edit16.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit16.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
  end;
end;

procedure TForm1.Button29Click(Sender: TObject);
var i:integer;
begin
   if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'),PChar(Edit17.Text),FALSE)
   then
   begin
   Form3.Show;
   Form3.Label5.visible:= true;
   end;
    if  (ExtractFileExt(Edit17.Text)='.cfg') or (ExtractFileExt(Edit17.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit17.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;

end;

procedure TForm1.Button30Click(Sender: TObject);
var i:integer;
begin
   if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'),PChar(Edit18.Text),FALSE)
   then
   begin
   Form3.Show;
   Form3.Label5.visible:= true;
   end;
    if  (ExtractFileExt(Edit18.Text)='.cfg') or (ExtractFileExt(Edit18.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit18.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
end;

procedure TForm1.Button31Click(Sender: TObject);
var i:integer;
begin
   if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'),PChar(Edit19.Text),FALSE)
   then
   begin
   Form3.Show;
   Form3.Label5.visible:= true;
   end;
    if  (ExtractFileExt(Edit19.Text)='.cfg') or (ExtractFileExt(Edit19.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit19.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
end;

procedure TForm1.Button33Click(Sender: TObject);
var i:integer;
begin
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'),PChar(Edit15.Text),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'),PChar(Edit16.Text),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'),PChar(Edit17.Text),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'),PChar(Edit18.Text),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'),PChar(Edit19.Text),FALSE);
// test fichier 1 pour trouver la référence du profil
    if  (ExtractFileExt(Edit15.Text)='.cfg') or (ExtractFileExt(Edit15.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit15.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
    if  (ExtractFileExt(Edit16.Text)='.cfg') or (ExtractFileExt(Edit16.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit16.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
    if  (ExtractFileExt(Edit17.Text)='.cfg') or (ExtractFileExt(Edit17.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit17.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;

    if  (ExtractFileExt(Edit18.Text)='.cfg') or (ExtractFileExt(Edit18.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit18.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
    if  (ExtractFileExt(Edit19.Text)='.cfg') or (ExtractFileExt(Edit19.Text)='.CFG') then
      begin
        contenufichier:= TstringList.Create;
        contenufichier.LoadFromFile(Edit19.Text);
        for i:=0 to contenufichier.count-1 do
        begin
        ligne:= contenufichier.Strings[i];
           if Pos('[MultiConfig_',ligne)=1 then
            begin
            Label23.Caption:=Gauche(']',Droite('[MultiConfig_',ligne));
            button45.Visible:=true;
            end;
         end;
     end;
    Form3.Show;
    Form3.Label6.visible:= true;
    contenufichier.Free;
end;

//----------bouton lancer l'application
procedure TForm1.Button5Click(Sender: TObject);
var prog: string;
    Key_marc: string;
    suiveur: string;
    Timer: integer;
    Tc: Cardinal;
begin
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');

    //copie des fichiers du profil dans les dossiers de l'application
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'),PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier1', '')),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'),PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier2', '')),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'),PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier3', '')),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'),PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier4', '')),FALSE);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'),PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier5', '')),FALSE);


// appel de la fonction fskneeboard
Key_marc:= MultIni.ReadString('PAGEKEY',ComboBox2.Text,'');
if Key_marc='1' then
    fskneeboard(ComboBox2.Text);
//fin de la fonction fskneeboard


//Lancement de l'application du profil
prog:=ProfIni.ReadString(ComboBox2.Text,'Application','');
Suiveur:= PRofIni.ReadString(ComboBox2.Text, 'Suivi', '');

         // Lancement avec suivi des fichiers
         if Suiveur='1' then    begin
            { Mise à zéro de la structure StartInfo }
            FillChar(StartInfo,SizeOf(StartInfo),#0);
            { Seule la taille est renseignée, toutes les autres options }
            { laissées à zéro prendront les valeurs par défaut }
            StartInfo.cb     := SizeOf(StartInfo);
            { Lancement de la ligne de commande }
            If CreateProcess(Nil, PAnsiChar(prog), Nil, Nil, False, 0, Nil, Nil, StartInfo,ProcessInfo) Then
                  Begin
                  { L'application est bien lancée, on va en attendre la fin }
                  { ProcessInfo.hProcess contient le handle du process principal de l'application }
                  Fin:=False;
                  FinApp:=1;
                  AjouteIcone;
                  Form1.Hide;
                    Repeat
                  { On attend la fin de l'application }
                     Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
                     WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
                     WAIT_TIMEOUT  :;          { elle n'est pas terminée, on continue d'attendre }
                     End;
                  { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
                  Application.ProcessMessages;
                  Until Fin;
                  case FinApp of
                  0: Application.terminate;
                  1: begin
                        //sauvegarde des fichiers du profil aprés fermeture de l'application
                        Timer:= strtoint(ProfIni.ReadString(ComboBox2.Text, 'DUREE', '20000'));
                        Tc := GetTickCount;
                        repeat
                        Application.ProcessMessages;
                        until Cardinal(GetTickCount - Tc) > Timer;
                        CopyFile(PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier1', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier2', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier3', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier4', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'),FALSE);
                        CopyFile(PChar(PRofIni.ReadString(ComboBox2.Text, 'fichier5', '')),PChar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'),FALSE);
                        Form1.Show;
                        SupprimeIcone;
                        showmessage(ComboBox2.Text+': maintenance complete');
                     end;
                  2: begin
                  showmessage('abandon');
                  Form1.Show;
                  SupprimeIcone;
                  end;
                  end;
                  End
                  Else RaiseLastOSError;
            end
            //Lancement sans suivi des fichiers
            else begin
 If CreateProcess(Nil,PAnsiChar(prog), Nil, Nil, False,
                0, Nil, Nil, StartInfo,ProcessInfo) Then
  Begin
    if (RadioButton1.Checked) then
      Application.Terminate
    else begin
      MultIni.Free;
      ProfIni.Free;
    end;
    end;
  end;
//fin de suivi


end;

procedure TForm1.Button34Click(Sender: TObject);
var MarkFS9: string;
    MarkFS9_Ini: TIniFile;
    i: integer;
begin
//recherche fs9 pour touches
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
if  (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier1', ''))='.cfg') or (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier1', ''))='.CFG') then
      begin
      MarkFS9_Ini:=TIniFile.Create(ProfIni.ReadString(ComboBox2.Text, 'fichier1', ''));
      if MarkFS9_Ini.SectionExists('KEYBOARD_MAIN')then
      MarkFS9:=ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.1'
      end else
if  (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier2', ''))='.cfg') or (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier2', ''))='.CFG') then
      begin
      MarkFS9_Ini:=TIniFile.Create(ProfIni.ReadString(ComboBox2.Text, 'fichier2', ''));
      if MarkFS9_Ini.SectionExists('KEYBOARD_MAIN')then
      MarkFS9:=ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.2'
      end else
if  (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier3', ''))='.cfg') or (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier3', ''))='.CFG') then
      begin
      MarkFS9_Ini:=TIniFile.Create(ProfIni.ReadString(ComboBox2.Text, 'fichier3', ''));
      if MarkFS9_Ini.SectionExists('KEYBOARD_MAIN')then
      MarkFS9:=ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.3'
      end else
if  (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier4', ''))='.cfg') or (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier4', ''))='.CFG') then
      begin
      MarkFS9_Ini:=TIniFile.Create(ProfIni.ReadString(ComboBox2.Text, 'fichier4', ''));
      if MarkFS9_Ini.SectionExists('KEYBOARD_MAIN')then
      MarkFS9:=ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.4'
      end else
if  (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier5', ''))='.cfg') or (ExtractFileExt(ProfIni.ReadString(ComboBox2.Text, 'fichier5', ''))='.CFG')  then
      begin
      MarkFS9_Ini:=TIniFile.Create(ProfIni.ReadString(ComboBox2.Text, 'fichier5', ''));
      if MarkFS9_Ini.SectionExists('KEYBOARD_MAIN')then
      MarkFS9:=ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox2.Text+'_fichier.5'
      end;
LectTouch(ComboBox2.Text, MarkFS9, ListView1, ListBox1);
//fin recherche fs9 pour touches
Button37.Visible:=true;
button45.Visible:=true;
button46.Visible:=true;
//on cache les pages visibles
for i := 0 to PageControl1.PageCount - 1 do
  PageControl1.Pages[i].TabVisible := False;
PageControl1.ActivePageIndex := 5;
end;

//-------------------------------------page modifier un profil--------------
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

//----------------liste déroulante
procedure TForm1.ComboBox1Change(Sender: TObject);
var marqueur: integer;
    tempini: TstringList;
    suiveur: string;
    Timer: integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
  Edit8.Text:=  ComboBox1.Text;
  Edit8.SelStart:= 1000;
  Edit14.Text:= PRofIni.ReadString(ComboBox1.Text, 'Application', '');
  Edit14.SelStart:= 1000;
  if PRofIni.valueExists(ComboBox1.Text, 'fichier1') then
  Edit9.Text:= PRofIni.ReadString(ComboBox1.Text, 'fichier1', '');
  Edit9.SelStart:= 1000;
  if PRofIni.valueExists(ComboBox1.Text, 'fichier2') then
  Edit10.Text:= PRofIni.ReadString(ComboBox1.Text, 'fichier2', '');
  Edit10.SelStart:= 1000;
  if PRofIni.valueExists(ComboBox1.Text, 'fichier3') then
  Edit11.Text:= PRofIni.ReadString(ComboBox1.Text, 'fichier3', '');
  Edit11.SelStart:= 1000;
  if PRofIni.valueExists(ComboBox1.Text, 'fichier4') then
  Edit12.Text:= PRofIni.ReadString(ComboBox1.Text, 'fichier4', '');
  Edit12.SelStart:= 1000;
  if PRofIni.valueExists(ComboBox1.Text, 'fichier5') then
  Edit13.Text:= PRofIni.ReadString(ComboBox1.Text, 'fichier5', '');
  Edit13.SelStart:= 1000;
//teste si fs9.cfg, on affiche la boite pour changer la création du fichier
if (ExtractFileName(Edit9.Text)='fs9.cfg') or (ExtractFileName(Edit9.Text)='FS9.cfg')  then
  marqueur:=1
else
if (ExtractFileName(Edit10.Text)='fs9.cfg') or (ExtractFileName(Edit10.Text)='FS9.cfg')  then
  marqueur:=1
else
if (ExtractFileName(Edit11.Text)='fs9.cfg') or (ExtractFileName(Edit11.Text)='FS9.cfg')  then
  marqueur:=1
else
if (ExtractFileName(Edit9.Text)='fs9.cfg') or (ExtractFileName(Edit12.Text)='FS9.cfg')  then
  marqueur:=1
else
if (ExtractFileName(Edit13.Text)='fs9.cfg') or (ExtractFileName(Edit13.Text)='FS9.cfg')  then
  marqueur:=1
else marqueur:=0;

if marqueur=1  then
begin
  GroupBox15.visible:=true;
  if  MultIni.ReadString('PAGEKEY',ComboBox1.Text, '')='1' then
  begin
  radiogroup1.ItemIndex:=0;
  Form2.Hide;
  end
  else
  begin
  radiogroup1.ItemIndex:=1;
  Form2.Hide;
  end;
end;
if MultIni.SectionExists(Edit14.Text) then
begin
   if MultIni.ValueExists(Edit14.Text,ComboBox1.Text) then
   begin
   tempIni:= TstringList.Create;
   MultIni.ReadSection(Edit14.Text,tempIni);
       if tempIni.Count<=1 then
       CheckBox3.Visible:=false
       else
       begin
       CheckBox3.Visible:=true;
       CheckBox3.Checked:=false;
       end;
   end
   else
   begin
   CheckBox3.Visible:=true;
   CheckBox3.Checked:=true;
   end;
end;
  Timer:= strtoint(ProfIni.ReadString(ComboBox1.Text, 'DUREE', '20000'));
  Timer:= Timer div 1000; 
  Edit21.Text:= inttostr(Timer);
  Suiveur:= PRofIni.ReadString(ComboBox1.Text, 'Suivi', '');
  if Suiveur='1' then
  checkBox5.Checked:=true
  else  checkBox5.Checked:=false;
    radiogroup1.Enabled:=true;
  ProfIni.Free;
  MultIni.Free;
end;

//---------------boutons changer fichier
procedure TForm1.Button15Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

  if OpenDialog1.Execute then
    begin
    Edit9.Text:=OpenDialog1.FileName;
    if checkBox3.Checked=true then
    begin
{traitement profil seul}
ProfIni.WriteString(ComboBox1.Text,'fichier1', Edit9.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
ProfIni.WriteString(TempVar.Strings[i],'fichier1', Edit9.Text);
end;
{fin traitement de tous les profils}
    end;
    end;
    ProfIni.Free;
    MultIni.Free;
end;

procedure TForm1.Button16Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

  if OpenDialog1.Execute then
    begin
    Edit10.Text:=OpenDialog1.FileName;
        if checkBox3.Checked=true then
    begin
{traitement profil seul}
ProfIni.WriteString(ComboBox1.Text,'fichier2', Edit10.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
ProfIni.WriteString(TempVar.Strings[i],'fichier2', Edit10.Text);
end;
{fin traitement de tous les profils}
    end;
    end;
    MultIni.Free;
    ProfIni.Free;
end;

procedure TForm1.Button17Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

  if OpenDialog1.Execute then
    begin
    Edit11.Text:=OpenDialog1.FileName;
        if checkBox3.Checked=true then
    begin
{traitement profil seul}
ProfIni.WriteString(ComboBox1.Text,'fichier3', Edit11.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
ProfIni.WriteString(TempVar.Strings[i],'fichier3', Edit11.Text);
end;
{fin traitement de tous les profils}
    end;
    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button18Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

  if OpenDialog1.Execute then
    begin
    Edit12.Text:=OpenDialog1.FileName;
        if checkBox3.Checked=true then
    begin
{traitement profil seul}
ProfIni.WriteString(ComboBox1.Text,'fichier4', Edit12.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
ProfIni.WriteString(TempVar.Strings[i],'fichier4', Edit12.Text);
end;
{fin traitement de tous les profils}
    end;
    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button19Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

  if OpenDialog1.Execute then
    begin
    Edit13.Text:=OpenDialog1.FileName;
        if checkBox3.Checked=true then
    begin
{traitement profil seul}
ProfIni.WriteString(ComboBox1.Text,'fichier5', Edit13.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
ProfIni.WriteString(TempVar.Strings[i],'fichier5', Edit13.Text);
end;
{fin traitement de tous les profils}
    end;
    end;
  ProfIni.Free;
  MultIni.Free;
end;

//---------------bouton fermer
procedure TForm1.Button4Click(Sender: TObject);
begin
  Application.Terminate;
end;

//---------------bouton appliquer les modifications
procedure TForm1.Button21Click(Sender: TObject);
var alphatri:tstringlist;
    Timer: integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

//Gestion de la visualisation des onglets, et on recharge le combobox de la page "courant"
     PageControl1.Pages[1].TabVisible := True;
     PageControl1.Pages[3].TabVisible := True;
     PageControl1.Pages[4].TabVisible := True;
                 alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox2.Items:=alphatri;
     Edit15.Text:='';
     Edit16.Text:='';
     Edit17.Text:='';
     Edit18.Text:='';
     Edit19.Text:='';
  Label12.Visible:=false;
  Label24.Visible:=false;
  Label13.Caption:='';
  Label29.Caption:='';
  Label14.Visible:=false;
  Label25.Visible:=false;
  Label18.Caption:='';
  Label30.Caption:='';
  Label15.Visible:=false;
  Label26.Visible:=false;
  Label19.Caption:='';
  Label31.Caption:='';
  Label16.Visible:=false;
  Label27.Visible:=false;
  Label20.Caption:='';
  Label32.Caption:='';
  Label17.Visible:=false;
  Label28.Visible:=false;
  Label21.Caption:='';
  Label33.Caption:='';
  PageControl1.ActivePageIndex := 3;
  Timer:= strtoint(Edit21.Text);
  Timer:=Timer*1000;
  ProfIni.WriteString(ComboBox1.Text, 'DUREE', inttostr(Timer));
  ProfIni.Free;
  MultIni.Free;
end;


//----------------Bouton annuler
procedure TForm1.Button35Click(Sender: TObject);
var TempVar:tstringlist;
    quelconque:string;
    i:integer;
begin
MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

if openDialog2.Execute then
begin
Edit14.Text:=openDialog2.FileName;
if CheckBox3.Checked=true then
begin
{traitement profil seul}
MultIni.WriteString(Edit14.Text,ComboBox1.Text,ComboBox1.Text);
if MultIni.ValueExists(ProfIni.ReadString(ComboBox1.Text,'Application',''),ComboBox1.Text) then
MultIni.DeleteKey(ProfIni.ReadString(ComboBox1.Text,'Application',''),ComboBox1.Text);
ProfIni.WriteString(ComboBox1.Text,'Application',Edit14.Text);
{fin traitement profil seul}
end
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
quelconque:=ProfIni.ReadString(ComboBox1.Text,'Application','');
MultIni.ReadSection(quelconque,TempVar);
for i:=0 to TempVar.Count-1 do
begin
MultIni.WriteString(Edit14.Text,TempVar.Strings[i],TempVar.Strings[i]);
if MultIni.ValueExists(ProfIni.ReadString(TempVar.Strings[i],'Application',''),TempVar.Strings[i]) then
MultIni.DeleteKey(ProfIni.ReadString(TempVar.Strings[i],'Application',''),TempVar.Strings[i]);
ProfIni.WriteString(TempVar.Strings[i],'Application',Edit14.Text);
end;
{fin traitement de tous les profils}
{traitement commun suppression ancien nom d'application si vide}
MultIni.ReadSection(quelconque,TempVar);
if TempVar.Count=0 then
MultIni.EraseSection(quelconque);
{Fin traitement commun suppression ancien nom d'application si vide}
end;
end;
  ProfIni.Free;
  MultIni.Free;

end;

//Supprimer un profil
procedure TForm1.Button20Click(Sender: TObject);
begin
if Combobox1.Text='Profil à modifier' then
begin
Form3.Show;
Form3.Label7.visible:= true;
end
else
   OKRightDlg.Show;
end;

procedure TForm1.Button37Click(Sender: TObject);
begin
//on montre les pages visibles
PageControl1.Pages[1].TabVisible := True;
PageControl1.Pages[4].TabVisible := True;
PageControl1.Pages[3].TabVisible := True;
PageControl1.ActivePageIndex := 3;
Button37.Visible:=False;
ListBox1.Clear;
ListView1.Clear;
end;

procedure TForm1.Button38Click(Sender: TObject);
begin
//on montre les pages visibles
PageControl1.Pages[1].TabVisible := True;
PageControl1.Pages[4].TabVisible := True;
PageControl1.Pages[3].TabVisible := True;
PageControl1.ActivePageIndex := 2;
Button38.Visible:=False;
ListBox1.Clear;
ListView1.Clear;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.checked=true then
Form3.Show;
Form3.Label1.visible:= false;
Form3.Label2.visible:= false;
Form3.Label3.visible:= false;
Form3.Label4.visible:= false;
Form3.Label5.visible:= false;
Form3.Label6.visible:= false;
Form3.Label7.visible:= false;
Form3.Label8.visible:= true;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
// Gestion du fichier kneyboard_keys
////////////////////////////////////
MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
//cas ou on ne génère pas le keyboard_keys
if radiogroup1.ItemIndex=1 then
begin
MultIni.WriteString('PAGEKEY',ComboBox1.Text,'0');
Form2.Label2.Caption:=ExtractFilePath(Edit14.Text)+'Aircraft\';
form2.Show;
end;
//cas ou il faut créer kneyboard_keys
if radiogroup1.ItemIndex=0 then
begin
MultIni.WriteString('PAGEKEY',ComboBox1.Text,'1');
Form2.Hide;
end;
// Fin kneyboard_keys
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
if ComboBox1.Text='Profil à modifier' then
begin
CheckBox3.Checked:=false;
end;
end;

procedure TForm1.Button39Click(Sender: TObject);
var alphatri:tstringlist;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

PRofIni.WriteString(Edit8.Text,'Application', Edit14.Text);
if PRofIni.ValueExists(ComboBox1.Text,'fichier1') then
begin
RenameFile(Pchar(ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox1.Text+'_fichier.1'),Pchar(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit8.Text+'_fichier.1'));
PRofIni.WriteString(Edit8.Text,'Fichier1',Edit9.Text);
end;
if PRofIni.ValueExists(ComboBox1.Text,'fichier2') then
begin
PRofIni.ReadString(ComboBox1.Text,'fichier2','');
RenameFile((ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox1.Text+'_fichier.2'),(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit8.Text+'_fichier.2'));
PRofIni.WriteString(Edit8.Text,'fichier2',Edit10.Text);
end;
if PRofIni.ValueExists(ComboBox1.Text,'fichier3') then
begin
PRofIni.ReadString(ComboBox1.Text,'fichier3','');
RenameFile((ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox1.Text+'_fichier.3'),(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit8.Text+'_fichier.3'));
PRofIni.WriteString(Edit8.Text,'fichier3',Edit11.Text);
end;
if PRofIni.ValueExists(ComboBox1.Text,'fichier4') then
begin
PRofIni.ReadString(ComboBox1.Text,'fichier4','');
RenameFile((ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox1.Text+'_fichier.4'),(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit8.Text+'_fichier.4'));
PRofIni.WriteString(Edit8.Text,'fichier4',Edit12.Text);
end;
if PRofIni.ValueExists(ComboBox1.Text,'fichier5') then
begin
PRofIni.ReadString(ComboBox1.Text,'fichier5','');
RenameFile((ExtractFilePath(Application.ExeName)+'fichiers\'+ComboBox1.Text+'_fichier.5'),(ExtractFilePath(Application.ExeName)+'fichiers\'+Edit8.Text+'_fichier.5'));
PRofIni.WriteString(Edit8.Text,'fichier5',Edit13.Text);
end;
MultIni.WriteString(Edit14.Text,Edit8.Text,Edit8.Text);
MultIni.WriteString('PAGEKEY',Edit8.Text,(MultIni.ReadString('PAGEKEY',ComboBox1.Text,'')));
MultIni.DeleteKey(Edit14.Text,ComboBox1.Text);
MultIni.DeleteKey('PAGEKEY',ComboBox1.Text);
PRofIni.EraseSection(ComboBox1.Text);
            alphatri:=tstringlist.Create;
            PRofIni.ReadSections(alphatri);
            Alphatri.Sort;
            ComboBox1.Items:=alphatri;
ComboBox1.Text:=Edit8.Text;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button40Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

Edit9.Text:='';
{traitement profil seul}
if Checkbox3.Checked=true then
begin
if ProfIni.ValueExists(ComboBox1.Text,'fichier1')then
begin
ProfIni.DeleteKey(ComboBox1.Text,'fichier1');
end;
end
{fin traitement profil seul}
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
if ProfIni.ValueExists(TempVar.Strings[i],'fichier1')then
ProfIni.DeleteKey(TempVar.Strings[i],'fichier1');
end;
{fin traitement de tous les profils}

    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button41Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

Edit10.Text:='';
{traitement profil seul}
if Checkbox3.Checked=true then
begin
if ProfIni.ValueExists(ComboBox1.Text,'fichier2')then
begin
ProfIni.DeleteKey(ComboBox1.Text,'fichier2');
end;
end
{fin traitement profil seul}
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
if ProfIni.ValueExists(TempVar.Strings[i],'fichier2')then
ProfIni.DeleteKey(TempVar.Strings[i],'fichier2');
end;
{fin traitement de tous les profils}

    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button42Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

Edit11.Text:='';
{traitement profil seul}
if Checkbox3.Checked=true then
begin
if ProfIni.ValueExists(ComboBox1.Text,'fichier3')then
begin
ProfIni.DeleteKey(ComboBox1.Text,'fichier3');
end;
end
{fin traitement profil seul}
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
if ProfIni.ValueExists(TempVar.Strings[i],'fichier3')then
ProfIni.DeleteKey(TempVar.Strings[i],'fichier3');
end;
{fin traitement de tous les profils}

    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button43Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

Edit12.Text:='';
{traitement profil seul}
if Checkbox3.Checked=true then
begin
if ProfIni.ValueExists(ComboBox1.Text,'fichier4')then
begin
ProfIni.DeleteKey(ComboBox1.Text,'fichier4');
end;
end
{fin traitement profil seul}
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
if ProfIni.ValueExists(TempVar.Strings[i],'fichier4')then
ProfIni.DeleteKey(TempVar.Strings[i],'fichier4');
end;
{fin traitement de tous les profils}

    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Button44Click(Sender: TObject);
var TempVar:tstringlist;
    i:integer;
begin
  MultIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
  ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');

Edit13.Text:='';
{traitement profil seul}
if Checkbox3.Checked=true then
begin
if ProfIni.ValueExists(ComboBox1.Text,'fichier5')then
begin
ProfIni.DeleteKey(ComboBox1.Text,'fichier5');
end;
end
{fin traitement profil seul}
else
begin
{traitement de tous les profils}
TempVar:=Tstringlist.Create;
MultIni.ReadSection(Edit14.Text,TempVar);
for i:=0 to TempVar.Count-1 do
begin
if ProfIni.ValueExists(TempVar.Strings[i],'fichier5')then
ProfIni.DeleteKey(TempVar.Strings[i],'fichier5');
end;
{fin traitement de tous les profils}

    end;
  ProfIni.Free;
  MultIni.Free;
end;

procedure TForm1.Franais1Click(Sender: TObject);
begin
LangManager.LanguageID:= 1036
end;

procedure TForm1.English1Click(Sender: TObject);
begin
LangManager.LanguageID:= 1033
end;

procedure TForm1.Restaurerfskneeboardkeyshtm1Click(Sender: TObject);
begin
DeleteFile(ExtractFilePath(Form1.Edit14.Text)+'Aircraft\kneeboard_keys.htm');
CopyFile(Pchar(ExtractFilePath(Form1.Edit14.Text)+'Aircraft\MultiConfig_original_kneeboard_keys.htm'),Pchar(ExtractFilePath(Form1.Edit14.Text)+'Aircraft\kneeboard_keys.htm'),FALSE);
end;

procedure TForm1.Button45Click(Sender: TObject);
begin
// appel de la fonction fskneeboard
fskneeboard(ComboBox2.Text);
//fin de la fonction fskneeboard
end;


//-----------------------------Impression----------------------------------//
/////////////////////////////////////////////////////////////////////////////
procedure DefFonte(F: TFont; Nom: string; Taille: integer; Styl: TFontStyles);
begin
 with F do begin
   Name := Nom;
   Size := Taille;
   Style := Styl;
  end;
end;

procedure TForm1.Button46Click(Sender: TObject);
var HM: integer;
 T: integer;
 S: integer;
 XOffset: integer;
 LignesParPage: word;
 LigTot: integer;
begin
C := Printer.Canvas;  {Pour un code plus concis}
//Calcul du nombre de ligne par page, et ainsi du nombre de page
DefFonte(C.Font, 'Arial', 11, []);
Hm := C.TextHeight('gB');     {On calcule la hauteur d une ligne en pixels}
{On peut ainsi calculer le nombre de lignes que peut contenir la zone Details}
LignesParPage := (Printer.PageHeight-200) div HM;
{Le nombre de pages sera calculé en divisant le nombre total de lignes par LignesParPage}
TotalPages := (ListView1.Items.count-1) div LignesParPage;
{ATTENTION: on doit également vérifier si les pages seront complètes.}
{ Avec mod on peut voir s'il nous restera des lignes à imprimer en fin de document}
{Si on obtient un reste, il nout faut ajouter une page}
if ((ListView1.Items.count-1) mod LignesParPage) <> 0 then TotalPages:=TotalPages+1;
LigTot:=0;
with printer do begin
    Begindoc;
    for S:=1 to TotalPages-1 do begin
            XOffset:=Hm;
            for T:=0 to LignesParPage-2 do
                  begin
                  Canvas.TextOut(100,XOffset,ListView1.Items[LigTot].Caption);
                  if ListView1.Items[LigTot].SubItems.Count=1 then
                  Canvas.TextOut(round((Printer.Pagewidth/3)*2),XOffset, ListView1.Items[LigTot].SubItems.Strings[0]);
                  LigTot:=Ligtot+1;
                  XOffset:=XOffset+Hm;
            end;
            Newpage;
    end;
    XOffset:=Hm;
    for T:=LigTot to ListView1.Items.count-1 do begin
            Canvas.TextOut(100,XOffset,ListView1.Items[LigTot].Caption);
            if ListView1.Items[LigTot].SubItems.Count=1 then
            Canvas.TextOut(round((Printer.Pagewidth/3)*2),XOffset, ListView1.Items[LigTot].SubItems.Strings[0]);
            LigTot:=Ligtot+1;
            XOffset:=XOffset+Hm;
    end;
    enddoc;
end;


end;

procedure TForm1.CheckBox5Click(Sender: TObject);
begin
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
if CheckBox5.Checked=true  then ProfIni.WriteString(ComboBox1.Text,'Suivi','1');
if CheckBox5.Checked=false then ProfIni.WriteString(ComboBox1.Text,'Suivi','0');
end;

procedure TForm1.Button48Click(Sender: TObject);
var Nom_profil: string;
    i: integer;
    i10: integer;
    sec_prof: TstringList;
    temp_prof: string;
begin
if button37.visible=true then
Nom_Profil:=ComboBox2.Text
else Nom_Profil:=Edit1.Text;
ProfIni:=TInifile.Create(ExtractFilePath(Application.ExeName)+'profils.ini');
ProfIni.DeleteKey(Nom_Profil, 'Lien'+inttostr(ListBox1.ItemIndex+1));
i10:=ListBox1.ItemIndex+1;
sec_prof:=TstringList.Create;
ProfIni.ReadSection(Nom_Profil, sec_prof);
for i:=0 to  Sec_Prof.count-1 do
if ProfIni.ValueExists(Nom_Profil, 'Lien'+inttostr(i10+1)) then begin
temp_prof:=ProfIni.ReadString(Nom_Profil, 'Lien'+inttostr(i10+1),'');
ProfIni.DeleteKey(Nom_Profil, 'Lien'+inttostr(i10+1));
ProfIni.WriteString(Nom_Profil, 'Lien'+inttostr(i10), temp_prof);
i10:=i10+1;
end;
ListBox1.DeleteSelected;
ProfIni.Free;
sec_prof.Free;
end;

procedure TForm1.Button47Click(Sender: TObject);
begin
Form4.show;
end;

initialization
LangManager.DefaultLanguageID:=1036;
LangManager.ScanForLangFiles(ExtractFileDir(ParamStr(0))+'\lang\', '*.lng', False);
//On défini la langue active
if not fileexists(ExtractFilePath(Application.ExeName)+'MultiConfig.ini') then
LangManager.LanguageID:=1036
else begin
MultIni:= TInifile.Create(ExtractFilePath(Application.ExeName)+'MultiConfig.ini');
LangManager.LanguageID:=strtoint(MultIni.ReadString('lang','langage', '1036'));
end;



end.

