février
2009
Ce 12e billet vous montre les modifications à apporter à l’interface-utilisateur.
Le changement de stratégie annoncé en 2.2 consiste à privilégier l’écriture dans la base de l’objet « personne » à chaque modification, suppression ou création. Cela implique qu’à la fermeture de l’application tous les objets sont d’ores et déjà sauvegardés. Nous allons donc ignorer le sauvegarde en quittant (on close) dans la form TFormRepert quand le fichier courant est une base de données (identifiée ici par son extension .fdb) :
begin
if ExtractFileExt(CurrentFileName) = '.fdb' then
Exit;
if MessageDlg('Sauvegarder ' + CurrentfileName + ' ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then
aSaveExecute(Sender);
end;
Pour les mêmes raisons nous invalidons les actions de sauvegarde qui n’ont pas de sens ici dans la mesure où la base est à jour au moment où ces commandes sont accessibles dans l’interface. Cette invalidation est exécutée à l’ouverture du fichier (if ExtractFileExt(CurrentFileName) = ‘.fdb’) :
begin
if FileExists(CurrentFileName) then begin
if (MessageDlg('Voulez-vous enregistrer le fichier courant'+#13+#10
+CurrentFileName+' ?', mtWarning, [mbYes, mbNo], 0) = mrYes)
then
aSaveExecute(Sender);
OpenDialog1.InitialDir := ExtractFilePath(CurrentFileName);
end;
if OpenDialog1.Execute then begin
CurrentFileName := OpenDialog1.FileName;
ReadPeopleFromFile(CurrentFileName);
DisplayList;
end;
Self.Caption := ExtractFileName(CurrentFileName);
if ExtractFileExt(CurrentFileName) = '.fdb' then
begin
aSave.Enabled := False;
aSaveAs.Enabled := False;
end
else begin
aSave.Enabled := True;
aSaveAs.Enabled := True;
end;
end;
Profitons-en, maintenant que nous disposons de fichiers de tests, pour modifier la méthode FormCreate en enlevant les instructions de création d’objets de test :
begin
if not FileExists(CurrentFileName) then
aOpenExecute(Sender)
else begin
ReadPeopleFromFile(CurrentFileName);
Self.Caption := ExtractFileName(CurrentFileName);
DisplayList;
end;
end;
Au lancement de l’application, il vous sera demandé de sélectionner le fichier à ouvrir. Si vous voulez que le dernier fichier utilisé s’ouvre par défaut, il faudra sauvegarder CurrentfileName au moment de quitter l’application et de l’initialiser au début de TFormRepert.FormCreate :
var
IniFile: TInifile;
begin
Inifile := TInifile.Create(ChangeFileExt(Application.ExeName,'.ini'));
with IniFile do
try
WriteString('Data','FileName',CurrentfileName);
finally
Free;
end;
if ExtractFileExt(CurrentFileName) = '.fdb' then
Exit;
if MessageDlg('Sauvegarder ' + CurrentfileName + ' ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then
aSaveExecute(Sender);
end;
procedure TFormRepert.FormCreate(Sender: TObject);
var
IniFile: TInifile;
begin
Inifile := TInifile.Create(ChangeFileExt(Application.ExeName,'.ini'));
with IniFile do
try
CurrentFileName := ReadString('Data','FileName','');
finally
Free;
end;
if not FileExists(CurrentFileName) then
aOpenExecute(Sender)
else begin
ReadPeopleFromFile(CurrentFileName);
Self.Caption := ExtractFileName(CurrentFileName);
DisplayList;
end;
end;
ATTENTION !
A ce stade, si l’ajout, la mise à jour et la suppression semblent bien s’effectuer correctement dans l’interface-utilisateur, la base de données .fdb n’est en fait pas mise à jour, les visiteurs TSQLUpdatePerson, TSQLDeletePerson et TSQLInsertPerson n’ayant pas encore été implémentés.