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 :

Couleur de la barre de menu


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Couleur de la barre de menu
    Bonjour à tous.

    J'ai une question : Peut-on changer la couleur de fond d'une barre de menu ?

  2. #2
    Membre expert
    Citation Envoyé par sematimo Voir le message
    Bonjour à tous.

    J'ai une question : Peut-on changer la couleur de fond d'une barre de menu ?
    Salut oui c'est possible




    Il faut mettre la propriété TMenu.OwnerDraw à True et assigner l'évènement OnDrawItem.
    C'est également la même chose avec un TPopUpMenu.

    Un petit exemple en prime, pour mieux comprendre

    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
    Membre du Club
    Bonjour

    Merci pour ton code, je pense que je vais l'adapter aux popup.

  4. #4
    Membre expert
    Citation Envoyé par sematimo Voir le message
    Bonjour
    Mon menu normal:

    J'ai donc mis OwnerDraw à true et OnDrawItem à MainMenu1DrawItem.
    Voici mon code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.MainMenu1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState);
    var
      s: string;
    begin
      ACanvas.Brush.Color := clSkyBlue;
      ACanvas.Rectangle(ARect);
      s := (Sender as TMenuItem).Caption;
      ACanvas.TextOut(ARect.Left, ARect.Top, s);
    end;


    Et voici le résultat:

    Plutôt bizarre...
    Bonjour,

    si tu parles des bordures, c'est normal. car tu n'as pas définis Canvas.Pen.Color et Canvas.Brush.Style à bsClear avant l'écriture du texte

    Essayes :

    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
    procedure TForm1.MMMenuDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState);
    var
      s: string;
      x, y : Integer;
    begin
          ACanvas.Pen.Color := clSkyBlue;
      ACanvas.Brush.Color := clSkyBlue;
      ACanvas.Rectangle(ARect);
      s := (Sender as TMenuItem).Caption;
     
          ACanvas.Brush.Style := bsClear;
      x :=  ARect.Left + 4;
      y := (ARect.Top + ARect.Bottom - ACanvas.TextHeight('Tq')) div 2;
      ACanvas.TextOut(x, y, s);
    end;


    A+
    • "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
    Membre du Club
    Effectivement avec Canvas.Pen.Color et Canvas.Brush.Style à bsClear ça marche.
    Merci beaucoup.

  6. #6
    Membre du Club
    J'ai un petit problème, les séparateur sont tronqués

  7. #7
    Membre expert
    Citation Envoyé par sematimo Voir le message
    J'ai un petit problème, les séparateur sont tronqués
    Dans ce cas, il faut faire comme dans mon premier exemple.

    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
    procedure TForm1.MMMenuDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState);
    var
      s: string;
      x, y : Integer;
    begin
      ACanvas.Pen.Color := clSkyBlue;
      ACanvas.Brush.Color := clSkyBlue;
      ACanvas.Rectangle(ARect);
      s := (Sender as TMenuItem).Caption;
     
      ACanvas.Brush.Style := bsClear;
     
      x :=  ARect.Left;
      y := (ARect.Top + ARect.Bottom - ACanvas.TextHeight('Tq')) div 2;
     
      if s = '-' then  // Séparateur
      begin
        ACanvas.Pen.Color := clGray;
        ACanvas.Line(ARect.Left, ARect.Top + 2, ARect.Right, ARect.Top + 2);
      end
      else
      begin
        x :=  x + 4;
        ACanvas.TextOut(x, y, s);
      end;
    end;
    • "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

  8. #8
    Membre du Club
    Merci
    ça marche...

  9. #9
    Expert éminent sénior
    Salut,

    HS
    Citation Envoyé par BeanzMaster Voir le message
    Ah, c'est rigolo, quand je regarde attentivement ta copie d'écran, qui ressemble à s'y méprendre à une situation IRL, je réalise que j'ai plus vite fait de lire les textes que de décoder les icônes (même si je les connais par cœur),

    Hé ouais ! Et du coup j'en conclus qu'in fine elles ne servent à rien,
    Tiens, à la place tu devrais nous mettre une bombasse comme on en voit enroulées autour des pompes à essence, aux States,
    T'as l'embarras du choix :


    /HS
    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

###raw>template_hook.ano_emploi###