TPageControl onChange

PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021 - 9 oct. 2017 à 22:20
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 - 13 oct. 2017 à 11:16
Bonjour,
J'ai Plusieurs onglets dans un TPageControl.
J'utilise OnChange de ce composant pour exécuter des extractions, calculs et affichage de graphes lors de la sélection d'un onglet.
Je souhaite effectuer une action identique (pour rafraîchir l'écran) à l'aide d'un Timer.
Comment faut-il procéder?
Je constate aussi que de sélectionner manuellement le même onglet n'à aucun effet.
Il faut que je sélectionne un autre onglet, puis l'onglet ad-hoc pour que le rafraîchissement fonctionne.
Merci pour vos conseils ;-)
Phil

4 réponses

dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
10 oct. 2017 à 09:48
Bonjour
Comme cela, vu de nez, je ferai une proc avec le contenu du onChange et je la ferai exécuter par le timer.
Il semble normal que resélectionner le même onglet ne produise pas d'effet (pas de onchange)
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 oct. 2017 à 16:02
Bonjour,

Dubois77 a raison mais on peut provoquer l'évènement OnChange ;)
var
  I: Integer = 0;
procedure TForm2.PageControl1Change(Sender: TObject);
begin
  if (Sender is TPageControl) and (TPageControl(Sender).ActivePage = TabSheet2) then
  begin
    Inc(I);
    Label1.Caption := Format('Nombres de changements %d', [I]);
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  PageControl1Change(PageControl1);
end;


Cordialement,
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
10 oct. 2017 à 21:56
Bonsoir Cirec,
J'ai testé mais ne fonctionne pas :-(
Le but est de rafraîchir l'onglet déjà ouvert.

Peux-tu m'expliquer ton code?

Merci d'avance,
Phil
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
11 oct. 2017 à 15:31
Bonsoir Cirec,
J'ai testé mais ne fonctionne pas :-(
Le but est de rafraîchir l'onglet déjà ouvert.

Peux-tu m'expliquer ton code?


c'est difficile de dire pourquoi ça ne fonctionne pas chez toi étant donné que tu ne fournis pas de code (les capacités divinatoires ne font pas parties de mes compétences) ^^

trêve de plaisanterie, le code fonctionne à 100% le problème vient soit du contenu de ton évènement OnChange et/ou de son appel.

le code ci-dessus est très simple:
1 TPageControl avec plusieurs TabSheet
et j'ai décidé que le TabSheet2 serait celui qui doit exécuter un code.

Dans l'évènement OnChange du TPageControl je commence d'abord par tester Sender pour savoir si il est de type TPageControle
(Sender is TPageControl)

si oui et si la page active correspond à TabSheet2
(TPageControl(Sender).ActivePage = TabSheet2)
alors le code est exécuté (ici un simple incrément de I avec affichage du résultat).

dans le code du TButton je provoque l'appel à OnChage du PageControl
PageControl1Change(PageControl1)
et si la page active correspond à TabSheet2 ... le code est exécuté.

par contre si tu fais
PageControl1Change(nil)
le code entrera bien dans la procédure OnChange du TPageControl mais n'exécutera pas le code puisque
(Sender <> TPageControl)
et bien sur en procédant ainsi on peut réutiliser le même évènement OnChange pour un autre TPageControl
PageControl1Change(PageControl2)
par Ex.

voilà j'espère que c'est plus claire pour toi
c'est tout ce que je peux dire sans code de ta part ;)

Cordialement,
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
13 oct. 2017 à 11:16
Salut,

D'accord avec Cirec, un bout de code serait le bienvenu.

J'ai compris la question différemment, et donc je propose d'utiliser l'évènement OnMouseUp du TPageControl ainsi :

procedure TForm1.PageControl1Change(Sender: TObject);
begin
  ShowMessage('PageControl1Change');
end;

procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PageControl1Change(Sender);
end;


Ce code provoque l'évènement OnChange du TPageControl à chaque clic sur un onglet, quel qu'il soit, y compris l'onglet de la page active.

Cordialement,
0
Rejoignez-nous