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 :

Comment utiliser l'évènement CustomDrawCell d'un composant TcxGrid ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Comment utiliser l'évènement CustomDrawCell d'un composant TcxGrid ?
    Bonjour,

    J'utilise les composant cxgrid et cxdbgrid (devexpress) et je suis confrontée au pb suivant:
    dans ma grille j'ai une colonne avec la property checkbox (pour afficher une valeur booléenne gràce à une case à cocher)

    Dans certains cas (sur certaines lignes), l'utilisateur ne doit pas pouvoir changer la valeur de la case à cocher, je voudrais donc griser la case dans ces cas là et je pensais utiliser l'évènement CustomDrawCell de la grille, mais je ne sais pas comment l'utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TFrm.VTDBColumn_1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    Merci de votre aide

    Isa
    Isachat

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut

    cette methode ne sert qu'a dessinner la grille
    en fait il te faut controler les donnée sous jaccente
    pour effectuer l'operation voulue

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    tu peut faire un traitement dans l'évenement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    begin
     if <Condition> Then
      DbGrid1.Options := DbGrid1.Options-DgEditing
    else
    DbGrid1.Options := DbGrid1.Options+DgEditing
    end;

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par aityahia
    tu peut faire un traitement dans l'évenement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    begin
     if <Condition> Then
      DbGrid1.Options := DbGrid1.Options-DgEditing
    else
    DbGrid1.Options := DbGrid1.Options+DgEditing
    end;
    Cela permet bien d'empêcher la modification des données mais ne grise pas la case (pour indiquer à l'utilisateur que ces données sont non modifiables)

    merci,
    Isa
    Isachat

  5. #5
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    je comprend votre probleme maintenant, je n'est pas utiliser ce composant alors je peut vous répondre mais avec un dbgrid classic en peut le faire.

    pour les composant grille Tms TAdvGrid ou Grille si vous pouvez la procurer, j'ai pas trouvé mieu.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Bonjour,
    Merci d'avoir essayé de m'aider. J'ai trouvé la solution en consultant un forum russe, bien sûr je n'ai pas compris les explications qui allait avec mais le code correspond à ce que je veux faire.

    Au cas où cela pourrait resservir à quelqu'un:
    bloquer la saisie seulement sur certaines lignes
    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 TMaForm.MaGrilleFocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
    begin
    //...
      if  MaCondition then
      begin    
        MaGrilleMaColonne.Options.Editing := false;
        MaGrilleMaColonne.Properties.ReadOnly := true;
      end
      else
      begin    
        MaGrilleMaColonne.ReadOnly := false;
        MaGrilleMaColonne.Options.Editing := true;
      end;
    end;
    redessiner la cellule (dans ce cas masque la case à cocher à défaut de la griser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TMaForme.MaGrilleMaColonneCustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    begin
       if MaCondition then
      begin
        //ACanvas.Brush.Color := clGray; //éventuellement pour mettre une couleur de fond...
        ACanvas.Canvas.FillRect(AViewInfo.Bounds);
        ADone := True
      end else
        ADone := False;
    end;
    Isa
    Isachat

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

Discussions similaires

  1. [MooTools] Comment utiliser l'événement domready
    Par jekif dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 16/07/2009, 10h11
  2. Comment utiliser l'évènement de triple click
    Par croquignole dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/11/2007, 08h31
  3. Comment utiliser une icône personnalisée pour un composant ?
    Par Bruno75 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/09/2005, 17h24
  4. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38

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