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

Composants VCL Delphi Discussion :

[D2007][VCL-Win32] Comment empêcher de sortir d'une zone d'édition ?


Sujet :

Composants VCL Delphi

  1. #1
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut [D2007][VCL-Win32] Comment empêcher de sortir d'une zone d'édition ?
    Bonjour,


    Je voudrais savoir comment empêcher de sortir d'une zone d'édition vide lorsque je clique sur un bouton ou sur le bouton dropdown d'un lookupcombo... Apparemment, le OnClick du bouton ou du dropdown est exécuté avant le OnExit du contrôle d'édition. Comment gérer ça facilement ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Salut,

    ben si t'es sûr de ton coup quant au timing des évènements, moi je ferais, sur le OnClick du bouton,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if Edit1.Text = '' then Edit1.SetFocus;
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Ben ça je me doute bien... Mais ça n'empêche pas l'exécution de la suite du code dans le OnClick. Et de plus j'ai plusieurs edit / boutons / lookupcombos !
    C'est sûr qu'avec une seule zone d'édition et un bouton c'est très facile.

    J'ai bien trouvé un début de solution en jouant avec des booleens et avec abort dans les events OnClicks des boutons et OnInitPopup des lookup, et en gérant les OnEnter/OnExit des zone d'édition, mais ça devient vite ingérable quand il y a beaucoup de compos sur le form. J'imagine qu'il doit y avoir une solution plus simple...


    Ce que je veux faire :
    Si j'ai par exemple 2 zones d'éditions, 4 lookup et 2 boutons (post / cancel)
    Je veux que l'on ne puisse sortir de la zone 1 que si elle est remplie, et qu'ensuite ce soit la zone 2 qui prenne le focus, et ainsi de suite jusqu'au lookup n° 4... le tout en autorisant le cancel à n'importe quel moment, et aussi avec la possibilité de rééditer une zone déjà remplie "en amont".

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Salut,

    dans un vieux projet j'avais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TfrmSaisie.alerte_edit_vide(Sender: TObject);
    begin
      if (Sender as TEDit).Text = '' then begin
        Beep;
        ShowMessage('Ce champ ne peut pas être vide !');
        (Sender as TEdit).SetFocus;
        end;
    end;
    Cette procédure était assignée au OnExit de tous mes Edit, et quand je cliquais sur un bouton elle était appelée (et fonctionnait).
    Mes 2 cts,
    --
    jp
    PS : pourquoi j'écris à l'imparfait ? Je viens de tester, ça fonctionne encore...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Oui ça fonctionne peut-être mais ça n'empêche pas le code du click de s'exécuter ! Essaie de mettre un ShowMessage dans le Onclick du bouton et tu verras qu'il est exécuté avant le OnExit de ton DBTextEdit. Idem si tu utilises des LookUpCombo. Le code dans le OnExit de ton DBTextEdit n'empêchera pas l'ouverture du DropDown de ta LookUpCombo...

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Truc de test vite torché :
    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
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure alerte_edit_vide(Sender: TObject);
      private
    (...)
     
    procedure TForm1.alerte_edit_vide(Sender: TObject);
    begin
      if (Sender as TEDit).Text = '' then
      begin
        Beep;
        ShowMessage('Ce champ ne peut pas être vide !');
        (Sender as TEdit).SetFocus;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('blah');
    end;
    Jamais vu de blah, que je sorte de l'Edit avec <TAB> ou que je clique sur le bouton...
    Bon, je n'ai qu'un TEdit et pas un DBTextEdit, ceci explique peut-être cela ?
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Oui avec le Tbutton ca marche mais il est vrai qu'avec un TUpDown par exemple ca marche plus .. ca bugg meme carrement l'appli

    Peut tre qu'en interceptant tos les message appli et en autorisant leur execution uniquement si une variable boolean est a true (la mettre a false losque Edit.onExit + Edit.text = ""
    Peut etre une piste

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Oui c'est ce que j'ai fait, mais ça devient vite très lourd avec la multiplication des zones, avec des risques d'erreur importants. C'est vrai que la méthode de Jipété fonctionne avec un TButton, mais moi je clique sur des DBNavigator, des DBLookupComboBox, ... et là ça ne fonctionne pas !
    Je vais clôturer le post, je crois qu'il n'y aura pas d'autre solution que celle avec des booleans.
    Merci quand même ;-)

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    :s
    Si tu as vraiement beacoup de composants mais peu de composants differents, peut etre devrais tu derivé tes classes et implementer ca directement dans ton control, comme ca tu n'a plus a le gerer pour chaque composant, ca alegeré grandement ton code.

    Une autre solution est de faire une fonction a laquelle tu passe en paramettre le Edit dans lequel tu souhaite rester bloquer et qui met tous les autre composant fils qu'elle contient a Enabled := False;
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Je met ici un code qui ne fonctionne pas completement mais je doit partir et il doit pas y avoir une erreur enorme, juste une faute de logic de ma part.

    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
     
    Public
        Procedure Verouillage(Actif : Boolean;Himuno : TObject;FilsDe : TObject);
    [...]
     
    Procedure TForm1.Verouillage(Actif : Boolean;Himuno : TObject;FilsDe : TObject);
    //Posibilité pour Himuno de mettre une liste d'object
    Var I : Integer;
        PropInfo : ppropInfo ;
        FilsDeCompo : TComponent;
    begin
         FilsDeCompo := TComponent.Create(Self);
         FilsDeCompo := TComponent(FilsDe);
         For I := 0 To FilsDeCompo.ComponentCount -1 Do
         Begin
              If FilsDeCompo.Components[I] <> TComponent(Himuno) Then
              begin
                   PropInfo := GetPropInfo(FilsDeCompo.Components[I].classInfo, 'Enabled');
                   If propInfo <> nil then
                      If Actif Then
                         If Not Boolean(propInfo) Then  //deja a false
                            FilsDeCompo.Components[I].Tag :=1
                         Else
                         begin
                              FilsDeCompo.Components[I].Tag := 2;
                              setOrdProp(FilsDeCompo.Components[I], PropInfo, Integer(False));
                         end
                      Else //Not Actif  (on remet comme avant)
                      begin
                           If FilsDeCompo.Components[I].Tag = 2 Then
                              setOrdProp(FilsDeCompo.Components[I], PropInfo, Integer(True));
                           FilsDeCompo.Components[I].Tag :=0;
                      end;
              end;
         end;
    end;
     
    [...]
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
         If Edit1.Text = '' Then Verouillage(True,Sender,Form1) Else Verouillage(False,Sender,Form1);
    end;
    Ce code verouille (enable:=False) tout les composants FilsDe sauf le compo himuno
    Il faut rajouter typInfo aux uses

    On peut certainement amelioré sont appelle, edit1.change est peut etre pas la mailleur solotion
    A++
    Qwaz
    Ps je corrigerai mon code si personne ne l'a fait et si je rentre pas trop tard

    [Edit Voila c'est fait le code est fonctionnel, il peut etre amelioré en mettant par exemple une liste de compos dans Himuno, mais bon ca, je suis pas sur que ca t'interesse[/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/11/2012, 17h40
  2. Comment empêcher l'interaction avec une fenêtre ?
    Par natus dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 23/12/2011, 21h30
  3. Comment empêcher l'historisation d'une ou plusieurs commandes ?
    Par hisoft dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 27/04/2010, 15h11
  4. Comment empêcher la modification d'une vue
    Par khayyam90 dans le forum Administration
    Réponses: 1
    Dernier message: 13/02/2010, 22h43
  5. [XHTML 1.0] Comment empêcher le contenu d'une page html?
    Par kaselander dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/02/2009, 17h13

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