Bonjour à tous,
C'est par pure commodité, afin de remédier à l'oubli de remettre la bonne ActivePage dans l'IDE quand je modifie 1 autre page
Mon problème est que le PageControl est dans 1 frame, et mon inexpérience de cette particularité me fait perdre bcp de temps... Les quelques essais qui "passent" à la compil ne me satisfont pas entièrement : c'est bien la bonne page qui s'affiche, mais un traitement préalable à l'apparition de la frame provoque 1 exception ( ... lecture de l'adresse ...) - Cette exception ne se produit pas si la bonne page est active dans l'IDE lors de la compil.
Bref, où intervenir et en quels termes ?
Merci par avance.
La déclaration issue d'un post (~2010) sur le forum que je n'ai pas retrouvé (ou su chercher)
La partie création
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 unit FBMframe00; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TFrameClass = class of TFrame; TFrameType = (ftTypeDB,ftTypeTB,ftTypeSQL); IMyInterface0 = interface(IInterface) // onglet type DB ['{85B6F6B6-8E48-4438-BB3F-0091612344CC}'] // procedure monAction; end;
Le début de la frame:
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 function TForm1.addTabsheet(APageControl: TPageControl; FrameType: TFrameType):TTabSheet; const CTABNAME = 'TAB%d'; CFRAMENAME = 'FRAME%d'; var AFrame: TFrame; CFrame: TComponent; begin Result := TTabSheet.Create(APageControl); Result.PageControl := APageControl; // Result.Visible:=False; // Result.TabVisible:=False; Inc(tabCount); Result.Name := format(CTABNAME,[tabCount]); Result.Caption := TDBinfos(DBinfosList[CurrentDB]).Alias; Result.Hint:=CurrentUser+'@'+TDBinfos(DBinfosList[CurrentDB]).serveur; Result.ParentShowHint:=False; TDBinfos(DBinfosList[CurrentDB]).LastUse:=Now; case FrameType of ftTypeDB : begin AFrame := TFrameClass(findClass('TAncestorFrame0')).Create(Result); end; end; AFrame.Name := format(CFRAMENAME,[tabCount]); AFrame.Parent := Result; AFrame.Align := alClient; Result.ImageIndex:=AddBmpToImageList(TDBinfos(DBinfosList[CurrentDB]).visuel); APageControl.ActivePageIndex := Result.PageIndex; CFrame := FocusedFrame; if Assigned(CFrame) then if Supports(CFrame,IMyInterface0) then begin (CFrame as TAncestorFrame0).PageControl4.TabIndex:=0; // <<< résultat OK mais exception avant affichage (CFrame as TAncestorFrame0).InitConnexion(CurrentDB); end; end;
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 unit FBMframeDB; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, StdCtrls, ComCtrls, ToolWin, NxColumnClasses, NxColumns, NxScrollControl, NxCustomGridControl, NxCustomGrid, NxGrid, Buttons, ExtCtrls, SynEdit, SynEditHighlighter, SynHighlighterSQL,FBMframe00, FBMframeTB,FBMframeSQL, uiblib, FBMdm, StrUtils, uib, UIBMetaData,TypInfo, Vcl.Menus, Vcl.Samples.Spin, System.ImageList, NxEdit, Data.DB, uibdataset,ShellAPI, NxCollection, Vcl.Imaging.pngimage, SynMemo, PDJRotoLabel, DosCommand; type TAncestorFrame0 = class(TFrame,IMyInterface0) Panel2: TPanel; Splitter2: TSplitter; Panel3: TPanel; PageControl4: TPageControl; // << le pagecontrol concerné TabSheet13: TTabSh
Partager