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 :

Problème d'affichage de curseur


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Problème d'affichage de curseur
    Bonjour,

    Je suis sous Windows XP et Delphi 4.

    Le code ci-dessous n'a aucun intérêt en soi et n'a d'autre but que d'illustrer ma question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.BOKClick(Sender: TObject);
    begin
      Cursor:=crHourGlass;
      repeat
      Label1.Caption:='0';
      until Label1.Caption='';
    end;
    Si je clique sur le bouton BOK je lance la boucle sans fin repeat - until.
    Pourquoi le curseur qui était auparavant en flèche (crArrow) reste-t-il en flèche et ne passe pas en sablier (crHourGlass) ?

    Merci d'avance à celui ou celle qui pourra m'éclairer.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Screen.Cursor := crHourGlass;
    Dans ton exemple Cursor fait référence à la forme.

    @+ Claudius.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Merci à Claudius mais tu ne réponds pas à ma question.

    Bien sur que crHourGlass référence la forme du curseur.

    Ma question est pourquoi lorsque je clique sur le bouton et lance par conséquent la boucle, le curseur affiché reste Flèche et ne devient pas Sablier.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Quand je parlais de forme je ne parlais de la forme du curseur, mais de l'objet TForm, TForm1 en l'occurrence. (je comprends la confusion. )

    Il faut utiliser l'objet Screen.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Screen.Cursor := crHourGlass;
    Dans ton exemple, le curseur prendra la forme crHourGlass uniquement sur la TForm, et sur aucun des contrôles présents.

    @+

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Voici a peu pres a quoi ressemble ta pile d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PostMessage(handle, WM_SETCURSOR, ..., ...)
    SetCursor(crHourGlass)
    Cursor := crHourGlass;
    BtnClick(...)
    WMButtonClick(...)
    En gros, ta boucle until est traitée par le message WMButtonClick, donc le message WM_SETCURSOR sera traité une fois WMButtonClick terminé. Or, ta boucle fait que tu te bloque sur le premier message, et la demande de changement de curseur est en attente.
    pour resoudre le probleme, il faut que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.BOKClick(Sender: TObject);
    begin
      Cursor:=crHourGlass;
      Application.ProcessMessages; //Pour forcer a traiter le message de changement de curseur
      repeat
      Label1.Caption:='0';
      until Label1.Caption='';
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage de l'objet curseur en mode web
    Par amalane dans le forum QlikView
    Réponses: 6
    Dernier message: 17/06/2013, 18h32
  2. Réponses: 25
    Dernier message: 27/03/2009, 18h10
  3. [Drag'n'Drop] problème affichage du curseur
    Par julie4207 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 04/09/2008, 09h12
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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