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

 Delphi Discussion :

Screen .Cursor inopérant.


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut Screen .Cursor inopérant.
    Bonjour à tous.tes

    J'ai tout essayé et tout fouillé dans le forum et sur internet.
    Je n'arrive pas à modifier l'image du cursor sur mon appli.
    Je voudrais, au lancement d'une requête assez longue, afficher le crSQLWait.
    Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Screen.Cursor := crSQLWait;
    Je rajoute même :
    Application.ProcessMessages;
    Eh ben que pouic. Veut rien savoir. fatigué...

    Quelqu'un aurait une idée ? SVP.
    Pas changer assiettes pour fromage.

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut
    Tu modife la propriété Cursor de ta fiche. (testé sur Delphi Tokyo).
    Tu a aussi cette solution
    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
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure RecoitMessage1(var Msg: TMessage); message WM_USER + 1;
        procedure RecoitMessage2(var Msg: TMessage); message WM_USER + 2;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      nbcarac: integer;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SendMessage(Form1.Handle, WM_USER + 1, 0, 0);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      SendMessage(Form1.Handle, WM_USER + 2, 0, 0);
    end;
     
    procedure TForm1.RecoitMessage1(var Msg: TMessage);
    begin
      Form1.Cursor := crSQLWait;
    end;
     
    procedure TForm1.RecoitMessage2(var Msg: TMessage);
    begin
      Form1.Cursor := crDefault;
    end;

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Merci Alweber.
    J'ai déjà essayé la modif sur la fiche, ça n'a pas marché. Pourtant je suis sur Berlin. Je pense que ça vient de la gueule de mon appli.
    Par contre ta deuxième solution, qui fait appel à Windows, me plaît beaucoup.
    Je vais essayer demain, car ils vont bientôt lâcher les chiens, ici.

    Je te tiens au jus.
    Encore merci.
    Pas changer assiettes pour fromage.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Nan, que pouic.
    J'ai réussi en faisant ça, et uniquement en faisant tout ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                  Screen.Cursor := crSQLWait;
                  Application.ProcessMessages;
                  Wait(5000);
    Du coup, le curseur s'affiche pendant 5 secondes, puis s'en va. Mais bien sûr, l'appli ne fait rien pendant ces 5 secondes.
    Il doit y avoir un interrupteur quelque part à mettre à false pour dire au système de ne pas gérer le curseur en automatique.
    Si ça parle à quelqu'un... Merci beaucoup pour les explications.
    Pas changer assiettes pour fromage.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par cestpasmoinonplus Voir le message
    Au lancement d'une requête assez longue, afficher le crSQLWait.
    Deux précisions me manquent :
    1. le programme : FMX ou VCL ?
    2. la requête avec quel connecteur Firedac ou autres ?

    S'il s'agit de Firedac, quelle que soit la saveur de la cible, c'est peut-être du côté de ses composants qu'il faudrait se pencher. Dans des versions plus anciennes il y avait un composant à mettre absolument (FDGUIxWaitCursor) depuis l'inclusion est automatique (Firedac.xxx.Wait où xxx dépend du type d'application FMX/VCL)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Merci Sergio pour ces précisions.
    Il s'agît de la VCL et des composants dbx.
    Ok, je regarde au niveau des composants.
    Pas changer assiettes pour fromage.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Ok, je regarde au niveau des composants.
    J'avais écrit au conditionnel, c'est-à-dire s'il s'agissait de Firedac pour DBExpress (dont je ne suis pas un fan) je n'ai pas idée.

    Un simple test montre que ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm65.Button1Click(Sender: TObject);
    begin
    Screen.Cursor:=crHourGlass;
    Sleep(3000);
    Screen.Cursor:=crDefault;
    end;
    Maintenant, s'il y a des Threads impliqués ....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Bien sûr que ça fonctionne. Mais pendant 3 secondes, il ne fait rien d'autre que montrer le crHourGlass.
    Moi, ce que je voudrais c'est que le curseur change pendant que Delphi fait ce que je lui demande de faire, jusqu'à ce que je rechange le curseur.
    Pas changer assiettes pour fromage.

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Bien sûr que ça fonctionne. Mais pendant 3 secondes, il ne fait rien d'autre que montrer le crHourGlass.
    Moi, ce que je voudrais c'est que le curseur change pendant que Delphi fait ce que je lui demande de faire, jusqu'à ce que je rechange le curseur.
    Bonjour,

    Si tu n'utilise pas les thread, parfois les Jauges ou autre méthode d'attente visuel son effectivement décalé.

    Moi j'utilise dans ce cas carrément une fenêtre en showmodal.
    Le but est d'afficher une fenêtre qui affiche juste un message d’attente et qui ne fait rien d'autre, illustration



    Voici un exemple réel, lorsque je lance la recherche d'instant SQL Server ou compression d'une base Access

    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
    procedure TFSqlServerConnecting.sBtnRefreshClick(Sender: TObject);
    begin
     
    //....
     
          With TFTravauxEnCours.Create(Self,{Passage de parametre, valeur, etC...}) do
          begin
            Try
              case ShowModal of
                mrOk :;
                else
                  MessageDLg('blablabla.',mtError,[mbok],0);
              end;
            Finally
              Release;
            end;
          end;
        end;
     
    //....
     
    end;
    Ensuite la form "à adapter selon ton contexte"

    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
    50
    51
    unit TravauxEnCours;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
     
     //...
     
    type
      TFTravauxEnCours = class(TForm)
        {Mes composants}
        procedure FormShow(Sender: TObject);
      private
        { Déclarations privées }
        procedure WMQUERYENDSESSION(var Message :TMessage); message WM_QUERYENDSESSION;
      public
        { Déclarations publiques }
        {mes paramétrés, valeur, etc...}g;
        constructor Create(AOwner: TComponent; {PAssage de parametre, valeur, etC...}); reintroduce;
      end;
     
    var
      FTravauxEnCours: TFTravauxEnCours;
     
    implementation
     
    {$R *.dfm}
     
    constructor TFTravauxEnCours.Create(AOwner: TComponent; {Passage de paramètre, valeur, etc...});
    begin
      inherited Create(AOwner);
      {Récup de paramètre, valeur, etc...}
    end;
     
    procedure TFTravauxEnCours.FormShow(Sender: TObject);
    begin
      PostMessage(Handle, WM_QUERYENDSESSION, 0, 0);
    end;
     
    procedure TFTravauxEnCours.WMQUERYENDSESSION(var Message: TMessage);
    const
      ModalRes : array[Boolean] of TModalResult = (mrCancel, mrOk);
    begin
      Application.ProcessMessages;
       ModalResult := ModalRes[{ici lancer la procédure ou les travaux}];
     
    end;
     
    end.
    J'espère que cela te donnera des idées...

    a+

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Bien sûr que ça fonctionne. Mais pendant 3 secondes, il ne fait rien d'autre que montrer le crHourGlass.
    mais si j'ai mis le sleep(3000) c'est pour le test, il suffit de remplacer l'instruction par le ExceSQL ou les instructions SQL qui sont "lentes" avec DBExpress je ne sais pas mais avec BDE cela fonctionnait.
    Depuis de nombreuses versions j'utilise surtout des threads pour les opérations "lentes" donc je ne peux confirmer que cela continue à fonctionner avec Firedac et je ne vois pas quelle requête je pourrais faire pour faire un test plus poussé avec DBExpress ou Firedac
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Bonjour à tous et merci pour vos réponses.
    (Vous me parlez tous de thread, et je pense qu'effectivement, c'est peut-être la seule solution (ou pas) pour le curseur.)

    Désolé pour le temps de réaction, mais j'étais précisément sur un autre problème qui, bizarrement, rejoint celui-ci :

    Justement Sergio, si je remplace le sleep par l'ordre SQL, ça ne marche pas, il affiche le curseur wait et aussitôt remet le curseur par défaut.
    Car il rend la main au système avant la fin de l'exécution de l'ordre SQL, (en l'occurrence, aussitôt).
    Pas changer assiettes pour fromage.

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Bon ben oubliez la partie que je viens de suppimmer. C'était pas ça du tout
    Du coup, pour le pb de cursor, je vais m'orienter vers un thread.
    Pas changer assiettes pour fromage.

Discussions similaires

  1. Problème de persistance de Screen.Cursor
    Par Gilbert Geyer dans le forum Langage
    Réponses: 14
    Dernier message: 10/04/2010, 11h11
  2. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 15h28
  3. Qu'est-ce que Screen.Cursor
    Par tonin33 dans le forum Delphi
    Réponses: 5
    Dernier message: 02/03/2007, 05h57
  4. REF CURSOR... Comment ça marche ?
    Par Patkaza dans le forum SQL
    Réponses: 6
    Dernier message: 28/04/2004, 15h26
  5. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 20h59

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