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 :

[Composant] Un bouton qui ouvre une petite popup


Sujet :

Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut [Composant] Un bouton qui ouvre une petite popup
    Bonjour,

    Vous avez déjà vu ces composants où l'on voit par exemple un TEdit avec un petit bouton, et le fait de cliquer sur ce bouton ouvre la calculatrice juste en-dessous du bouton, ou idem avec un calendrier afin de choisir une date qui sera écrite dans le TEdit, etc. ?

    J'aimerais créer qqch de similaire pour créer un masque (style ###.00#). J'ai déjà une petite form pour créer le masque, mais je ne sais pas comment l'intégrer dans un composant.

    Voici une illustration de ce que j'ai actuellement. J'aimerais donc intégrer la form bleue de manière beaucoup plus pro juste en-dessous du bouton lorsqu'on clique sur celui-ci. De même, si on clique en-dehors de la form, ça la refermerait.



    Mais mon problème est donc de savoir comment faire ouvrir une fenêtre juste en-dessous du bouton, de quel composant hériter, etc. Donc je suis à la recherche de pistes.

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Soit TForm2, la fenêtre popup que l'on affiche en cliquant sur Button1 dans TForm1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with clientToScreen(Point(button1.Left, button1.Top + button1.Height)),
           TForm2.Create(nil) do
      try
        left := X;
        top := Y;
        showModal;
      finally
        Free;
      end;
    end;
    La propriété BorderStyle de TForm2 doit être à bsNone et il doit y avoir un moyen de sortir de TForm2 puisque l'affichage est modal.

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    J'étais déjà un peu parti dans cette direction, mais ça pose le problème que l'utilisateur ne peut pas fermer la form en cliquant à l'extérieur de celle-ci.

    Le fait de forcer à fermer la form en cliquant sur un "close" est trop contraignant à mon avis.

  4. #4
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Avec une frame alors :

    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
      TForm1 = class(TForm)
        ...
      private
        f : TFrame2;
        procedure FrameExit(Sender: TObject);
        ...
      end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      f := TFrame2.Create(self);
      f.Visible := false;
      f.OnExit := FrameExit;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with f do
      begin
        left := button1.Left;
        top := Button1.Top + button1.Height;
        parent := button1.Parent;
        visible := true;
        memo1.SetFocus;
      end;
    end;
     
    procedure TForm1.FrameExit(Sender: TObject);
    begin
      (sender as TFrame).Visible := false;
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  5. #5
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 152
    Points
    10 152
    Par défaut
    Moi je verrais plutôt une form non-modale, avec BorderStyle à bsNone, et le code suivant dans OnDeactivate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TSmallPopupForm.FormDeactivate(Sender : TObject);
    begin
      Close;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    J'ai essayé avec la form non-modale, mais ça ne fonctionne pas car j'appelle cette form depuis une autre qui est modale, donc la nouvelle form qui apparaît se masque automatiquement derrière la form principale modale.

    Je vais tenter avec les Frames en espérant avoir plus de succès.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Le plus logique (en terme de réutilisation de code, encapsulation des données et méthodes, maintenabilité) est de dériver un composant existant en lui ajoutant un compo interne de type TPanel ou TForm.

    Par exemple il est pratique d'ajouter une petite calculatrice au composant TEdit.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    ça ne fonctionne pas non plus avec les frames, rien n'apparaît (probablement à nouveau à cause du fait que ma form appelante est modale).

    Comme le dit le titre de mon sujet, j'aimerais quand même essayer de faire un composant que je puisse utiliser à plusieurs endroits très facilement.

    Citation Envoyé par Fabrice ROUXEL 1
    Par exemple il est pratique d'ajouter une petite calculatrice au composant TEdit.
    Oui, tu reprends l'exemple de mon premier message, mais j'ai besoin d'un peu plus de concret (c.f. mes questions dans mon premier post) : de quel composant partir ? comment y faire apparaître un panel facilement, etc.

    Tu suggères donc un TEdit avec un TPanel ajouté ? A ton avis c'est le mieux pour partir ? Car je dois également ajouter un TButton à côté du TEdit, et là je ne sais pas trop comment faire.

  9. #9
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par MiJack
    ça ne fonctionne pas non plus avec les frames, rien n'apparaît (probablement à nouveau à cause du fait que ma form appelante est modale).
    Non, ça marche aussi si la fenêtre est modale.

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  10. #10
    adc
    adc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Vous avez déjà vu ces composants où l'on voit par exemple un TEdit avec un petit bouton
    ==> comment est créé ce "petit bouton". Plus précisément Comment récupérer l'image de la flèche standard vers le bas ?

  11. #11
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par Bloon
    Non, ça marche aussi si la fenêtre est modale.

    Bloon
    Après plusieurs tests effectivement j'ai pu faire marcher ta proposition même sur une fenêtre modale.
    Mais la mise en place se révèle un peu lourde si je dois la répéter sur plusieurs forms. Je vais continuer à tenter de créer un composant pour simplifier tout ça.

Discussions similaires

  1. un bouton qui ouvre une fenêtre en Java
    Par dzsouma dans le forum Composants
    Réponses: 1
    Dernier message: 28/05/2015, 18h55
  2. Réponses: 2
    Dernier message: 24/08/2011, 14h30
  3. bouton qui ouvre une petite fenetre
    Par dekams dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/03/2008, 07h24
  4. Formulaire qui ouvre une popup
    Par Mookie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 07/03/2006, 22h14
  5. [debutant] un bouton qui ouvre une fenetre
    Par dous dans le forum Composants
    Réponses: 6
    Dernier message: 21/11/2005, 09h55

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