Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre émérite Avatar de Charly910
    Homme Profil pro Charly
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Nom : Homme Charly
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 717
    Points : 817
    Points
    817

    Par défaut [XE2] Pb de déclenchement de MouseUp

    Bonjour,

    J'ai un petit problème, et j'ai fait une petite appli pour l'isoler :

    Ma form principale Form2 est en plein écran et je pose dessus un Topendialog et un TSpeedButton

    Puis dans le MouseUp de Form2 :
    Code :
    1
    2
    3
    4
    5
    procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       ShowMessage('Mouse Up activé') ;
    end;
    Dans le OnClick du SpeedButton :

    Code :
    1
    2
    3
    4
    5
    6
    7
    procedure TForm2.SpeedButton1Click(Sender: TObject);
    Var
       i : Integer ;
    begin
       i := 0 ;
       If(OpenDialog1.execute) Then  i := 1 ;
    end;
    Quand je clique sur le SpeedButton, j'ouvre le Opendialog

    Si je double clique sur un fichier, l'OpenDialog se ferme, et le Mouse up de Form2 se produit.

    Est ce normal ? et comment l'éviter, car cela me gêne dans mon appli

    Merci

    A+

    Charly

  2. #2
    Membre à l'essai
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 20
    Points
    20

    Par défaut

    Oui c'est normal, tu cliques sur le bouton de la form donc tu vas forcement le relâché pour explorer ton opendialog, l'opendialog étant bloquant pour le code de la form, l’évènement up ne se produit qu'à la fermeture de l'opendialog. Si on veut le bloquer un petit boolean fera bien l'affaire :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    var 
    bloquer : boolean ;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    bloquer:=False;
    end;
     
    procedure TForm2.SpeedButton1Click(Sender: TObject);
    Var
       i : Integer ;
    begin
       i := 0 ;
       bloquer:=True;
       If(OpenDialog1.execute) Then  i := 1 ;
    end;
     
    procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if bloquer=False then ShowMessage('Mouse Up activé') ;
    end;

  3. #3
    Membre émérite Avatar de Charly910
    Homme Profil pro Charly
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Nom : Homme Charly
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 717
    Points : 817
    Points
    817

    Par défaut

    Merci Yvonic,

    c'est effectivement comme cela que j'avais fait pour contourner le problème, mais je ne trouvai cela pas très normal, car le relachement de la souris se produit pendant le double clic, lorsque l'openDialog n'est pas encore fermé (ou est encore ouvert !)

    Je ne comprends donc pas bien pourquoi cela affecte la fenêtre principale qui est alors en arrière plan ?

    Charly

    PS : j'ai vérifié que le mouseUp ne se produit pas sur le relachement du SpeedButton, mais au double clic sur la fenêtre de l'opendialog (quant on choisit un fichier par exemple)

    PS2 : Si je fait un simple clic pour choisir un fichier dans le TOpenDialog, et si je clique sur le bouton "Ouvrir" pour fermer le OpenDialog, le MouseUp ne se produit pas (ni le ShowMessage) ???

  4. #4
    Membre à l'essai
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 20
    Points
    20

    Par défaut

    Effectivement je viens de faire le test, sur delphi7, il se passe exactement la même chose. En faite (fait le test), si tu fais un double click dans l'opendialog en laissant le bouton enfoncé lors du deuxième clique la fenêtre se ferme mais l’évènement ne se produit pas, dès que tu relâche, ça apparaît. Je pense donc que la fenêtre se ferme à l'enfoncement du deuxième clique ce qui fait que le relâchement du bouton se fait sur la form principale.

    Il n'y aura donc pas d'autre solution que celle citée je pense.

  5. #5
    Membre émérite Avatar de Charly910
    Homme Profil pro Charly
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Nom : Homme Charly
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 717
    Points : 817
    Points
    817

    Par défaut

    Merci d'avoir cherché

    Je reste sur ma faim ....

    A+

    Charly

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •