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)

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;
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
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;
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
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