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

Lazarus Pascal Discussion :

Gestion TEdits+TSpeedButtons dans un Tpanel


Sujet :

Lazarus Pascal

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Gestion TEdits+TSpeedButtons dans un Tpanel
    Bonjour,

    Pour simplifier la gestion de mon IHM, j'ai placé des composants dans un TPanel que j'ai géré par une procédure placée dans une autre unit que celle qui contient la Form.
    Dans un premier temps, dans une Form1, je place un Panel1 qui contient 1 Tedit et un TSpeedbutton (les 2 dans le TPanel).
    Ensuite dans cette Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Panel1.Enabled := False;
    produit le résultat attendu : Edit1 --> Disabled mais (malheureusement) le SpeedButton1 reste Enabled.

    J'ai donc créé une procédure de ce type placée dans une autre unité : Je n'ai pas réussi à faire plus simple.
    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
    procedure PanelEnabled(aPanel : TPanel; bEnabled : boolean);
    var
      i : integer;
      aForm : Tform;
    begin
     aForm := TForm(aPanel.Parent);
     aPanel.Enabled := bEnabled;
     with aForm do begin
      for i := 0 to ComponentCount -1 do
       if Components[i] is TEdit then begin
        if TEdit(Components[i]).Parent.Name = aPanel.Name then
         TEdit(Components[i]).Enabled := bEnabled;
       end else if Components[i] is TlzSpeedButton then
        if TlzSpeedButton(Components[i]).Parent.Name = aPanel.Name then
         TlzSpeedButton(Components[i]).Enabled := bEnabled;
     end;
    end;
    Bon, il n'y a pas les sécurités ni les vérifications nécessaires (Ex. si le TPanel n'a pas directement pour parent la Form). Le code fonctionne...

    ...mais je ne comprends pas :
    1. Pourquoi faut-il faire dans ce cas précis une boucle sur le TEdit alors que dans la TForm ce n'est pas nécessaire : Dans le premier code, "Panel1.Enabled := False;" agit directement et automatiquement sur le TEdit, mais dans le second code, sans les lignes rouges, le Tedit du TPanel reste obstinément actif.. Du coup, le code a moins d'intérêt s'il faut inventorier tous les composants contenus dans le TPanel... La procédure avait pour but de régler le problème des TSpeedButtons uniquement. Si maintenant, il faut gérer, les Tedits, les TMemos...
    2. Pourquoi le code "aForm.aPanel.Enabled :=...." plante alors que le même code avec "With aForm do aPanel.Enabled :=..." passe.

    C'est certainement un problème d'héritage dans les 2 cas, mais plus précisément ? Le fait que je fasse appel à des objets "génériques"( le aForm, le aPanel), semble ,en [F9], ne pas permettre à la form d'exécuter des traitements automatiques sur les objets dont ils sont les parents. Pourtant un aForm := TForm(aPanel.Parent); appliquée à Panel1 de Tform1 indique bien la bonne Form... Alors pourquoi cela serait-il différent des objets dont le Parent est le Tpanel (les Tedits en l'occurrence) ?


    Globalement pour la gestion de l'état de l'affichage de "secteurs" de la Form (Enabled, Visible), y-a-il une méthode plus adaptée que les TPanels sachant que j'utilise les ancres dans toutes mes Forms ? Il ne faut pas qu'une amélioration de la gestion des Enabled et Visible m'amène à me compliquer la tâche ou à faire des concessions avec les ancres...
    Cordialement. Gilles
    Dernière modification par Invité ; 28/06/2011 à 15h40. Motif: Syntaxe + 1 erreur ds le code 2 sans incidence sur la question

Discussions similaires

  1. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  2. [Sécurité]Gestion des accès dans plusieurs bases
    Par vincentj dans le forum Débuter
    Réponses: 1
    Dernier message: 05/01/2005, 14h19
  3. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44
  4. Gestion du blit dans un moteur2D
    Par Fry dans le forum DirectX
    Réponses: 2
    Dernier message: 01/11/2004, 02h05
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20

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