Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: IHM bloquée ou pas

  1. #1
    Futur Membre du Club
    Inscrit en
    juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 57
    Points : 17
    Points
    17

    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 :
    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
    Futur Membre du Club
    Inscrit en
    juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 57
    Points : 17
    Points
    17

    Par défaut

    Oups! une erreur de frappe il fallait lire :

    Code :
    1
    2
    3
    4
    5
    procedure tFrame.execute;
    begin
      FNextStep:=False;
      boucle;
    end;
    désolé...

  3. #3
    Membre chevronné Avatar de peter27x
    Inscrit en
    janvier 2007
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : janvier 2007
    Messages : 1 024
    Points : 603
    Points
    603

    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
    Futur Membre du Club
    Inscrit en
    juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 57
    Points : 17
    Points
    17

    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 Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 44
    Localisation : Réunion

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 323
    Points : 14 990
    Points
    14 990

    Par défaut

    je viens de faire un test rapide sous Delphi 6, je ne constate pas de problème

    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
    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
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  6. #6
    Futur Membre du Club
    Inscrit en
    juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 57
    Points : 17
    Points
    17

    Par défaut

    Je dois donc avoir quelque chose d'autre qui bloque.
    Merci

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
  •