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

Lazarus Pascal Discussion :

Première lettre d'une cellule d'un StringGrid en majuscule [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut Première lettre d'une cellule d'un StringGrid en majuscule
    Bonjour

    Comment mettre la première lettre d'une cellule d'un stringgrid en majuscule.
    pendant la frappe de la chaîne de caractère de cette cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1.Cell[1,1] := ' Majuscule ' ;
    j'ai recherché un début de solution sur le net mais rien n'y fait ?

    merci

  2. #2
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    j'ai fait ce code qui le fait mais est ce bien ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if Length(StringGrid1.Cells[1,1])<=1 then 
        begin
           StringGrid1.Cells[1,1]:=upcase(StringGrid1.Cells[1,1]);
      end;
    end;

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Je ferais plutôt comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: char);
    begin
      with StringGrid1 do
      begin
        if (Cells[Col, Row] = '') and (Key in ['a'..'z']) then
          Key := UpCase(Key);
      end;
    end;

  4. #4
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    bonjour et merci Roland Chastain pour la réponse

    le code va bien mais je suis obligé d’écrire deux fois le mot pour
    qu'a la deuxième fois la première lettre du mot soit en majuscule ?

    fois 1 = grenoble
    fois 2 = Grenoble

    je suis sous Linux Ubuntu

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    C'est curieux, chez moi (Lazarus 1.2.6, Windows 8) ça fonctionne parfaitement. Y aurait-il une différence de comportement entre Windows et Linux ? Ou bien d'une version de Lazarus à l'autre ?

    Êtes-vous sûr d'avoir bien retranscrit le code que j'ai posté ? Remarquez bien que j'ai utilisé l'événement OnKeyPress (et non pas OnKeyUp) ?

  6. #6
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    C'est curieux, chez moi (Lazarus 1.2.6, Windows 8) ça fonctionne parfaitement. Y aurait-il une différence de comportement entre Windows et Linux ? Ou bien d'une version de Lazarus à l'autre ?

    Êtes-vous sûr d'avoir bien retranscrit le code que j'ai posté ? Remarquez bien que j'ai utilisé l'événement OnKeyPress (et non pas OnKeyUp) ?
    oui, j'ai fait un copier/coller du code que tu ma donné que j'ai collé dans OnKeyPress du StringGrid

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Salut,

    sous Linux ce code (ton premier) fonctionne très bien :
    Citation Envoyé par winow Voir le message
    j'ai fait ce code qui le fait mais est-ce bien ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if Length(StringGrid1.Cells[1,1])<=1 then 
        begin
           StringGrid1.Cells[1,1]:=upcase(StringGrid1.Cells[1,1]);
      end;
    end;
    Un peu optimisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      with StringGrid1 do
        if Length(Cells[Col,Row]) = 1 then Cells[Col,Row] := upcase(Cells[Col,Row]);
    end;

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Sous Windows également, la version corrigée du code fonctionne bien.

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Pas testé, mais ce qui n'est pas satisfaisant, c'est que le paramètre Key est en var, mais sans effet si on le change...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    sous Linux ce code (ton premier) fonctionne très bien :


    Un peu optimisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      with StringGrid1 do
        if Length(Cells[Col,Row]) = 1 then Cells[Col,Row] := upcase(Cells[Col,Row]);
    end;
    Avec Ubuntu/Lazarus :
    mon code ne met que la majuscule que sur la cellule 1,1
    Ton code met la majuscule sur toutes les cellules avec ubuntu/lazarus.

  11. #11
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonsoir,

    Je pense que la meilleure solution pour toi est de modifier le texte à la sortie de la cellule (comme Roland l'a d'ailleurs suggéré).
    La solution avec KeyUp fonctionne mais à condition que la longueur du texte soit = 1.
    Donc tu n'auras plus la première lettre en majuscule si :
    - l'utilisateur repositionne le curseur au début pour modifier la première lettre.
    - l'utilisateur fait un coller.

    Teste ceci sous Linux.
    Remarque : j'ai adapté la mise en majuscule convenant à l'UTF8 (L'unité LazUTF8 est à déclarer): la première lettre passera en majuscule même pour un caractère accentué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.StringGrid1EditingDone(Sender: TObject);
    var
      S: string;
    begin
       with StringGrid1 do S:= Cells[Col, Row];
       if Length(S) > 0 then
       begin
           S:= UTF8UpperCase(UTF8LeftStr(S, 1)) + UTF8Copy(S, 2, Length(S));
           with StringGrid1 do Cells[Col, Row]:= S;
       end;
    end;
    Cordialement
    Thierry

  12. #12
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    la première lettre passera en majuscule même pour un caractère accentué.
    Excellente idée ! Testé avec succès ton code sous Windows.

  13. #13
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Bonsoir,

    Je pense que la meilleure solution pour toi est de modifier le texte à la sortie de la cellule (comme Roland l'a d'ailleurs suggéré).
    La solution avec KeyUp fonctionne mais à condition que la longueur du texte soit = 1.
    Donc tu n'auras plus la première lettre en majuscule si :
    - l'utilisateur repositionne le curseur au début pour modifier la première lettre.
    - l'utilisateur fait un coller.

    Teste ceci sous Linux.
    Remarque : j'ai adapté la mise en majuscule convenant à l'UTF8 (L'unité LazUTF8 est à déclarer): la première lettre passera en majuscule même pour un caractère accentué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.StringGrid1EditingDone(Sender: TObject);
    var
      S: string;
    begin
       with StringGrid1 do S:= Cells[Col, Row];
       if Length(S) > 0 then
       begin
           S:= UTF8UpperCase(UTF8LeftStr(S, 1)) + UTF8Copy(S, 2, Length(S));
           with StringGrid1 do Cells[Col, Row]:= S;
       end;
    end;
    Cordialement
    Thierry
    merci ThWilliam
    j'ai testé ton code et :

    1- j'ai bien rajouté l'unité LazUTF8 ( uses LazUTF8; )

    2 -sous Ubuntu j'ai rajouté la fonction UTF8LeftStr qui n'a pas l'air
    d'exister dans l'unité LazUTF8 sous Lazarus/Ubuntu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Utf8LeftStr(const AText: String; const ACount: Integer): String;
    begin
      Result := Utf8Copy(AText, 1, ACount);
    end;
    3- Ton code met bien la première lettre en majuscule mais si je clique dans une cellule
    ca me met la majuscule sur tous les mots frappés avant.

    .

  14. #14
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    hello,
    j'ai repris l'idée de ThWilliam d'utiliser l'événement SetEditText qui se déclenche à chaque changement de texte dans une cellule et effectivement j'ai constaté le problème de la position du curseur d'édition sous linux. Je semble avoir trouvé une solution bestiale (grouik !) : j'utilise l'éditeur de cellule de grille voici le code à essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: string);
    var
      S: string;
    begin
        if Length(Value) > 0 then
        begin
            S:= Value;
            S:= UTF8UpperCase(UTF8LeftStr(S, 1)) + UTF8Copy(S, 2, Length(S));
           TStringCellEditor(TStringGrid(Sender).Editor).EditText := S;
        end;
    end;
    P.S : ça ne marche pas sous windows (le curseur d'édition se retrouve en 1ère position) remplacer dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TStringCellEditor(TStringGrid(Sender).Editor).EditText := S;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TStringGrid(Sender).Cells[ACol,ARow] := S;
    Ami calmant J.P (pas T)

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

Discussions similaires

  1. [XL-2007] Lire les 3 premières lettres d'une cellule
    Par nioko dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/12/2012, 17h04
  2. [XL-2007] Comment vérifier la première lettre d'une cellule?
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/01/2010, 21h28
  3. Réponses: 2
    Dernier message: 16/10/2008, 12h06
  4. Extraire les deux dernieres lettres d'une cellule
    Par SybVicious dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/09/2006, 11h54
  5. Récupérer les deux premières lettres d'une chaine
    Par moscovisci dans le forum ASP
    Réponses: 3
    Dernier message: 10/01/2006, 14h53

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