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 :

VirtualDrawTree : checkbox qui s'affiche uniquement au passage de la souris


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut VirtualDrawTree : checkbox qui s'affiche uniquement au passage de la souris
    Bonjour à tous,

    je ne comprends une chose qui se passe avec mon VirtualDrawTree, en fait voici mon OnDrawNode ci-dessous mais hélas cela ne fonctionne pas correctement dans le sens où il faut que je passe au dessus des lignes du TreeView pour que les checkbox s'affiche ?!

    Avez vous une idée ?
    Je l'utilise dans d'autres programmes et cela fonctionne parfaitement !??

    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
    procedure TSelectKeyword.vtKeywordsDrawNode(Sender: TBaseVirtualTree;
      const PaintInfo: TVTPaintInfo);
    var
      KR: TKeywordClass;
      R: TRect;
    begin
      with PaintInfo do
      begin
        R:=ContentRect;
        if Sender.Selected[Node] then
          Canvas.Font.Color:=clWhite
        else
          Canvas.Font.Color:=clBlack;
     
        Canvas.Brush.Style:=bsClear;
     
        KR:=GetPointerFromTree(Sender, Node);
        Node.CheckType := ctCheckBox;
     
     
        case Column of
          0: ; // C'est le Checkbox
          1: DrawText(Canvas, ContentRect, taLeftJustify, tlCenter, KR.Name);
          2: DrawText(Canvas, ContentRect, taCenter, tlCenter, KR.Lang);
          3: DrawText(Canvas, ContentRect, taRightJustify, tlCenter, inttostr(KR.Freq));
          4: DrawText(Canvas, ContentRect, taRightJustify, tlCenter, inttostr(KR.Occur));
        end;
      end;
    end; {* proc .vtKeywordDrawNode *}

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Bonjour,

    J'ai déjà rencontré ce type de problème avec par contre, un autre composant (tacQueryBuilder). Dès que celui-ci était créé à la vollée dans un TFrame. Une des checkBox et en particulier la première du composant ne s'affichait pas. Il fallait la survoller pour que celle-ci apparaisse.

    J'avais alors résolu ce petit problème en plaçant, pour le composant en question, sa propriété Ctl3D à false.

    Je ne sais pas si cette solution règlera ton problème, mais vu la similitude de l'erreur rencontrée on ne sait jamais.

    Cordialement

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Bonjour Pascal,

    Hélas pour moi cela n'a pas eu de résultat.
    Merci quand même pour ta réponse.

    Une autre idée ?

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Je pense que la reponse à ton probleme est celle-ci:

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, VirtualTrees;
     
    type
      TKeywordClass = class
       Name : string;
       Lang : string;
       Freq : Integer;
       Occur : Integer;
      end;
     
    type
      TForm1 = class(TForm)
        VirtualStringTree1: TVirtualDrawTree;
        procedure FormCreate(Sender: TObject);
        procedure VirtualStringTree1DrawNode(Sender: TBaseVirtualTree;
          const PaintInfo: TVTPaintInfo);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      newKeyword : TKeywordClass;
      newNode : PVirtualNode;
      i:Integer;
    begin
         VirtualStringTree1.NodeDataSize:= Sizeof(TObject);
         VirtualStringTree1.TreeOptions.MiscOptions :=  VirtualStringTree1.TreeOptions.MiscOptions + [toCheckSupport];
         VirtualStringTree1.CheckImageKind := ckXP;
         for i:=0 to 100 do
         begin
              newKeyword := TKeywordClass.Create;
              newKeyword.Name := 'Name' + IntToStr(i);
              newKeyword.Lang := 'Lang'+ IntToStr(i);
              newKeyword.Freq := i;
              newKeyword.Occur := 10;
              newNode :=  VirtualStringTree1.AddChild(nil,newKeyword);
              newNode.CheckType := ctCheckBox;
              newNode.CheckState := csCheckedNormal;
         end;
    end;
     
    procedure TForm1.VirtualStringTree1DrawNode(Sender: TBaseVirtualTree;
      const PaintInfo: TVTPaintInfo);
    var
      KeyWord : ^TKeywordClass;
    begin
      KeyWord := Sender.GetNodeData(PaintInfo.node);
      if Sender.Selected[PaintInfo.Node] then
          PaintInfo.Canvas.Font.Color:=clWhite
      else
          PaintInfo.Canvas.Font.Color:=clBlack;
     
        PaintInfo.Canvas.Brush.Style:=bsClear;
     
      case PaintInfo.Column of
           1: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left ,PaintInfo.CellRect.Top ,KeyWord.Name);
           2: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left ,PaintInfo.CellRect.Top ,KeyWord.Lang );
           3: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left ,PaintInfo.CellRect.Top ,IntToStr(KeyWord.Freq ));
           4: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left ,PaintInfo.CellRect.Top ,IntToStr(KeyWord.Occur ));
     
      end;
    end;
     
    end.
    VtDrawNode.zip

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Salut MedGir,

    Parfait ! ça marche, il semble que cela soit en fait ceci qui posait problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              for i:=0 to lKW.Count-1 do
                vtKeywords.AddChild(nil, lKW[i]);
    que j'ai remplacé par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              for i:=0 to lKW.Count-1 do
              Begin
                N:=vtKeywords.AddChild(nil, lKW[i]);
                N.CheckType := ctCheckBox;
                N.CheckState := csCheckedNormal;
              End;
    Je peux donc ajouter grâce à toi le Tag Résolu dans mon post !

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    De rien, ca sert à cela un forum.

    Je suis content d'avoir pu t'aider.

    Bon code...

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

Discussions similaires

  1. [AC-2003] Barre de menu qui s'affiche uniquement dans les requete
    Par scorpking dans le forum IHM
    Réponses: 0
    Dernier message: 28/03/2013, 14h10
  2. afficher image au passage de la souris
    Par -MielPops- dans le forum Allegro
    Réponses: 1
    Dernier message: 13/04/2010, 17h27
  3. Un checkbox qui affiche/cache un clip
    Par nicolas2603 dans le forum Flash
    Réponses: 3
    Dernier message: 27/06/2007, 17h45
  4. image qui s'affiche au dessus avec souris au passage sur un lien
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 18/09/2006, 22h55

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