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 :

IHM bloquée ou pas


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 73
    Points
    73
    Par défaut IHM bloquée ou pas
    Bonjour,

    mon contexte : DELPHI7/WIN 7

    Résumé : boucle infinie dans une fiche qui bloque l'accès aux controls de cette fiche mais pas à ceux d'une autre fiche de l'application.

    Voilà la situation plus détaillée :

    J'ai une frame (un cadre) placé dans une Fiche (FORM1).

    Voici quelques éléments de code de cette frame (FNextTep est un champs
    de TFrame) :

    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
    procedure tFrame.execute;
    begin
      FNextStep:=True;
      boucle;
    end;
     
    procedure tFrame.boucle;
    begin
       //...quelques instructions
       while not FNextStep do
       begin
          application.processMessages
       end;
       FNextStep:=false;
     
    end;
     
    procedure tFrame.monEvt;
    begin
       FNextStep:=true;
    end;
    L'évênement "tFrame.monEvt" est associé à un toolbouton dans une toolBar de ma tFrame.

    Au runtime lorsque je lance le "TFrame.execute" alors je ne peux plus actionner mon toolbouton et je ne peux donc plus stopper ma procédure
    "TFrame.boucle".

    En revanche si dans le "TFrame.execute" je crée et j'affiche une autre fiche (FORM2) dans laquelle je mets une copie de la toolbar avec le toolBouton auquel j'associe "tFrame.monEvt", Alors, après avoir lancé le "TFrame.execute" le "toolBouton" de FORM2 est actif et me permet de stopper la procédure "TFrame.boucle".

    Cette façon de faire avec une fiche n°2 permettant de contrôler ce qui se passe dans la fiche n°1 est assez bien adaptée à mon besoin. (je n'ai pas besoin de Threads). Mais j'aimerai bien des explications sur ce qui se passe...

    Merci beaucoup de votre attention....

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 73
    Points
    73
    Par défaut
    Oups! une erreur de frappe il fallait lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure tFrame.execute;
    begin
      FNextStep:=False;
      boucle;
    end;
    désolé...

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Une solution peut être de placer ton traitement long dans un thread séparé que tu lanceras depuis ton appli... ainsi ton toolbar restera actif, car totalement indépendant du traitement long (c'est le principe du multi thread, que j'ai déjà testé sous Delphi : ça marche nickel).

  4. #4
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 73
    Points
    73
    Par défaut
    Mon problème n'est pas de trouver une solution (puisqu'il existe une façon d'avoir le comportement qui m'intéresse) mais de comprendre techniquement les deux comportements différents que j'obtiens :

    Résumé : boucle infinie dans une fiche qui bloque l'accès aux controls de cette fiche mais pas à ceux d'une autre fiche de l'application.

    Existe-il une forme de "bloquage" des messages dues aux Frames ?

    Merci

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je viens de faire un test rapide sous Delphi 6, je ne constate pas de problème

    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
     
    unit Unit2;
     
    interface
     
    uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, ToolWin, StdCtrls;
     
    type
      TFrame2 = class(TFrame)
        Button1: TButton;
        Button2: TButton;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        CheckBox1: TCheckBox;
        procedure ToolButton1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    implementation
     
    {$R *.dfm}
     
    procedure TFrame2.ToolButton1Click(Sender: TObject);
    begin
      ShowMessage('ToolButton');
    end;
     
    procedure TFrame2.Button2Click(Sender: TObject);
    begin
      ShowMessage('Button2');
    end;
     
    procedure TFrame2.Button1Click(Sender: TObject);
    begin
      while not Application.Terminated do
      begin
        CheckBox1.Checked := not CheckBox1.Checked;
        Application.ProcessMessages;
      end;
    end;
     
    end.
    en cliquant sur Button1, CheckBox1 se met à clignoter, tandis Button2 et ToolButton1 affichent bien leur message.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 73
    Points
    73
    Par défaut
    Je dois donc avoir quelque chose d'autre qui bloque.
    Merci

Discussions similaires

  1. Suivi de fabrication bloqué si pas de stock
    Par x3rbt95 dans le forum SAGE
    Réponses: 5
    Dernier message: 05/07/2013, 01h14
  2. Ordinateur bloqué, mais pas complètement
    Par Seryus dans le forum Windows 7
    Réponses: 19
    Dernier message: 22/02/2013, 20h37
  3. Ihm bloqué pendant le traitement
    Par 304bl dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 20/04/2011, 20h45
  4. Accès du site bloqué si pas de sessions
    Par dztcid dans le forum Langage
    Réponses: 5
    Dernier message: 12/05/2010, 22h23
  5. Réponses: 8
    Dernier message: 25/11/2005, 19h38

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