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 :

TSpeedButton reste grisé [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut TSpeedButton reste grisé
    J'utile un SpeedButton qui a la propriété Enabled à True. Lorsque je clique sur ce bouton, je lance différents traitements. Pendant ce temps là, le bouton ne doit pas être accessible. A la fin, je redonne accès au bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
      SpeedButton1.Enabled := False;
      // ...
      SpeedButton1.Enabled := True;
    end;
    Le problème est que le bouton reste grisé lorsque je redonne accès (mais est bien accessible). J'ai essayé avec un Refresh. Mais le bouton reste tout de même accessible. Quelqu'un aurait-il une solution à mon problème ?

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonjour,

    Je n'ai pas tout compris
    Tu cliques sur le bouton, il devient grisé (Enabled = False). A la fin du traitement, tu réactives le bouton (Enabled = True), mais celui-ci ne reprend pas son apparence normale, c'est ça ?

    Parce que si c'est ça, le problème n'est pas reproduisible chez moi (dernière version de Lazarus).

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Bonjour,

    Je n'ai pas tout compris
    Tu cliques sur le bouton, il devient grisé (Enabled = False). A la fin du traitement, tu réactives le bouton (Enabled = True), mais celui-ci ne reprend pas son apparence normale, c'est ça ?
    Oui c'est ça.

    Citation Envoyé par Eric Sigoillot
    Parce que si c'est ça, le problème n'est pas reproduisible chez moi (dernière version de Lazarus).

    @++
    J'ai aussi la dernière version de Lazarus. Quelques précisions : je suis sous Windows (XP Pro et 2000). Le SpeedButton a la propriété Flat à True.

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Non, rien à faire, aucun problème sur ma version avec Win XP Pro SP2.
    Pour avoir l'image grisée sur le TSpeedButton, tu utilises bien une image simple contenant la version non grisée et la version grisée côte à côte avec la propriété NumGlyphs du TSpeedButton positionnée sur 2 ?

    @++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Non, rien à faire, aucun problème sur ma version avec Win XP Pro SP2.
    Pour avoir l'image grisée sur le TSpeedButton, tu utilises bien une image simple contenant la version non grisée et la version grisée côte à côte avec la propriété NumGlyphs du TSpeedButton positionnée sur 2 ?

    @++
    D'autres précisions : j'utilise un TSpeedButton uniquement pour pouvoir bénéficier de sa propriété flat. Je n'utilise pas d'image, juste un Caption.
    Voici le code exact :
    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
    52
    53
    54
    55
     
    procedure TFormPrincipal.BtnApacheClick(Sender: TObject);
    var
      idxMenuAccueil: Integer;
      idxMenuServeur: Integer;
      idxMenuApache: Integer;
    begin
      // Récupération de l'index de menu de l'item Accueil
      idxMenuAccueil := PopupMenuTrayIcon.Items.IndexOfCaption('Accueil');
      // Récupération de l'index de menu de l'item Serveurs
      idxMenuServeur := PopupMenuTrayIcon.Items.IndexOfCaption('Serveurs');
      if Parametre.ApacheStatus = ssOff then
      begin
        BtnApache.Enabled := False;
        // Récupération de l'index de menu de l'item Apache du sous-menu Serveurs
        idxMenuApache := PopupMenuTrayIcon.Items.Items[idxMenuServeur].IndexOfCaption('Lancer serveur Apache...');
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Enabled := False;
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Caption := 'Démarrage...';
        LabelEtatServeurApache.Caption := 'Démarrage...';
        LabelEtatServeurApache.Color := clYellow;
        FormPrincipal.Refresh;
        Application.ProcessMessages;
        LancerApache;
        LabelEtatServeurApache.Color := clLime;
        LabelEtatServeurApache.Caption := 'Démarré';
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Enabled := True;
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Caption := 'Arrêter serveur Apache...';
        BtnApache.Caption := 'Arrêter...';
        BtnApache.Enabled := True;
        BtnAccueil.Enabled := True;
        PopupMenuTrayIcon.Items.Items[idxMenuAccueil].Enabled := True;
      end else if Parametre.ApacheStatus = ssOn then
      begin
        BtnApache.Enabled := False;
        // Récupération de l'index de menu de l'item Apache du sous-menu Serveurs
        idxMenuApache := PopupMenuTrayIcon.Items.Items[idxMenuServeur].IndexOfCaption('Arrêter serveur Apache...');
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Enabled := False;
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Caption := 'Arrêt...';
        LabelEtatServeurApache.Caption := 'Arrêt...';
        LabelEtatServeurApache.Color := clYellow;
        FormPrincipal.Refresh;
        Application.ProcessMessages;
        ArreterApache;
        LabelEtatServeurApache.Color := clRed;
        LabelEtatServeurApache.Caption := 'Arrêté';
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Enabled := True;
        PopupMenuTrayIcon.Items.Items[idxMenuServeur].Items[idxMenuApache].Caption := 'Lancer serveur Apache...';
        BtnApache.Caption := 'Lancer...';
        BtnApache.Enabled := True;
        BtnAccueil.Enabled := False;
        PopupMenuTrayIcon.Items.Items[idxMenuAccueil].Enabled := False;
      end;
      BtnApache.Refresh;
      BtnAccueil.Refresh;
    end;

  6. #6
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Il y a en effet un bug dans la LCL. La couleur du canevas pour dessiner la police n'est pas remise à jour lorsque le bouton change d'état.

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SpeedButton.Enabled := True;
    Il suffit d'écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SpeedButton.Canvas.Font.Color := clBtnText;
    SpeedButton.Enabled := True;
    Ca devrait fonctionner

    Si jamais tu veux une modification permanente, il faut éditer le fichier speedbutton.inc (dans Lazarus\lcl\include) et vers la ligne 465 ajouter le code suivant avant l'appel à DrawText :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas.Font.Color := clBtnText;
    Sans oublier de recompiler toute la LCL

    @++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SpeedButton.Enabled := True;
    Il suffit d'écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SpeedButton.Canvas.Font.Color := clBtnText;
    SpeedButton.Enabled := True;
    Ca devrait fonctionner
    Merci. Ca marche. Je verrai plus tard pour modifier la LCL.

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

Discussions similaires

  1. [AC-2007] Bouton Affichage reste grisé dans le ruban
    Par lio33 dans le forum IHM
    Réponses: 0
    Dernier message: 05/10/2010, 15h40
  2. Accès structure reste grisé
    Par tangram68 dans le forum 4D
    Réponses: 4
    Dernier message: 16/09/2008, 14h13
  3. JFrame reste toujours gris !
    Par lenetfm dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 22/03/2008, 15h49
  4. Réponses: 5
    Dernier message: 31/08/2007, 13h34
  5. TBitBtn reste enfoncé
    Par TRINCAL Sylvain dans le forum C++Builder
    Réponses: 8
    Dernier message: 25/06/2002, 16h31

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