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

Composants VCL Delphi Discussion :

Un canvas récalcitrant


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut Un canvas récalcitrant
    Bonjour,

    voici le probleme que je n'arrive pas à résoudre
    Je créer un TPageControl avec 2 Tabsheet
    je mets true dans OwnerDraw, ce qui me permet de redessiner le TpageControl et plus particulierement les etiquettes des tabsheet.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFormPrincipal.PageControlPrincipalDrawTab(
      Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
      Active: Boolean);
    begin
      Degrader(PageControlPrincipal.Canvas,Rect,clcream,$0084DAFF);
      Brush.Style := bsClear;
      DrawText(PageControlPrincipal.Handle, Pchar(PageControlPrincipal.Pages[Tabindex].caption),-1, Rect, DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE);
     
    end;
    Mais la j'ai une erreur :Constant Objet cannot be passed as var parameter au niveau du Rect de Drawtext
    Alors j'ai essayé cela

    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 TFormPrincipal.PageControlPrincipalDrawTab(
      Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
      Active: Boolean);
    Var
      Etiquette: Trect;
    begin
      Degrader(PageControlPrincipal.Canvas,Rect,clcream,$0084DAFF);
      PageControlPrincipal.Canvas.Brush.Style := bsClear;
     
      Etiquette.Left := PageControlPrincipal.Pages[Tabindex].Left;
      Etiquette.Top := PageControlPrincipal.Pages[Tabindex].Top;
     
      DrawText(PageControlPrincipal.Handle, Pchar(PageControlPrincipal.Pages[Tabindex].caption),-1, Etiquette, DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE);
    end;
    end;
    Alors j'ai plus d'erreur mais il ne m'écris pas mon caption, j'ai que le dégradé.

    Ou je fais l'erreur ? pouvez-vous m'aider

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Et pourquoi pas comment ça :

    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 TFormPrincipal.PageControlPrincipalDrawTab(
      Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
      Active: Boolean);
    Var
      Etiquette: Trect;
    begin
      Etiquette := Rect;
      Degrader(PageControlPrincipal.Canvas, Etiquette, clcream, $0084DAFF);
      PageControlPrincipal.Canvas.Brush.Style := bsClear;
     
      Etiquette.Left := PageControlPrincipal.Pages[Tabindex].Left;
      Etiquette.Top := PageControlPrincipal.Pages[Tabindex].Top;
     
      DrawText(PageControlPrincipal.Handle, Pchar(PageControlPrincipal.Pages[Tabindex].caption),-1, Etiquette, DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE);
    end;

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Désolé mais cela ne change pas. Le text ne s'écrit pas. aucun caption n'apparaît.

    j'ai fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFormPrincipal.PageControlPrincipalDrawTab(
      Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
      Active: Boolean);
    Var
      Etiquette: Trect;
    begin
      Degrader(PageControlPrincipal.Canvas,Rect,clcream,$0084DAFF);
      PageControlPrincipal.Canvas.Brush.Style := bsClear;
      PageControlPrincipal.Canvas.Font.Color:=clBlack;
     
      PageControlPrincipal.Canvas.TextOut(Rect.Left+5,Rect.Top+5,PageControlPrincipal.Pages[Tabindex].caption);
     
    end;
    Qui fonctionne trés bien, mais je peux pas centrer le text, drawtext lui le permet.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    n'est-il pas gênant que Etiquette ait un angle supérieur gauche défini, mais pas d'angle inférieur droit attribué (0,0) ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    n'est-il pas gênant que Etiquette ait un angle supérieur gauche défini, mais pas d'angle inférieur droit attribué (0,0) ?
    C'est ce que j'allais dire. Il faudrait initialiser Etiquette complètement.

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. Ombres portées sur un canvas
    Par pifou02 dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2003, 19h03
  3. Comment mettre le curseur d'un Memo sur le Canvas d'une Form ?
    Par julie20 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2003, 13h24
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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