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 :

Couleur du bandeau supérieur d'une fenêtre


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 126
    Par défaut Couleur du bandeau supérieur d'une fenêtre
    Comment changer la couleur du bandeau supérieur d'une fenêtre (zône avec l'icone, le titre et le menu système)?. Par cohérence avec les autres couleurs du contenu de la fenêtre, j'aimerais m'affranchir de ce sempiternel bleu de Windows XP.
    Merci d'avance pour vos solutions.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    le bandeau superieur est le caption bar

    il existe diferente methode pour changer celui-ci

    soit par les message windows

    soit comme ceci

    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
    .............
    dans la parti private de ta form  tu declare : 
      procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
    .............
    ensuite tu ecrit la methode correspondante:
     
    procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
    var
      ACanvas : TCanvas;
    begin
      inherited;
      ACanvas := TCanvas.Create;
      try
        ACanvas.Handle := GetWindowDC(Self.Handle);
        with ACanvas do begin
          Brush.Color := clActiveCaption;
          Font.Name := 'Tahoma';
          Font.Size := 8;
          Font.Color := clred;
          Font.Style := [fsItalic, fsBold];
          TextOut(GetSystemMetrics(SM_CYMENU) +  getSystemMetrics(SM_CXBORDER),
          Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height))/2) +1,
    self.Caption);
        end;
      finally
        ReleaseDC(Self.Handle, ACanvas.Handle);
        ACanvas.Free;
      end;
    end;
    @+ Phil

  3. #3
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Le problème c'est que les deux écritures du titre se chevauche.

    si j'ajoute ça, ça fait la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      oldcaption := caption ;
      caption := '' ;
     
      inherited;
     
      caption := oldcaption ;

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    il faut "effacer" la zone graphique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Brush.Color:=RGB(10,0,0);
      FillRect(Rect(0,0,ClientWidth,GetSystemMetrics(SM_CYCAPTION)));
      ...
      Textout(...)
    pas tester mais c'est le principe

    @+ Phil

    ps trouver sur le net
    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
     
    procedure TForm1.DrawCaption;
    var
      xFrame, yFrame, xSize, ySize : Integer;
    begin
      {get titlebar dimensions}
      xFrame := GetSystemMetrics(SM_CXFRAME);
      yFrame := GetSystemMetrics(SM_CYFRAME);
      xSize := Self.Width - yFrame;
      ySize := yFrame + GetSystemMetrics(SM_CYCAPTION); 
      {allocate device context handle to form's canvas}
      with Self.Canvas do 
      begin
         Handle := GetWindowDC(Self.Handle);
         with Font do 
         begin
             Name := 'Arial';
             Size := 9;
             Color := clBlue;
             Style := [fsBold];
          end;
          if Self.Active then
            Brush.Color := clRed;
          {fill titlebar except for close ***on}
          FillRect(Rect(xFrame, yFrame, xSize - ySize + (xFrame div 2),
    ySize));
          TextOut(xFrame + 4, yFrame + 2, Self.Caption);
           {release device context ...}
           { and set the canvas handle to default}
         ReleaseDC(Self.Handle, Handle);
         {... set the canvas handle to nil}
         Handle := 0;
      end;
    end;

  5. #5
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 126
    Par défaut
    Je reviens d'une sortie de 65km à vélo et déjà plein de réponses. Vous allez plus vite que moi sur ma bicyclette. Après expérimentation des premières lignes de codes d'Anapurna, j'ai les problèmes suivants:
    -Le titre (caption) de la fenêtre est écrit deux fois. Une première fois avec le fond bleu initial et le second avec celui que je souhaite.
    -Lors d'une modification ultérieure du contenu de la fenêtre, tel que remplissage d'une StringGrid, seul persiste le titre sur fond bleu.
    Il n'y a donc pas de changement de couleur de ce bandeau.
    De plus en reproduisant scrupuleusement les propriétés par défaut visualisée dans l'inspecteur d'objet, les deux écritures du titre ne se superposent pas exactement.

Discussions similaires

  1. [IDE] Modifier la couleur de la bordure d'une fenêtre
    Par Pascale38 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/12/2011, 23h30
  2. Changer la couleur d'arrière plan d'une fenêtre MDI.
    Par tssi555 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/10/2008, 14h27
  3. Créer une fenêtre avec la couleur par defaut d'une dialog
    Par NicolasJolet dans le forum Windows
    Réponses: 2
    Dernier message: 03/08/2006, 16h01
  4. couleur de fond d'une fenêtre
    Par Zorgloub dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 14/04/2006, 00h38
  5. Couleur du bandeau d'une combo
    Par ben-34 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/01/2006, 11h46

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