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 :

Une fonction utilisant le résultat d'un événement, appelée hors de l'événement


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut Une fonction utilisant le résultat d'un événement, appelée hors de l'événement
    Bonjour,

    je veux définir une fonction utilisant le résultat d'un événement mais appelée hors de cet événement. Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Foo : integer;
    begin
      Result := F() // une fonction des coordonnées d'un clique sur un TImage
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // utilise la fonction dans un événement quelconque
    procedure TfmMain.UnBoutonOnClick (Sender: TObject);
    begin
      ... plein de choses
      // on attend le clique souris et on peut tester le résultat quand il a eu lieu
      if Foo > 100
        then quelque chose
        else autre chose;
      ... plein de choses
    end;
    Voila l'implémentation que j'utilise :

    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
    var
      GlobalAttente : boolean;
      GlobalResult : integer;
     
    function Foo : integer;
    begin
      GlobalAttente := True;
     
      while GlobalAttente do
        begin
          Sleep(10);
          Application.ProcessMessages
        end;
     
      Result := GlobalResult
    end;
     
    procedure TfmMain.MonImageOnMouseDown (Sender: TObject; X, Y : integer);
    begin
      GlobalAttente := False;
      GlobalResult := un traitement quelconque utilisant X et Y
    end;
    Ma question est la suivante : est-ce que c'est de la programmation shadock ou est-ce que c'est légitime ? Est-ce qu'il y a d'autres façons de faire ?

    Merci de toutes vos remarques.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par papadrago Voir le message
    Bonjour,

    je veux définir une fonction utilisant le résultat d'un événement mais appelée hors de cet événement. Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Foo : integer;
    begin
      Result := F() // une fonction des coordonnées d'un clique sur un TImage
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // utilise la fonction dans un événement quelconque
    procedure TfmMain.UnBoutonOnClick (Sender: TObject);
    begin
      ... plein de choses
      // on attend le clique souris et on peut tester le résultat quand il a eu lieu
      if Foo > 100
        then quelque chose
        else autre chose;
      ... plein de choses
    end;
    Voila l'implémentation que j'utilise :

    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
    var
      GlobalAttente : boolean;
      GlobalResult : integer;
     
    function Foo : integer;
    begin
      GlobalAttente := True;
     
      while GlobalAttente do
        begin
          Sleep(10);
          Application.ProcessMessages
        end;
     
      Result := GlobalResult
    end;
     
    procedure TfmMain.MonImageOnMouseDown (Sender: TObject; X, Y : integer);
    begin
      GlobalAttente := False;
      GlobalResult := un traitement quelconque utilisant X et Y
    end;
    Ma question est la suivante : est-ce que c'est de la programmation shadock ou est-ce que c'est légitime ? Est-ce qu'il y a d'autres façons de faire ?

    Merci de toutes vos remarques.

    un appel à 'ProcessMessages', ouille ;-) ...

    Plus sérieusement si tu veux juste conserver ta dernière position de curseur souris alors stocke les dans des variables privées.

    Si tu veux que ta fonction attende que tu cliques pour retourner le résultat alors effectivement ton implémentation est adaptée mais IMO il faudrait utiliser plutôt un callback... car là il peut se passer n'importe quoi durant ton exécution de "Foo"...

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2011, 12h54
  2. où déclarer une fonction utilisée dans toutes mes jsp ?
    Par aurelientp dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 22/02/2008, 11h38
  3. prb création d'une fonction utilisant des fonctions de postgis
    Par Benjamin_es dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/03/2007, 12h34
  4. Problème avec une Fonction utilisant WMI
    Par Eric_78180 dans le forum VBScript
    Réponses: 3
    Dernier message: 29/12/2006, 15h00
  5. Réponses: 8
    Dernier message: 19/10/2005, 16h06

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