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 :

HighLight sur un BitBtn


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 523
    Par défaut HighLight sur un BitBtn
    Bonjour,

    pour créer un effet de HighLight sur un BitBtn en changeant son image au survol de la souris, j'ai intégré ce code :

    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
     
    ...
      private
        { Déclarations privées }
        procedure AppMessage(var Msg:TMsg;var Handled:Boolean);
     
    .....
     
    procedure TF_Princ.FormCreate(Sender: TObject);
     
    Begin
       Application.OnMessage:=AppMessage ;
    ...
     
    { ================================================================== }
    Procedure TF_Princ.AppMessage(var Msg: TMsg; var Handled: Boolean);
    Var
        AControl:TControl;
        APoint:TPoint;
    Begin
       If Msg.message =WM_MOUSEMOVE then
          Begin
            BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
            AControl:=F_Princ.ControlAtPos(ScreenToClient(Mouse.CursorPos),false,true);
            If AControl<>nil then
               Begin
                  If (AControl.Name = 'BBtn_Jouer') Then
                     BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer2')) ;
               End ;
          End;
    End;
    { ================================================================== }
    Cela fonctionne, mais quand je déplace la souris assez rapidement, le bouton scintille.

    Pourriez vous me dire si on peut l'éviter ? on s'il y a une autre méthode pour gérer le survol du bouton.

    Merci

    A+

    Charly

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 620
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 620
    Par défaut
    Bonjour à toutes et à tous,

    @ Charly910, même avec un doublebuffered ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Application.OnMessage:=AppMessage ;
     BBtn_Jouer.doublebuffered := true;
    end;
    Non testé !

    @+,

    Cincap

  3. #3
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 523
    Par défaut
    Bonjour Cincap,

    merci pour ta proposition, mais cela le fait, même avec doublebuffered à True

    Charly

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 523
    Par défaut
    ça y est, j'ai réussi, mais avec un code compliqué qui peut sans doute se simplifier. Le voici :


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    ...
      private
        { Déclarations privées }
        procedure AppMessage(var Msg:TMsg;var Handled:Boolean);
    ...
     
    Var
    ...
      hDll            : THandle ;
      OldState        : Integer ;
    ...
    { ================================================================= }
    procedure TF_Princ.FormCreate(Sender: TObject);
    ...
       BBtn_Jouer.doublebuffered := true ;
       BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
       BBtn_Jouer.tag := 1 ;
       OldState := 1 ;
     
    ...
    { ================================================================== }
    Procedure TF_Princ.AppMessage(var Msg: TMsg; var Handled: Boolean);
    Var
        AControl:TControl;
        APoint:TPoint;
    Begin
       If Msg.message =WM_MOUSEMOVE then
          Begin
            AControl:=F_Princ.ControlAtPos(ScreenToClient(Mouse.CursorPos),false,true);
            If AControl<>nil then
               Begin
                  If (AControl.Name = 'BBtn_Jouer') Then
                     Begin
                        BBtn_Jouer.tag := 2 ;
                        If (BBtn_Jouer.tag <> OldState) Then
                           Begin
                              BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer2')) ;
                              OldState := 2 ;
                           End ;
                     End
                  Else
                     Begin
                        BBtn_Jouer.tag := 1 ;
                        If (BBtn_Jouer.tag <> OldState) Then
                           Begin
                              BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
                              OldState := 1 ;
                           End ;
                     End ;
     
               End
            Else
               Begin
                  BBtn_Jouer.tag := 1 ;
                  If (BBtn_Jouer.tag <> OldState) Then
                     Begin
                        BBtn_Jouer.Glyph.Handle := LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
                        OldState := 1 ;
                     End ;
               End ;
          End;
    End;
    { ================================================================== }
    Voilà, je vais essayer de simplifier

    @+
    Charly

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 620
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 620
    Par défaut
    @ Charly910, ton code telquel ne fonctionne pas chez moi, il me manque peut être le bitmap qui semble être en ressource donc je ne puis tester.

    @+,

    Cincap

  6. #6
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 523
    Par défaut
    Oui, j'ai mes BMP en ressource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    implementation
    Uses
       jpeg, Math ;
     
    {$R *.dfm}
    {$R BOUTONS.RES}
    J'ai mis Boutons.Zip en PJ

    A+
    Charly
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 620
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 620
    Par défaut
    @ Charly910, j'ai testé sous D6 et Seven 64bits et je n'ai pas de bons résultats, je pense que c'est à cause du choix du thême de Seven.

    La 1ère version se comporte mieux !

    Ceci dit, j'ai testé avec le click du bouton et tes images sont splendides.

    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
     with BBtn_Jouer do
                   if Tag=0 then begin
                      Tag:=1;
                      Glyph.handle:= LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
                      end; 
    end;
     
    procedure TForm1.BBtn_JouerClick(Sender: TObject);
    begin
     
    with BBtn_Jouer do begin
                   if Tag=0 then begin
                      Tag:=1; 
    Glyph.handle:= LoadBitMap(HInstance, PChar('BT_Jouer1')) ;
                   end else begin
                       Tag:=0; 
    Glyph.handle:= LoadBitMap(HInstance, PChar('BT_Jouer2')) ; 
                   end;
              end;
    end;
    @+,

    Cincap

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

Discussions similaires

  1. Style xp sur un BitBtn
    Par AgriFlash dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/01/2008, 17h48
  2. Icone sur un Bitbtn via GetIconHandle
    Par bionicleman dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2007, 18h44
  3. Highlighter sur un JTextComponent
    Par Sylver--- dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 21/10/2006, 14h39
  4. [Tableaux] Highlight sur variable
    Par sagaff dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2006, 12h02
  5. Réponses: 3
    Dernier message: 20/10/2005, 20h24

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