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 :

Récupère la première lettre d'une valeur d'une cellule d'un TStringGrid


Sujet :

Delphi

  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
    Points : 1 113
    Points
    1 113
    Par défaut Récupère la première lettre d'une valeur d'une cellule d'un TStringGrid
    J'essai de récuperer la première lettre d'une cellule

    Sachant que l'on peu ecrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    StringGridMois.Cells[xRepereJour,1] := AnsiUpperCase(LongDayNames[j][1] +#13+#10+ IntToStr(xRepereJour);)
     
    ...
    Le LongDayNames[1][1] par exemple nous donne 'L' du LUNDI

    Pourquoi ce code me retourne une mega erreur EAccessViolation

    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.StringGridMoisDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    Begin
    .....
    
        if (Arow = 1) then
        Begin
          if StringGridMois.Cells[Acol,Arow][1] = 'S' then  <-- ICI
          Begin
          ...
          end;
        end;
    ....
    Je sais que cela viens de :
    StringGridMois.Cells[Acol,Arow][1] = 'S'

    apparement il n'aime pas ! mais comment je peux m'y prendre ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    C'est que ta cellule est vide !

    Assures-toi toujours que la longueur de la chaîne soit >= à l'index du caractère que tu veux tester.
    L'indexation des Cells est également à base 0. Tes titres de colonnes doivent certainement être à ARow = 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if (ARow = 0) and (Length(StringGridMois.Cells[ACol,ARow]) >= 1) then
        Begin
          if StringGridMois.Cells[ACol,ARow][1] = 'S' then
          ...
        end;
    Il y a encore un détail qui me titille . Comment vas-tu gérer Mardi et Mercredi ?
    Tu devras tester 2 caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Units StrUtils;
     
        //Le test de la longeur de la chaîne est inutile ici.
        //AnsiStartsText se charge de tout !
        if ARow = 0 then
        Begin
          if AnsiStartsText('Sa', StringGridMois.Cells[ACol,ARow]) then
          ...
        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
    Points : 1 113
    Points
    1 113
    Par défaut
    Merci pour la réponse. Le AnsiStartsText fonctionne trés bien, voilà ce que j'ai ecris dans mon OnDrawCell du StringGrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    if (Arow = 1) and (Acol > 0) then
        Begin
          if AnsiStartsText('S',StringGridMois.Cells[Acol,Arow]) or AnsiStartsText('D',StringGridMois.Cells[Acol,Arow]) then
          Begin
     
    ...
    Alors pas de problème le Mardi et Mercredi, ce qui m'interesse c'est de trouver le Week-end (S et D)

    Merci Andnotor

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

Discussions similaires

  1. [MySQL] Récupération d'une valeur d'une page vers une autre
    Par fidecourt dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/09/2007, 14h19
  2. CF 1.0 modifier une valeur d'une form a une autre
    Par maxmarie dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 11/09/2007, 18h09
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. passer une valeur d'une requête a une table
    Par LesLemmings dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/06/2006, 14h13
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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