Bonjour, je suis nouveau dans ce forum.
J'expose mon problème: je développe une application BDD dont l'interface est au style firefox par exemple, donc il y a des frames qui constituent les fiches en question et dont le parent est affecté à un PageControl dont les tabs sont masqués.
l'invocation de chaque fiche (frame dans ce cas) est situé dans un TAction, l'appel est du genre:
où CreatePage est une méthode de classe que j'ai créé dans la classe de base des frames nommée TBaseFrame dont le source est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part TfrmListeEmployes.CreatePage(MainPC, Action1, nil);
TfrmListeEmployes est une classe qui hérite de la classe de base TBaseFrame du genre:
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 unit U_BaseFrame; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList, ComCtrls, dxBar; type TDerivedPageControl= class(TPageControl); TBaseFrame = class(TFrame) private fFrameCreated: Boolean; fCaption: String; fIsMultiInstance: Boolean; procedure SetCaption(Val: String); procedure SetIsMultiInstance(Val: Boolean); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; // class procedure CreatePage(AOwnerPageControl: TPageControl; LinkAction: TAction; BarApplicationMenu: TdxBarApplicationMenu); virtual; // property Caption: String read fCaption write SetCaption; property IsMultiInstance: Boolean read fIsMultiInstance write SetIsMultiInstance; end; implementation {$R *.dfm} var NewFrame: TBaseFrame; class procedure TBaseFrame.CreatePage; var NewTabSheet: TTabSheet; begin if Assigned(NewFrame) then begin AOwnerPageControl.ActivePageIndex:= LinkAction.Tag; // Page déjà ouverte ! TDerivedPageControl(AOwnerPageControl).Change; Abort end; if LinkAction= nil then Abort; try Screen.Cursor:= crHourGlass; NewFrame:= TBaseFrame.Create(AOwnerPageControl.ActivePage); NewTabSheet:= TTabSheet.Create(AOwnerPageControl); with NewTabSheet do begin TabVisible:= false; PageControl:= AOwnerPageControl; with PageControl do begin ActivePage:= NewTabSheet; ActivePage.Hide; NewFrame.Parent:= ActivePage; ActivePage.Caption:= NewFrame.Caption; NewTabSheet.Update; ActivePage.Show; LinkAction.Tag:= ActivePageIndex; TDerivedPageControl(AOwnerPageControl).Change; // if Assigned(BarApplicationMenu) then with BarApplicationMenu.ExtraPane.Items.Add do Text:= Caption end end; finally Screen.Cursor:= crDefault end end; procedure TBaseFrame.SetIsMultiInstance; begin fIsMultiInstance:= Val end; procedure TBaseFrame.SetCaption; begin fCaption:= Val end; constructor TBaseFrame.Create(AOwner: TComponent); begin SetIsMultiInstance(false); SetCaption('Page vide'); fFrameCreated:= true; inherited Create(AOwner) end; destructor TBaseFrame.Destroy; begin fFrameCreated:= false; inherited Destroy end; end.
bien sur j'ajoute les composants spécifique que je veux dans chaque classe héritant de TBaseFrame. le problème que j'ai est dans l'appel de la fonction CreatePage(...), elle me crée toujour une instance de la classe de base TBaseFrame, ce qui est logique en fonction de la façon dont je l'ai codée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TfrmListeEmployes= class(TBaseFrame) ... .. . end;
Si vous avez une idée comment faire pour rendre cette fonction valide pour chaque classe qui hérite de la classe de base TBaseFrame, c.a.d modifier cette ligne:
de la fonction CreatePage par une autre dont j'arrive pas à la faire, j'ai pensé à utiliser RegisterClass et FindClass mas j'ai pas abouti au résultat voulu!
Code : Sélectionner tout - Visualiser dans une fenêtre à part NewFrame:= TBaseFrame.Create(AOwnerPageControl.ActivePage);
du help S.V.P
Merci.
Partager