IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Ordre des panels à (visible := True) [FAQ]


Sujet :

Delphi

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut Ordre des panels à (visible := True)
    Salut,

    je développe un soft avec Delphi 2006 sous WinXP.

    J'ai Cinq panels nommés :
    - Panel_1
    - Panel_2
    - Panel_3
    - Panel_4
    - Panel_5

    Ils sont dans un ScrollBox et ont tous la propriété Align := alTop. Panel_1 étant le panel le plus haut et les autres le suivant de façon croissante.

    J'utilise le code suivant pour les cacher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Panel_1.Visible := False;
    [...]
    Panel_5.Visible := False;
    Puis je les rend à nouveau visible et c'est LÀ que ce situe l'énigme !!!

    En effet, en les rendant à nouveau visible, ils se retrouvent dans le désordre, MAIS TOUJOURS le même désordre !!!
    - Panel_2
    - Panel_4
    - Panel_1
    - Panel_5
    - Panel_3

    Pourtant :
    - alphabétiquement,
    - suivant le TabOrder,
    - ayant tous (panels) la même configuration,
    - ...
    ... ils ne devraient pas se trouver dans cet ordre !!!

    Franchement j'y perds mon latin !!! ... encore aurait il fallu que j'en connaisse un traitre mot ...

    Si un Sherlock Holmes lisait cette énigme, j'attends avec impatience la conclusion de son enquête !

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    As-tu essayé de les remettre visible dans l'ordre du haut vers le bas ? (j'imagine que oui )

    Et si tu mets des Showmessage entre les visible := true pour stopper l'exécution, est-ce que les panels s'emboîtent correctement ou si à un moment y'en a un qui se place entre deux autres ?

    Merci!

  3. #3
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par slimjoe
    As-tu essayé de les remettre visible dans l'ordre du haut vers le bas ? (j'imagine que oui )
    En effet, c'est par là que j'ai commencé.

    Citation Envoyé par slimjoe
    Et si tu mets des Showmessage entre les visible := true pour stopper l'exécution, est-ce que les panels s'emboîtent correctement ou si à un moment y'en a un qui se place entre deux autres ?
    J'ai mis des Application.ProcessMessage entre chaque panel que je rend visible ... mais ça les met toujours dans le désordre ...

    Cependant, j'ai déjà pu remarquer que chaque form attribuait un numéro unique à chacun de ses composants ... y a t'il moyen de changer ce numéro, car c'est peut-être d'après cet ordre que se placent les panels.

  4. #4
    Membre habitué Avatar de maamar1979
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Points : 134
    Points
    134
    Par défaut
    tu affiche tes pannel comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    panel1.Visible:=true
    panel1.Visible:=true
    ...
    panel5.Visible:=true
    puis tu les reordonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    panel5.SendToBack;
    panel4.SendToBack;
    ...
    c'est tt. salam

  5. #5
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par maamar1979
    tu affiche tes pannel comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    panel1.Visible:=true
    panel1.Visible:=true
    ...
    panel5.Visible:=true
    puis tu les reordonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    panel5.SendToBack;
    panel4.SendToBack;
    ...
    c'est tt. salam
    Ca ne fonctionne pas ... ça me les met toujours dans le désordre ...

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    alTop : ils n'essayeraient pas tous d'être en haut ?

    essaye alNone ?

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Citation Envoyé par Slimjoe
    Et si tu mets des Showmessage entre les visible := true pour stopper l'exécution, est-ce que les panels s'emboîtent correctement ou si à un moment y'en a un qui se place entre deux autres ?
    Citation Envoyé par xenos
    J'ai mis des Application.ProcessMessage entre chaque panel que je rend visible ... mais ça les met toujours dans le désordre ...

    Essaye de mettre un showmessage entre les visible := true pour voir si c'est un problème lié au rafraîchissement ou un truc du genre. Application.ProcessMessages ne règlera pas un problème lié au WS_PAINT de la fiche.

    Aussi, peut-être pourrais-tu jouer avec la propriété Top des panels une fois qu'ils sont visibles. Il ne s'agit pas de les positionner vraiment mais de les séparer de façon à ce qu'ils s'emboîtent correctement avec le Align.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Panel1.Top := 0;
    Panel2.Top := (self.height div 5);
    Panel3.Top := (self.height div 5) * 2;
    Panel4.Top := (self.height div 5) * 3;
    Panel5.Top := (self.height div 5) * 4;

  8. #8
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Bonjour
    Pas facile
    J'ai fait plusieurs tentatives
    On dirait que la position des panels est parfois anarchique au moment du réaffichage... sans qu'on sache pourquoi

    As-tu essayé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i:=0 to scrollbox1.ControlCount-1 do
        scrollbox1.Controls[i].Visible:=true;
    Des fois que l'ordre de la boucle for to influerait sur le résultat

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    essye de les rendre invisible dans le sens croisssant et les remetre dans le sans decroissant

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Je viens de faire le test à partir d'un nouveau projet et je n'ai pas remarqué le comportement que tu décris.

    Manipulation:

    1- Création d'un nouveau projet
    2- Ajout d'un TScollBox sur la fiche principale
    3- Ajout des Tpanel dans l'odre 1,..,5 en veillant à ajouter align = onTop
    4- Ajout de deux boutons
    ---> le premier destiné à rendre invisible les panels dont le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      panel5.Visible := false;
      panel4.Visible := false;
      panel3.Visible := false;
      panel2.Visible := false;
      panel1.Visible := false;
    ---> le second destiné à rendre visible les panels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      panel1.Visible := true;
      panel2.Visible := true;
      panel3.Visible := true;
      panel4.Visible := true;
      panel5.Visible := true;
    Vérifie, l'odre dans lequel tu as créé et ajouté tes panels.
    ==> Pour cela, va voir dans le dfm.

    Voici ici une partie du contenu du dfm de mon projet exemple:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    object Form1: TForm1
      Left = 177
      Top = 229
      Width = 870
      Height = 640
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object ScrollBox1: TScrollBox
        Left = 24
        Top = 24
        Width = 449
        Height = 289
        TabOrder = 0
        object Panel1: TPanel
      Left = 0
          Top = 0
          Width = 445
          Height = 33
          Align = alTop
          Caption = 'Panel1'
          TabOrder = 0
        end
        object Panel2: TPanel
      Left = 0
          Top = 33
          Width = 445
          Height = 41
          Align = alTop
          Caption = 'Panel2'
          TabOrder = 1
        end
        object Panel3: TPanel
      Left = 0
          Top = 74
          Width = 445
          Height = 41
          Align = alTop
          Caption = 'Panel3'
          TabOrder = 2
        end
        object Panel4: TPanel
          Left = 0
          Top = 115
          Width = 445
          Height = 46
          Align = alTop
          Caption = 'Panel4'
          TabOrder = 3
        end
        object Panel5: TPanel
      Left = 0
          Top = 161
          Width = 445
          Height = 41
          Align = alTop
          Caption = 'Panel5'
          TabOrder = 4
        end
      end
    ....
    Vérifie donc si l'ordre dans ton dfm correspond à celui du code ci-dessus

    Cordialement

  11. #11
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci à tous pour votre aide !!!

    En combinant vos suggestions j'y suis arrivé !!!

    Citation Envoyé par Pascal Jankowski
    Vérifie, l'odre dans lequel tu as créé et ajouté tes panels.
    ==> Pour cela, va voir dans le dfm.
    En effet, mes panels étaient dans le désordre, je les ai donc mis en ordre croissant. Mais ce n'était pas suffisant.

    Citation Envoyé par edam
    essye de les rendre invisible dans le sens croisssant et les remetre dans le sans decroissant
    Je me suis insipiré de ce que tu as dis, j'ai donc rendu invisible en commancant par la fin et rendu visible en commencant par le début.

    Après cette dernière manipulation, tout à correctement fonctionné.

  12. #12
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par OutOfRange
    As-tu essayé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i:=0 to scrollbox1.ControlCount-1 do
        scrollbox1.Controls[i].Visible:=true;
    Non, je n'ai pas pu le mettre en oeuvre étant donné qu'il y a d'autres panels en plus des 5 sur le ScrollBox.

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par xenos
    En effet, mes panels étaient dans le désordre, je les ai donc mis en ordre croissant. Mais ce n'était pas suffisant.
    Cela fonctionne également avec ce que j'ai indiqué dans mon message :

    Ajout de deux boutons
    ---> le premier destiné à rendre invisible les panels dont le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      panel5.Visible := false;  
      panel4.Visible := false;  
      panel3.Visible := false;  
      panel2.Visible := false;  
      panel1.Visible := false;
    ---> le second destiné à rendre visible les panels


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      panel1.Visible := true;  
      panel2.Visible := true;  
      panel3.Visible := true;  
      panel4.Visible := true;  
      panel5.Visible := true;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage des kml : visibility : true et visibility : false
    Par sig_PNRun dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 20/05/2012, 16h33
  2. Mon panel ne veut pas se mettre en Visible=true
    Par yonialhadeff dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/06/2007, 11h14
  3. Modifier l'ordre des cartes son
    Par YéTeeh dans le forum Matériel
    Réponses: 3
    Dernier message: 19/08/2003, 01h13
  4. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo