Grâce à la précieuse aide de Delphiprog !!!
Maintenant on peut sauvegarder la liste des Divx dans un dossier au choix en fichier .txt et la gestion des données est beaucoup mieux ... gérées !!!
----------------------------------------------
Script ki marche bien mais pourait mieux marcher. Ce programme m'a été très interressant pour aborder la gestion de donnée. Et j'encourage toute personne s'y connaissant + ke moi à y jeter un coup d'oeil pour montrer du doigt mes erreurs.
Source / Exemple :
unit UDivXMainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, DBCtrls, DB, DBTables, Buttons, ImgList,
ComCtrls, Grids, DBGrids;
type
TDivXMainForm = class(TForm)
MainMenu1: TMainMenu;
Fichier1: TMenuItem;
mnuEnregistrer1: TMenuItem;
N1: TMenuItem;
mnuQuitter1: TMenuItem;
Afficher1: TMenuItem;
N2: TMenuItem;
btnAddModify: TBitBtn;
Ajouter1: TMenuItem;
mnuDivxEnStock: TMenuItem;
mnuDivxPretes: TMenuItem;
mnuUnDivx1: TMenuItem;
APropos1: TMenuItem;
Label1: TLabel;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Label7: TLabel;
Label8: TLabel;
DBText1: TDBText;
DBTextNbCd: TDBText;
DBTextDateArrivee: TDBText;
DBMemoObservations: TDBMemo;
StatusBar1: TStatusBar;
chbxNonVus: TCheckBox;
chbxPretes: TCheckBox;
DBCheckBox1: TDBCheckBox;
DBCheckBox2: TDBCheckBox;
DBGrid1: TDBGrid;
mnuDivxNonVus: TMenuItem;
Label4: TLabel;
DBTextStock: TDBText;
btnModifyObservations: TSpeedButton;
generer: TMenuItem;
SaveDialog1: TSaveDialog;
procedure FormCreate(Sender: TObject);
procedure mnuQuitter1Click(Sender: TObject);
procedure btnAddModifyClick(Sender: TObject);
procedure chbxNonVusClick(Sender: TObject);
procedure mnuDivxNonVusClick(Sender: TObject);
procedure mnuDivxEnStockClick(Sender: TObject);
procedure mnuDivxPretesClick(Sender: TObject);
procedure chbxPretesClick(Sender: TObject);
procedure btnModifyObservationsClick(Sender: TObject);
procedure genererClick(Sender: TObject);
end;
var
DivXMainForm: TDivXMainForm;
implementation
uses UDmDivX, UAddDeleteModifyForm;
{$R *.dfm}
{$R LockBtn.res} //ressources dcontenant les bitmap du bouton
procedure TDivXMainForm.FormCreate(Sender: TObject);
begin
//Afficher le nombre total de CD contenus dans la table
StatusBar1.Panels[0].Text := Format(sNbDivX, [dmDivX.tblDivX.RecordCount]);
end;
procedure TDivXMainForm.mnuQuitter1Click(Sender: TObject);
begin
close;
end;
procedure TDivXMainForm.btnAddModifyClick(Sender: TObject);
begin
{ Appel de la fiche permettant d'ajouter/Supprimer/modifier le
contenu de la table DivX}
DivXAddDeleteModifyForm.Show;
end;
procedure TDivXMainForm.chbxNonVusClick(Sender: TObject);
begin
//Au passage, Activer/Désactiver la case à cocher chbxPretes
chbxPretes.Enabled := not chbxNonVus.Checked;
//Actualise l'élément de menu DivXNonVus
mnuDivxNonVus.Checked := chbxNonVus.Checked;
dmDivX.AfficherNonVus(chbxNonVus.Checked);
end;
procedure TDivXMainForm.mnuDivxNonVusClick(Sender: TObject);
begin
{ Resteindre l'affichage aux enregistrements pour lesquels
le champ Vu est à faux }
chbxNonVus.Checked := mnuDivxNonVus.Checked;
dmDivX.AfficherNonVus(mnuDivxNonVus.Checked);
end;
procedure TDivXMainForm.mnuDivxEnStockClick(Sender: TObject);
begin
{ Afficher les enregistrements pour lesquels le champ Stock
vaut vrai, donc non prêtés. }
chbxPretes.Checked := not mnuDivxEnStock.Checked;
dmDivX.AfficherPretes(not mnuDivxEnStock.Checked);
end;
procedure TDivXMainForm.mnuDivxPretesClick(Sender: TObject);
begin
{ Les DivX prêtés correspondent aux enregistrements pour lesquels le champ
Stock est à faux }
chbxPretes.Checked := mnuDivxPretes.Checked;
dmDivX.AfficherPretes(mnuDivxPretes.Checked);
end;
procedure TDivXMainForm.chbxPretesClick(Sender: TObject);
begin
mnuDivxPretes.Checked := chbxPretes.Checked;
mnuDivxEnStock.Checked := not chbxPretes.Checked;
dmDivX.AfficherPretes(mnuDivxPretes.Checked);
end;
procedure TDivXMainForm.btnModifyObservationsClick(Sender: TObject);
begin
{Basculer l'état de DBMemoObservations.ReadOnly }
DBMemoObservations.ReadOnly := not DBMemoObservations.ReadOnly;
{Selon l'état de DBMemoObservations, afficher une image différente sur
le bouton}
If DBMemoObservations.ReadOnly then
btnModifyObservations.Glyph.LoadFromResourceName(Hinstance, 'LOCKSHUT')
else
btnModifyObservations.Glyph.LoadFromResourceName(HInstance, 'LOCKOPEN');
end;
procedure TDivXMainForm.genererClick(Sender: TObject);
var F : TextFile;
begin
Savedialog1.Filter := 'Fichier Texte (*.txt)|(*.txt)';
Savedialog1.FileName := 'Liste Divx';
Savedialog1.Execute;
AssignFile(F,Savedialog1.FileName +'.txt');
Rewrite(F);
while not dmDivx.tblDivX.Eof do begin
Writeln(F,dmDivx.tblDivX.FieldByName('Divx').AsString);
dmDivx.tblDivX.Next;
end;
CloseFile(F);
dmDivx.tblDivX.First;
end;
end.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
unit UDmDivX;
interface
uses
SysUtils, Classes, DB, DBTables;
type
TdmDivX = class(TDataModule)
dsDivX: TDataSource;
tblDivX: TTable;
procedure DataModuleCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Afficher les DivX non vus }
procedure AfficherNonVus(NonVus : boolean = True);
{ Afficher les DivX prêtés}
procedure AfficherPretes(Pretes : boolean = True);
end;
var
dmDivX: TdmDivX;
ResourceString
sNbDivX = 'Nombre de DivX affichés : %d';
implementation
{$R *.dfm}
{-----------------------------------------------------------------------------
Procedure: TdmDivX.AfficherNonVus
Author: delphiprog
Date: 03-janv.-2003
Arguments: NonVus: boolean; filtre la table ssi NonVus = True
Result: None
-----------------------------------------------------------------------------}
procedure TdmDivX.AfficherNonVus(NonVus: boolean);
begin
if NonVus then
tblDivX.Filter := 'vu = ''False''';
tblDivX.Filtered := NonVus;
end;
{-----------------------------------------------------------------------------
Procedure: TdmDivX.AfficherPretes
Author: delphiprog
Date: 03-janv.-2003
Arguments: Pretes: boolean; filtre la table ssi Pretes = True
Result: None
-----------------------------------------------------------------------------}
procedure TdmDivX.AfficherPretes(Pretes: boolean);
begin
if Pretes then
tblDivX.Filter := 'Stock <> ''''';
tblDivX.Filtered := Pretes;
end;
procedure TdmDivX.DataModuleCreate(Sender: TObject);
begin
{ Conserver le temps de la mise au point de l'application. }
if not tblDivX.Active then
tblDivX.Active := True;
end;
end.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
unit UAddDeleteModifyForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids,
ComCtrls;
type
TDivXAddDeleteModifyForm = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
Label1: TLabel;
DBNavigator1: TDBNavigator;
StatusBar1: TStatusBar;
procedure FormPaint(Sender: TObject);
end;
var
DivXAddDeleteModifyForm: TDivXAddDeleteModifyForm;
implementation
uses UDmDivX;
{$R *.dfm}
procedure TDivXAddDeleteModifyForm.FormPaint(Sender: TObject);
begin
{ Afficher le nombre d'enregistrements de la table DivX répondant aux
critères de filtrage}
StatusBar1.SimpleText := Format(sNbDivX, [dmDivX.TblDivX.RecordCount]);
end;
end.
Conclusion :
Il n'y a apparemment plus de bug, désormais ça marche très bien !
Je serais heureux si vous m'apportiez des améliorations ou des conseils car j'ai envie de continuer à développer cette apli (Génération d'une liste en HTML, gestion de CD musique, gestion de CD de sauvegardes, etc ...)
BYE
----------------------------------------------
Il y a un bug ke je n'arrive pas à intercepté au début apres avoir chargé la liste des Divx dans ma DBListbox, il ya un message d'erreur à chaque fois que je tente de modifier ma base. C'est pour cette raison que j'ai désactivé cette possibilité. De plus je n'arrive pas à filtrer les données de ma base ... Ausecour !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.