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

Lazarus Pascal Discussion :

[Linux -- gtk2] Le sablier ne peut parfois pas être affiché [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut [Linux -- gtk2] Le sablier ne peut parfois pas être affiché
    Bonjour,

    Le marronnier du sablier : il m'est parfois impossible de changer l'image du pointeur de ma souris en sablier (ou autre), un grand classique.

    Ou plutôt, un truc tout bête fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Screen.Cursor:=crHourGlass;// ok 
      Application.ProcessMessages;
      OpenDialog1.Execute
      Screen.Cursor := crDefault;
    end;
    mais avec un truc sophistiqué c'est mort :
    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 TForm1.Button1Click(Sender: TObject);
    begin
      if not OpenDialog1.execute then exit;
     
      stream := Bass_StreamCreateFile(False, pChar(od.filename), 0, 0, BASS_STREAM_DECODE); // Make a decoding stream
      // Decode the sample data, without playing it. Use BASS_ChannelGetData to retrieve decoded sample data.
      if stream = 0 then begin // testé ok
        Error('Error creating stream for ' + OpenDialog1.FileName);
        Exit;
      end;
      BASSChannelGetLength := BASS_ChannelGetLength(stream, BASS_POS_BYTE);
      if BASSChannelGetLength = QW_ERROR then begin // testé ok
        Error('Error getting length of ' + OpenDialog1.FileName);
        Exit;
      end;
     
      Screen.Cursor:=crHourGlass; // jamais vu le sablier
      Application.ProcessMessages;
      Splitter1Moved(Self);
      GetDataAndShowBmps;
      Screen.Cursor := crDefault;
    end;
    Ci-dessous une magnifique capture d'écran où j'ai activé la présence du pointeur, en plein milieu de la trace laissée par l'OpenDialog.
    Nom : Capture.png
Affichages : 186
Taille : 18,1 Ko

    Bien sûr j'ai googlé, mais comm' d'hab', ça ne paye pas pour ce genre de problème : j'ai même vu un post qui disait que si l'exemple des curseurs (fourni avec Laz [version\examples\cursors]) fonctionnait, alors le problème était dans mon camp. OK, mais où ?

    Et le gag (car, oui, il y en a un), c'est que mon code fonctionne si je valide la boîte de dialogue de l'OpenDialog avec la touche ENTER !
    Mais si je clique à la souris sur "Ouvrir", c'est mort.

    Une idée, quelqu'un ?

    Linux 32 bits, Lazarus (encore et toujours) 1.4, gtk2.8.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut JP, question bête mais pourquoi n'as tu pas mis le changement de curseur après OpenDialog.Execute ??

    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 TForm1.Button1Click(Sender: TObject);
    begin
      if not OpenDialog1.execute then exit;
     
      // ICI PAR EXEMPLE, juste avant des tes méthodes de traitement 
      Screen.Cursor:=crHourGlass; // jamais vu le sablier
      Application.ProcessMessages;
     
      // petit truc, si jamais, tu peux placer un sleep(300); ou Sleep(500); ici juste après le Application.ProcessMessages, 
      // ce qui laissera juste le temps à l'UI de se mettre à jour avant de passer aux choses sérieuses.
      // J'utilise parfois cette petite astuce, lorsque j'ai besoins que mon UI soit mise à jour, 
      // juste avant de lancer de gros traitements qui bouffent tout le CPU
     
      // Tes méthodes qui te bouffent le cpu au max
      stream := Bass_StreamCreateFile(False, pChar(od.filename), 0, 0, BASS_STREAM_DECODE); // Make a decoding stream
      //.....
     
      Splitter1Moved(Self);
      GetDataAndShowBmps;
      Screen.Cursor := crDefault;
    end;
    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut
    Yep, Jérôme !

    Citation Envoyé par BeanzMaster Voir le message
    Salut JP, question bête mais pourquoi n'as tu pas mis le changement de curseur après OpenDialog.Execute ??
    Parce qu'il y a des tests suivis d'"Exit" si erreur.

    Citation Envoyé par BeanzMaster Voir le message
    CODE]procedure TForm1.Button1Click(Sender: TObject);
    begin
    // petit truc, si jamais, tu peux placer un sleep(300); ou Sleep(500); ici juste après le Application.ProcessMessages,
    // ce qui laissera juste le temps à l'UI de se mettre à jour avant de passer aux choses sérieuses.
    end;[/CODE]
    Je l'avais tenté, mais juste 10 msec...

    Citation Envoyé par BeanzMaster Voir le message
    CODE]procedure TForm1.Button1Click(Sender: TObject);
    begin
    // Tes méthodes qui te bouffent le cpu au max
    stream := Bass_StreamCreateFile(False, pChar(od.filename), 0, 0, BASS_STREAM_DECODE); // Make a decoding stream
    end;[/CODE]
    Comment le sais-tu ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep, Jérôme !


    Parce qu'il y a des tests suivis d'"Exit" si erreur.
    Dans ce cas le mieux serait de blinder le code de try..finally..except ou plus simple

    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
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not OpenDialog1.execute then exit;
     
      Screen.Cursor:=crHourGlass; 
      Application.ProcessMessages;
      sleep(300);
     
      stream := Bass_StreamCreateFile(False, pChar(od.filename), 0, 0, BASS_STREAM_DECODE);
      if stream <> 0 then
      begin
        BASSChannelGetLength := BASS_ChannelGetLength(stream, BASS_POS_BYTE);
        if BASSChannelGetLength <> QW_ERROR then 
        begin 
          Splitter1Moved(Self);
          GetDataAndShowBmps;      
        end
        else
        begin
          Screen.Cursor := crDefault;
          Error('Error getting length of ' + OpenDialog1.FileName);  // Je suppose que cela t'affiche une boite de dialogue, sinon la ligne du dessus n'est pas obligatoire
        end;
      end
      else
      begin
         Screen.Cursor := crDefault;
         Error('Error creating stream for ' + OpenDialog1.FileName);
      end;
      Screen.Cursor := crDefault;
     end;

    Citation Envoyé par Jipété Voir le message
    Comment le sais-tu ?
    Tu peux le voir dans sous Linux si je me souviens bien c'est dans le module de configuration du systeme, tu peux voir la mémoire et l'utilisation du cpu. De plus lorsque l'ui "freeze" c'est un des signes. Le truc c'est que le message envoyé par "application.ProcessMessages" n'a pas le temps de s'executer, car la méthode qui le suit, s'accapare tout le cpu, du coup le message est en attente, voir ignoré à la fin du traitement.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ou plus simple
    Bien joué !
    Tu as pris le problème à l'envers de ma manière à moi de faire, et c'est bon.


    Citation Envoyé par BeanzMaster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      // Tes méthodes qui te bouffent le cpu au max
      stream := Bass_StreamCreateFile(False, pChar(od.filename), 0, 0, BASS_STREAM_DECODE); // Make a decoding stream
    Citation Envoyé par Jipété Voir le message
    Comment le sais-tu ?
    Citation Envoyé par BeanzMaster Voir le message
    Tu peux le voir sous Linux, si je me souviens bien c'est dans le module de configuration du systeme, tu peux voir la mémoire et l'utilisation du cpu. De plus lorsque l'ui "freeze" c'est un des signes.
    D'accord, mais comment faire autrement, si j'ai besoin de Bass_StreamCreateFile ?
    Je pourrais essayer de faire afficher bouts par bouts mais l'effort ne vaut pas le coup.

    En fait j'ai besoin d'un bête outil qui m'affiche ce qu'il y a dans un .wav (ou .mp3) pour le comparer avec Audacity -- car il m'arrive des trucs bizarres, genre je règle bien Audacity pour enregistrer depuis la chaîne hifi [je sais enregistrer depuis l'arrivée des magnétos à k7, ça nous rajeunit pas…], et une fois l'enregistrement terminé et le fichier sauvegardé, ben, les données ne sont pas bonnes, genre saturées, un truc que je n'aurais jamais laissé passer si je l'avais vu au moment où ça enregistrait.

    Et ça, je ne comprends pas.

    En attendant, le problème du sablier est , merci à toi et bon dimanche,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bien joué !

    D'accord, mais comment faire autrement, si j'ai besoin de Bass_StreamCreateFile ?
    Je pourrais essayer de faire afficher bouts par bouts mais l'effort ne vaut pas le coup.
    Est-ce vraiment cette fonction qui bouffe tout ?

    Une moyen simple, est de prendre une mesure de temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Start = getTickCount64;
    MaMethode;
    Stop = getTickCount64;
    Elapsed := Stop - Start;
    writeln('Ma Fonction : ',Elapsed); // Affichage dans la console
    Là tu verras tout de suite la méthode qui prend le plus de temps.

    Citation Envoyé par Jipété Voir le message
    En fait j'ai besoin d'un bête outil qui m'affiche ce qu'il y a dans un .wav (ou .mp3) pour le comparer avec Audacity -- car il m'arrive des trucs bizarres, genre je règle bien Audacity pour enregistrer depuis la chaîne hifi [je sais enregistrer depuis l'arrivée des magnétos à k7, ça nous rajeunit pas…], et une fois l'enregistrement terminé et le fichier sauvegardé, ben, les données ne sont pas bonnes, genre saturées, un truc que je n'aurais jamais laissé passer si je l'avais vu au moment où ça enregistrait.

    Et ça, je ne comprends pas.

    En attendant, le problème du sablier est , merci à toi et bon dimanche,
    Pour le coup, tu devrais régler les niveaux d'entrées de ta carte son, soit si c'est possible dans Audiacity soit dans le panneau de configuration audio. C'est comme avec le micro, si tu as un volume d'enregistrement trop haut, ça sature

    A+

    Bon dimanche
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Est-ce vraiment cette fonction qui bouffe tout ?
    Ben c'est toi qui l'avais écrit, mais en effet, avec ton petit chronomètre je me rends compte que non, ce n'est pas pas la création du stream (et l'ouverture du fichier) qui est chronophage, c'est comme bien souvent les calculs d'affichage et là, je ne peux pas faire grand chose.
    Bon, je ne vais pas me plaindre, l'ouverture d'un fichier de 3 minutes est quasi instantanée, c'est ceux qui sont très longs (près d'une heure) qui prennent quelques secondes.


    Citation Envoyé par BeanzMaster Voir le message
    Pour le coup, tu devrais régler les niveaux d'entrées de ta carte son, soit si c'est possible dans Audacity soit dans le panneau de configuration audio. C'est comme avec le micro, si tu as un volume d'enregistrement trop haut, ça sature
    Quant au son sous Linux, c'est une joyeuse pagaille, j'en ai longuement parlé là sans arriver à rien de définitif.

    In fine, c'est à moi de surveiller tout ça comme le lait sur le feu.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/09/2013, 23h26
  2. Réponses: 4
    Dernier message: 30/09/2012, 08h50
  3. [JpGraph] L'image ne peut pas être affichée car elle contient des erreurs
    Par Redg9 dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 01/04/2011, 13h12
  4. La page XML ne peut pas être affichée
    Par emprex dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 24/03/2008, 11h45
  5. La page ne peut pas être affichée
    Par emprex dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/03/2008, 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