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

Langage Delphi Discussion :

Bloquer une fiche pendant son chargement


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut Bloquer une fiche pendant son chargement
    Bonjour,
    J'ai une fiche comportant de nombreux composants.
    En conception, tous ces composants sont visibles et accessibles,
    au chargement de la fiche, certains d'entre eux sont masqués ou désactivés (en fonction de l'utilisateur).
    Je souhaiterais, par exemple :
    - interdire le clic sur un bouton pendant le chargement de l'écran.
    - interdire l'utilisation des raccourcis sur un RadioGroup.
    Quelle méthode puis-je utiliser ?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Essayes d'initialiser à la conception à enabled:=false les trucs sur lesquels tu veux interdire la prise en compte des clicks lors du chargement.
    Puis tu les bascules à enabled:=true tout à la fin du FormShow.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Le problème avec cette solution c'est que je ne peux pas simuler par code un clic sur un bouton, ou pré-sélectionner une option dans une RadioGroup car ils ne sont pas enabled.

  4. #4
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Désolé, je ne suis pas.

    Est-ce que tu veux dire que ta form s'affiche très lentement (???). J'ai pour ma part plein de fenêtres ou j'ai des contrôles que l'utilisateur ne voit que lorsqu'il a créé certains évènements ou répondu à certaines questions.

    J'aimerais mieux saisir ton soucis. Pourquoi simuler un clic sur un bouton puisqu'il semble que tu veuilles l'interdire ?
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Non je n'ai aucun soucis de lenteur.

    Prenons l'exemple de ma RadioGroup :
    A la création de la form elle est active, puis en fonction de l'utilisateur connecté :
    1- je simule un clic sur tel ou tel bouton radio.
    2- je masque ou non la RadioGroup.
    Le problème est qu'entre l'instruction 1 et 2, l'utilisateur peut utiliser le raccourci permettant de modifier la sélection.

    Idem pour les boutons :
    Ils sont actifs à la création,
    on simule des clics par code au chargement,
    puis on les masque.
    Mais avant qu'ils soient masqués, l'utilisateur a le temps de cliquer.

  6. #6
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut,
    Je ne comprends pas trop le terme simulation de clic mais à mon avis, il faut voir la façon ou tu code les restrictions.
    Ce que je fais d'habitude, c'est une procedure/fonction genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function frmEdition.execute(aSecurity : TSecurity) : Boolean;
    begin
       with aSecurity do
       begin
          // ici tu enable/disable ce que tu veux
         // tu hide/unhide ce que tu veux
       end;
       // apres affichage (ici modale)
       showModal;
       Result := ModalResult = mrOk;
    end;
    voila.
    On progresse .....

  7. #7
    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
    Citation Envoyé par dim07 Voir le message
    Prenons l'exemple de ma RadioGroup :
    A la création de la form elle est active, puis en fonction de l'utilisateur connecté :
    1- je simule un clic sur tel ou tel bouton radio.
    tu utilise des radion séparé ou un groupradio?
    comment tu fait la simulation?
    Citation Envoyé par dim07 Voir le message
    2- je masque ou non la RadioGroup.
    ce radio, est utlisé par l'utilisateur ou simplement pour gardé une trace?

    Citation Envoyé par dim07 Voir le message
    Le problème est qu'entre l'instruction 1 et 2, l'utilisateur peut utiliser le raccourci permettant de modifier la sélection.
    oioi, c'est Flash qui est l'utilisateur??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  8. #8
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Bonjour

    Citation Envoyé par dim07 Voir le message
    Le problème avec cette solution c'est que je ne peux pas simuler par code un clic sur un bouton, ou pré-sélectionner une option dans une RadioGroup car ils ne sont pas enabled.
    Euuuu..... le fait qu'un controle soit enabled=False, n'empeche pas de le manipuler dans le code.

    Si par simuler tu penses "activer le click" via programmation, alors Enabled=False, voir meme visible = False, n'ont pas d'incidences.

    Si j'ai bien compris, lors du chargement de ta fiche(chargement qui prend assez de temps pour que l'utilisateur puisse reussir a interagir avec les composants), il y a une espece de phase d'initialisation, durant laquelle,
    tu veux empecher l'utilisateur d'interagir avec tout ou partie des composants.

    Moi je procede de la facon suivante
    1 - A la conception, tous les composants sont Enabled := False
    2 - Dans le OnCreate de la fiche je bascule Tag à -1
    3 - Dans le OnActivate je verifie si Tag=-1 alors j'appelle la procedure d'initialisation
    4 - La Procedure d'initialisation doit remettre Enabled à true pour les composants necessaire, mais a la fin de son travail uniquement(pour eviter une interaction perturbatrice).
    5 - Avant de quitter le OnActivate, je bascule Tag à 0.
    Cela donne un truc du genre
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    type
      TForm1 = class(TForm)
        Button1_a: TButton;
        RadioGroup1: TRadioGroup;
        Edit1: TEdit;
        Button2_b: TButton;
        procedure Button1_aClick(Sender: TObject);
        procedure Button2_bClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormActivate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        Procedure Initialiser;
      end;
     
    var
      Form1: TForm1;
      User:String;
     
    implementation
     
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      User := '';//Fonction qui donne le nom, les droits de l'utilisateur
      Tag := -1;
    end;
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      If Tag = -1
      Then Begin
        Initialiser;
        Tag := 0;
      End;
    end;
     
    Procedure TForm1.Initialiser;
    Var 
      B1,B2,Edit:Boolean;
    Begin
      B1 := False;B2 := False;Edit := False;
      If User='albert'
      Then Begin
        RadioGroup1.ItemIndex := 4;
      End
      Else RadioGroup1.ItemIndex := 3;//On peut y acceder et pourtant RadioGroup1.Enabled est FALSE
      If 1>2
      Then Begin
        Button1_aClick(Nil);
        B2 := True;
      End
      Else Begin
        Button2_bClick(Self);//Je simule un clic et pourtant Button2_b.Enabled est False, ainsi que RadioGroup1.Enabled 
        B1 := True;
      End;
      If 'a'<'b'
      Then Begin
        Edit1.Text := 'Ok';
        Edit := True;
      End;
     
     //On bascule les composants autorisés à True.
     //En fin de procedure cela permet d'aller vite et l'utilisateur n'aura donc pas le temps de cliquer sur un control alors que l'initialisation n'est pas terminée.
      Button1_a.Enabled := B1;
      Button2_b.Enabled := B2;
      Edit1.Enabled := Edit;
     
    End;
     
    procedure TForm1.Button1_aClick(Sender: TObject);
    begin
      RadioGroup1.ItemIndex := 0;
    end;
     
    procedure TForm1.Button2_bClick(Sender: TObject);
    begin
      RadioGroup1.ItemIndex := 1;
    end;
    Autre possibilité, dans le OnCreate tu peux mettre DONC POUR TOUTE LA FICHE. Ainsi tes composants n'auront pas besoin d'etre Enabled False, a la conception.

    Mais quand la procedure d'initialisation sera terminée, faudra faire Sinon ta fiche ne sera jamais accessible.

    Je te suggere FORTEMENT de faire un truc du genre
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      User := '';//Fonction qui donne le nom, les droits de l'utilisateur
     
      Enabled := False;//a la fin du OnCreate
      Tag := -1;
    end;
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      If Tag = -1
      Then Begin
        Try
          Initialiser;
        Finally
         Tag := 0;
         Enabled := True;//Quoi qu'il arrive, la fiche redeviendra active
        End;
      End;
    end;
     
    Procedure TForm1.Initialiser;
    Begin
      ...
    End;

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    J'ai mis en place ta suggestion Teo et à première vue, tout fonctionne correctement.
    Merci à tous

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

Discussions similaires

  1. Bloquer une fenètre pendant chargement
    Par donnadieujulien dans le forum Débuter
    Réponses: 1
    Dernier message: 22/06/2008, 15h36
  2. affichage d'une page pendant son chargement
    Par boss_gama dans le forum ASP
    Réponses: 3
    Dernier message: 17/08/2006, 18h04
  3. [Conception] Comment faire pour bloquer une valeur pendant 24H
    Par lolodelp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/07/2006, 15h46
  4. Bloquer une form pendant un chargement
    Par eponette dans le forum Delphi
    Réponses: 7
    Dernier message: 20/06/2006, 17h41

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