Bonjour,
Est il possible de faire la chose suivante? Si oui, pourriez vous me donner des pistes?
Mise en situation : j'ai plusieurs programmes où j'ai une fenêtre simillaire, pour faire des choses différentes, mais elles sont toutes fort proche d'un point de vue graphique et au niveau du fonctionnement, les grandes lignes sont simillaires, il y a juste dans certaines un peu plus de traitement que dans d'autres.
L'idée est de faire une fenêtre générique liée à un Datamodule générique que j'incluerais dans chaque projet puis, créer une fiche et un datamodule qui héritent de ceux générique. Enfin, dans les classes dérivées, je détaillerais les traitements spécifiques à réaliser.
J'ai donc créé à l'intérieur d'un nouveau projet reprennant ce type de fenêtre une fenêtre et un datamodule qui se veulent générique et j'ai créé une fiche et un datamodule qui en hérite.
Voici le contenu agrégé d'une des fonction de la "super" fiche, la classe mère:
Manipulation_Data est implémentée dans le datamodule générique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TSelectFrm.SelectObjet(Id_Personne, Id_Objet, application_name: String; SelAction: TObjetSelAction); begin With SelectXPersDM do begin // Fournit les requêtes derrière le dbGrid et PersQry SetSql_Qry(application_name); //Si nécessaire: manipule les données de DBGridProviderQry et effectue le changement de DataSet Manipulation_Data(application_name); // Fait le lien entre les colonnes du DBGrid et les champs du Datasource // ConstructionDBGrid end; end;
Voici son code:
J'ai déclaré les procédures de type Manipulation_Data_X comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 procedure TSelectXPersDM.Manipulation_Data(application_name: String); begin case AnsiIndexStr(application_name, ['Application_A', 'Application_B', 'Application_C']) of 0 : begin Manipulation_Data_Application_A; end; 1 : begin Manipulation_Data_Application_B; end; 2 : begin Manipulation_Data_Application_C; end; end; end;
L'idée est bien sur que les procédure de type Manipulation_Data_Application_X soit implémentée dans le datamodule (qui hérite du datamodule générique) de l'application X.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 protected { Déclarations protected } procedure Manipulation_Data_A; virtual; abstract; procedure Manipulation_Data_B; virtual; abstract; procedure Manipulation_Data_C; virtual; abstract;
Aussi, dans le datamodule qui hérite de celui générique, j'ai déclaré la procédure de cette manière :
Et là, j'ai un problème pour organiser tout cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public { Déclarations publiques } procedure Manipulation_Data_A; override ; end;
En suivant pas à pas dans le code, je passe bien par les fonctions génériques mais une fois dedans, je ne sais pas comment faire pour faire appel à des fonctions plus spécifique définie dans la sous classe ( le datamodule qui hérite ).
C'est la première fois que j'essaye de faire ce type de chose (créer une fenêtre générique destinée à être héritée afin de compléter certains traitement), il s'agit là d'un test.
Pouvez vous me conseillez sur la manière de faire?
Merci
Seb7710
Partager