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 :

Empecher edition cellules d'un ADVStringGrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut Empecher edition cellules d'un ADVStringGrid
    Bonjour à tous,

    Je suis actuellement en train de développer une application en utilisant des advStringGrid (composant TMS, version 3.0.0.3) et j'ai un soucis pour empecher l'édition de certaines cellules.

    Voici mon événement lorsque l'on clique sur une cellule de mon grid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TfrmDonneesClient.desactiverEdition(Sender: TObject; ARow,ACol: Integer);
    begin
      if((ACol = 1) and (ARow=5)) then
         GrdIG_1.Options := GrdIG_1.Options-[goEditing]
         else GrdIG_1.Options := GrdIG_1.Options+[goEditing];
         end;
    end;
    Le probleme c'est que lorsque je teste, si j'essaye d'éditer cette cellule , je n'y arrive pas (logique).

    Par contre, si je clique sur une cellule editable juste après avoir cliqué sur le cellule non éditable, et que je modifie la valeur, la modification se répercute également sur la cellule non modifiable!

    J'ai essayé d'utiliser ma fonction sur un StringGrid classique et là par contre pas de probleme, ca ne modifie pas la cellule non éditable.

    Voila si quelqu'un pouvait m'aider...mais à mon avis c'est un bug qui vient du comosant et donc faudrait peut-être prendre une version plus récente.

    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Ça ressemble effectivement à un bug mais il y a une solution

    Utilise l'evenement oncaneditcell

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.AdvStringGrid1CanEditCell(Sender: TObject; ARow,
      ACol: Integer; var CanEdit: Boolean);
    begin
      canedit:=not((ACol = 1) and (ARow=1));
    end;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    merci pour la réponse.

    Je ferais le test lundi et je verrais si ca marche.

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut
    salut ,
    tu as aussi un evement de ton advgrid... qui se nomme OnGetEditorType qui permet de definir le type de saisie de chacune de tes cellules.
    Voir TeditorType pour connaitres les divers formats des cellules

    L'exemple suivant defini le format des colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Tform1.TabGetEditorType (Sender:Tobject ; Acol,Arow:integer; Var Aeditor : TeditorType);
    begin
       Case Acol of
            0: AEditor := edNomal ;               // édition normal
            1: AEditor := edNone ;                // pas édition
            3: AEditor := edPositiveNumeric;    // edition d'entier positif
            4: AEditor := edComBolist;           // insersion d'une liste
            5: AEditor :=  ....
       end; 
    end;
    end.
    bye

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    Bon j'ai testé les deux solutions et cela marche parfaitement.

    La 2eme solution est meilleure car elle permet en meme temps de définir le type du contenu des cellules.

    En tout cas un grand merci à tous les deux.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    Re bonjour à tous,

    J'ai un autre probleme, concernant encore le composant TadvStringGrid (mais à mon avis c'est pareil avec un TStringGrid)

    Voila j'aimerais qu'une cellule de mon tableau contienne un combobox (à deux choix "oui", "non").

    En utilisant l'événement OnGetEditorType, je peux choisir le type des cellules et donc choisir la propriété EdcomboList pour dire qu'une cellule est de type combo.

    Seulement je ne sais pas comment l'initialiser et quand je lance mon appli et que j'esssaye d'éditer la cellule j'ai une combo vide (logique).

    merci de votre aide.

  7. #7
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    Dans le OnGetEditorType (ou ailleurs mais je pense que tu vas bosser dans cette procédure), il faut que tu attaque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      AdvStringGrid1.ComboBox ...
    La propriété ComboBox pointe vers la combo gérer par la Grid. Tout comme les propriété InplaceEdit, DateTimePicker, ... qui représentent tous les contrôles que tu peux utiliser avec le GetEditorType.
    Après, c'est comme avec une combobox normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ComboBox.items.add(..);
    A plus et Bon courage.
    (L'aide TMS est un peu faite avec les pieds donc si tu as besoin d'aide, n'hésites pas à demander).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    Merci beaucoup pour cette réponse si rapide.

    Ca marche nickel.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    Tiens puisque tu m'a dit de pas hésiter à demander je continue

    Je remarque (et c'est pareil pour les stringgrid) qu'un advstringgrid est composée de 2 "tableaux" : celui qui contient les cellules et un autre faisant office de conteneur.

    A quoi sert ce 2eme tableau? (A part à me faire chier car j'essaye toujours de le réduire au max pour qu'il soit de la taille du 1er tableau)

    Et dailleurs parfois je colle tellement le grand tableau au 1er que dans l'application le 1er tableau est réduit alors que sur l'IDE il ne l'est pas...

    Ya pas une propriété pour dimensionner ce tableau automatiquement?

  10. #10
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    Je n'ai pas de solution à ton problème exactement par contre j'ai une piste.
    Utilise la propriété ColumnSize.
    Si tu met "Stretch" à True, il va redimensionner la colonne "StretchColumn"(une autre propriété de ColumnSize) de manière à utiliser toute la taille de ce que tu appelle le "2ème tableau".
    Si en plus tu mets "SynchWithGrid" à True, le moindre Resize de ta stringgrid réajustera la largeur de la colonne.
    Ce n'est pas exactement ce que tu demandes puisque moi j'ajuste le contenu à la taille de contenant et non le contraire.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    ah bé voila c'est la propriété que je cherchais.

    encore une fois merci beaucoup

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut
    Je continue avec les questions lourdes

    J'ai besoin de créer un advstringGrid de façon dynamique(je ne connais pas son nombre de colonnes à l'avance).

    Est-ce que je peux quand meme le créer avec l'IDE(en mettant nimporte quoi comme nombre de colonnes), quite à le modifier dans le programme? ou bien dois-je le créer de toute pièce dans mon code?

    merci

  13. #13
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    Non pas de problèmes, tu peux le poser avec 1, 10 ou 666 colonnes comme tu veux. Moi je préfère le poser parceque c'est plus facile pour renseigner certaines propriétés.
    Mais il est vrai que le créer dynamiquement ne pose aucun problème. J'aurai tendance à utiliser la création dynamique si le nombre de StringGrid sur la feuille est variable.
    Après, c'est plus une question d'habitude de programmation. J'avais un collègue qui lui n'utilisait que les créations dynamique pour tout ses contrôles, ce n'est vraiment pas facile à modifier et ça rallonge le code mais au final le résultat est le même.

Discussions similaires

  1. [jTable] Edition cellule
    Par elninomed dans le forum Composants
    Réponses: 3
    Dernier message: 15/06/2010, 06h27
  2. editer cellules listView
    Par Invité dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/05/2007, 14h43
  3. Bord de couleur pr une cellule StringGrid ou AdvStringGrid
    Par gazier20 dans le forum Composants VCL
    Réponses: 12
    Dernier message: 05/02/2006, 03h00
  4. [JTable][editable] cellule activée/ désactivée
    Par nawel dans le forum Composants
    Réponses: 5
    Dernier message: 09/05/2005, 14h37
  5. [JTable] editer cellule
    Par cootchy dans le forum Composants
    Réponses: 5
    Dernier message: 08/09/2004, 21h15

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