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 :

[D7] [Access] [TMSGrid] comment empecher le curseur de se déplacer d'une cellule


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    iam
    iam est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Par défaut [D7] [Access] [TMSGrid] comment empecher le curseur de se déplacer d'une cellule
    salut
    j'utlise le ADVStringGrid de TMS, j'ai un programme qui empeche le curseur de se déplacer vers une autre cellule si cette cellule ne remplit pas une condition, ça marche la première fois mais quand je reviens vers la cellule une autre fois et je la modifie ça passe
    mon programme est le suivant :
    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
    procedure TFBonSortie.DetailBonCellChanging(Sender: TObject; OldRow,
      OldCol, NewRow, NewCol: Integer; var Allow: Boolean);
    var value:string;valid:boolean;
     
    IF COL=4 then oldcol:=4;
            if (oldcol = 4) and (cells[4,row]<>'') and (cells[10,row]='') and (cells[9,row]<>'') then
              begin
                if strtoint(cells[9,row])<0  then
                  begin
                    erreurlabel.Visible:=true;
                    erreurlabel.Caption:='la Quantité saisie dépasse la Quantité restante en stock ';
                    Framenavigator11.SaveButton.Enabled:=false;
                    erreurlabel.BlinkIntervalOff:=500;
                    erreurlabel.BlinkIntervalOn:=500;
                    erreurlabel.Blinking:=true;
                    allow:=false;
                    detailbon.Navigation.AdvanceInsert:=false;
                    detailbon.Navigation.AllowInsertRow:=false;
                    col:=4;
                  end
                else
                  begin
                    detailbon.Navigation.AdvanceInsert:=true;
                    detailbon.Navigation.AllowInsertRow:=true;
                    erreurlabel.Visible:=false;
                    erreurlabel.BlinkIntervalOff:=5000;
                    erreurlabel.BlinkIntervalOn:=5000;
                    rzlabel1.Visible:=false;
                    rzlabel2.Visible:=false;
                    detailbon.cells[10,detailbon.row]:='true';
                  end;
              end;
    je ne sais pas est ce que c'est clair mais mon but est d'interdir le curseur de bouger d'une cellule si elle ne remplis pas ma condition
    merci

  2. #2
    iam
    iam est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Par défaut
    svp les amis
    j'ai vraiment essayé de regler ce pb mais sans succès, si quelqu'un pourra m'aider je lui serai très reconnaissant
    merci

  3. #3
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    le paramètre var Allow te permet de pas changer de cellule tant que la condition pour un eventuel changement n'est pas rempli.

    bon je connais pas ce composant, et j'ai pas trop compris ton code mais je ferais un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
      Allow := CheckCanChange;
    ou CheckCanChange verifie si les conditions sont bien rempli et renvois un boolean.

  4. #4
    iam
    iam est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Par défaut
    marci kaféine pour ta réponse mais je ne comprend pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Allow := CheckCanChange;
    , ou je la metterai, mon besoin est de vérifier si la quantité saisie ne dépasse pas valeur stocké dans la base de donnée, si elle dépasse, le curseur se plante dans cette cellule pour ne pas autoriser à l'user de sauvegarder cette valeur négative

  5. #5
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    CheckCanChange n'était que pour l'exemple.

    Si je comprend bien, les paramètres OldRow,
    OldCol, NewRow, NewCol: Integer de l'évenement donne les coordonnées de l'ancienne et de la nouvelle cellule

    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
     
     
    function ValideCellule(x, y): Boolean;
    var
      s: string;
      valeur, valeurdb: integer;
     
    begin
      s := Cell(x, y).value;
      try
        valeur := IntToStr(s);
      except
         //Erreur ici
      end;
     
      valeurdb := ... ; 
     
      Result := valeur <= valeurdb 
    end;
     
    procedure TFBonSortie.DetailBonCellChanging(Sender: TObject; OldRow,
      OldCol, NewRow, NewCol: Integer; var Allow: Boolean);
    begin
      Allow := ValideCellule(oldRow, oldCol);
    end;

  6. #6
    iam
    iam est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Par défaut
    merci kaféine
    tu m'as donné une très bonne idée, ça a marché très bien
    j'ai oublier d'utiliser une fonction, je te remercie encore une fois
    bon dev

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2010, 14h12
  2. Réponses: 9
    Dernier message: 13/08/2008, 12h10
  3. Réponses: 3
    Dernier message: 13/03/2007, 13h40
  4. Réponses: 6
    Dernier message: 07/11/2006, 09h23
  5. [HTML] comment casser un long mot à l'interieur d'une cellule TD ?
    Par longbeach dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/06/2006, 04h54

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