Vous allez dire que j'abuse, mais comment une chose pareille est-elle possible ?
Soit une fiche avec dessus un TPageControl et 2 TabSheets ("clic-droit / nouvelle page" 2 fois), un bouton et une case à cocher sur TabSheet1, un timer, et c'est tout.
Trois événements à gérer :
- le PageControl1Change, mandatory sinon les TabSheetEnter ne sont pas pris en compte, et encore, ça dépend du contexte, voir + bas ; incroyable mais vrai !
- l'entrée dans le TabSheet1, qui va activer
- l'arrivée dans le Timer (interval à 2 sec, histoire de bien voir les changements) qui nous affiche l'heure.
Ce que je constate, c'est que l'événement TabSheet1Enter est pifométriquement pris en compte, en fonction de critères qui m'échappent, regardez les commentaires dans PageControl1Change :
Si le fait de mettre le focus à un bouton fait passer par le "Enter" du TabSheet concerné, j'ai pensé que basculer une case à cocher le ferait aussi, mais non... Quant à la mise à l'heure, je me doutais bien que ça n'irait pas.
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 TForm1 = class(TForm) Button1: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Timer1: TTimer; procedure PageControl1Change(Sender: TObject); procedure TabSheet1Enter(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } bTabSheet1Enter: boolean; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.PageControl1Change(Sender: TObject); begin case PageControl1.ActivePageIndex of 0: Button1.SetFocus; // passe dans TabSheet1Enter //0: Checkbox1.Checked:=True; // ne passe pas dans TabSheet1Enter //0: Caption := TimeToStr(Now); // ne passe pas dans TabSheet1Enter 1: Caption := TimeToStr(Now); end; end; procedure TForm1.TabSheet1Enter(Sender: TObject); begin Caption := 'onglet '+ TimeToStr(Now); bTabSheet1Enter := True; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if bTabSheet1Enter then begin Caption := 'timer '+ TimeToStr(Now); bTabSheet1Enter := False; end; end;
Si quelqu'un pouvait m'expliquer, ça serait trop cool, parce que là, ça dépasse grandment mon entendement ! Grand merci par avance,
Partager