unit BoiteNoire;
{ gestion de la boite noire de sauvegarde des data }
{ les fichiers sont affichés separement. si le chemin n'existe pas : il est cree               }
{ On utilise des champs de la base de registre                                                 }
{ * "currentFile" : fichier de data en cours                                                   }
{ * "RepertoireManip": repertoire courant de la manip en cours                                 }
{ Ces champs sont stockés sous la clef "\PilotageManip"                                        }
{ Si ces champs n'existent pas dans la base de registre, on utilise                            }
{ "c:\boite" et "toto" par défaut                                                              }
{ N.B. : il est donc toujours souhaitable de creer un répertoire c:\boite                      }
{ A FAIRE                                                                                      }
{ création automatique des entrées dans la base de registre (a voir)                           }
{ MODIFICATIONS                                                                                }
{ 04.02.2000: modification de la gestion de l'ouverture des fichiers                           }
{             Bug mineur: le chemin complet du fichier de data s'affiche systématiquement      }
{ 13/06/00: EDOUARD modification de la gestion de l'ouverture des fichier le chemin et le nom  }
{ dernière mise à jour le 31.10.2000                                                           }
{version A JOUR le 25.09.01}
{ A FAIRE }
{ améliorer la gestion du repertoire de la boite noire }
{ ne pas cabler le chemin en "hard" comem c'est fait!!  }
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, Menus, editdata, registry, JvComponent,
  JvFormPlace;

const
  sreg='\LLB_programs'; { clef de la base de registre ou sont stockées les informations des répertoires }

type
  Tboitnoir = class(TForm)
    Panel1: TPanel;
    CommentBox: TEdit;
    Label2: TLabel;
    Label1: TLabel;
    FileNameBox: TEdit;
    RichEdit1: TMemo;
    OpenDialog1: TOpenDialog;
    OpenFileBoiteNoire: TButton;
    Label3: TLabel;
    repertoiremanip: TEdit;
    JvFormPlace1: TJvFormPlace;
    procedure CommentBoxKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FileNameBoxKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure OpenFileBoiteNoireClick(Sender: TObject);
    procedure repertoiremanipKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Déclarations privées }
  filename:string;
  public
    regis:tregistry;
    currep:string;
    repseq:string;
    { Déclarations publiques }
    procedure receivetext(s:string);
    procedure newfile(s:string);
  end;

var
  boitnoir: Tboitnoir;
  defaultdir:tfilename;

implementation

{$R *.DFM}

uses dialogTextInput;

procedure Tboitnoir.CommentBoxKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then begin
receivetext(CommentBox.text);
CommentBox.clear;
end;
end;

{ creation des répertoire par défaut à parir de la base de registres }
procedure Tboitnoir.FormCreate(Sender: TObject);
var
s,s1,s2:string;
tf:boolean;
begin
top:=0;left:=0;width:=468;height:=387;
update;
WindowState:=wsMinimized; 
regis:=tregistry.create;
regis.RootKey := HKEY_CURRENT_USER;

tf:=regis.KeyExists(sreg); { est-ce que la clef 'LLB_programs' existe? }
if not tf then regis.CreateKey(sreg);

tf:=regis.valueExists('RepertoireManip');
if not tf
then begin
     tf:=regis.openkey(sreg,true);
     s:=GetCurrentDir+'\MyData';
     regis.writeString('RepertoireManip',s);
     end;

tf:=regis.valueExists('currentFile');
if not tf
then begin
     tf:=regis.openkey(sreg,true);
     regis.writeString('currentfile','logFile');
     end;

tf:=regis.openkey(sreg,true);
if tf then
   begin
   s2:=regis.readstring('currentfile');
   repertoiremanip.text:=regis.readstring('RepertoireManip');
   end;

defaultdir:=s+s2;
repseq:=s1;
newfile(s2);
end;


procedure Tboitnoir.receivetext(s:string);
var
fich:textfile;
begin
assignfile(fich,filename);
if fexis(filename) then append(fich) else rewrite(fich);
writeln(fich,s);
closefile(fich);
richedit1.lines.add(s);
end;

{ ouverture d'un fichier pour la boite noire }
{ INPUT: le nom simple ex 'toto'            }
{ OUTPUT: le memo de la boite noire est mis a jour }
procedure Tboitnoir.newfile(s:string);
begin
richedit1.Clear;
repertoiremanip.text:=regis.readstring('RepertoireManip');
{$I-}
mkdir(repertoiremanip.text); {creation du repertoire}
{$I+}
IOResult;

filename:=repertoiremanip.text+'\'+s+'.txt';
regis.writestring('currentfile',s);
if fexis(filename) then
   richedit1.Lines.LoadfromFile(filename);
receivetext(datetostr(date)+'  '+timetostr(time));
receivetext('ouverture de '+filename);
caption:=filename;
FileNameBox.text:=s;
{regis.writestring('currep',currep);}
richedit1.selstart:=length(richedit1.text)-1;
end;

procedure Tboitnoir.FileNameBoxKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then newfile(FileNameBox.text);
end;

procedure Tboitnoir.OpenFileBoiteNoireClick(Sender: TObject);
var  S: string;
     tampfile,tamppath:string;
    len,i,j:integer;
begin
opendialog1.initialDir:=RepertoireManip.text;
if OpenDialog1.Execute then  { Affichage de la boîte de dialogue d'ouverture }
  begin
  s:=OpenDialog1.FileName;
  len:=length(s);
  tampfile:='';
  tamppath:='';
  i:=len+1;
  repeat
    i:=i-1;
  until s[i]='.'; {l'extension est enlevee}
  i:=i-1;
  repeat
    tampfile:=s[i]+tampfile;
    i:=i-1;
  until s[i]='\'; {tampfile=nom cour}
  for j:=1 to i-1 do
     tamppath:=tamppath+s[j];

  regis.writestring('RepertoireManip',tamppath);
  newfile(tampfile);{ Fichier sélectionné dans la boîte de dialogue }
  end;
end;

procedure Tboitnoir.repertoiremanipKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then
   begin
   {saisie du nom du fichier}
   enterdlg.editeur.text:=FileNameBox.text;
   enterdlg.editeur.maxlength:=30;
   if enterdlg.showmodal=mrOK then
      if enterdlg.editeur.text<>'' then
         FileNameBox.text:=enterdlg.editeur.text;

   regis.writestring('RepertoireManip',repertoiremanip.text);
   newfile(FileNameBox.text);
   end;

end;

end.
