TPageControl onChange

PhilLu 245 Messages postés lundi 9 novembre 2009Date d'inscription 10 octobre 2017 Dernière intervention - 9 oct. 2017 à 22:20 - Dernière réponse : korgis 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 10 oct. 2017 à 09:48
0
Utile
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)
Commenter la réponse de dubois77
Cirec 4191 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 10 oct. 2017 à 16:02
0
Utile
1
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,
PhilLu 245 Messages postés lundi 9 novembre 2009Date d'inscription 10 octobre 2017 Dernière intervention - 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
Commenter la réponse de Cirec
Cirec 4191 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 11 oct. 2017 à 15:31
0
Utile
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,
Commenter la réponse de Cirec
korgis 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention - 13 oct. 2017 à 11:16
0
Utile
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,
Commenter la réponse de korgis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.