TPageControl onChange

Signaler
Messages postés
251
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
11 mai 2021
-
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
-
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

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
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)
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
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,
Messages postés
251
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
11 mai 2021

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
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
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,
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
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,