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 :

Copier Coller d'une cellule d'un StringGrid


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut Copier Coller d'une cellule d'un StringGrid
    Bonjour à tous,

    j'ai une Form qui contient 2 TStringGrid et des TEdit. Je voudrais faire du copier coller du contenu de la sélection entre les différents objets.

    J'ai fait ce code qui fonctionne bien pour les TEdit, mais pour les cellules des TStringGrid, je ne peux copier que la cellule entière (les StringGrid sont en goEditing = True) :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    { =============================================================== }
    procedure TF_Princ.Copier1Click(Sender: TObject);
    Var
       Grille : TStringGrid ;
       ACol, ARow : Integer ;
    Begin
       If (ActiveControl is TStringGrid) Then
          Begin
             Grille :=  (ActiveControl as TStringGrid) ;
             ACol := Grille.Col ;
             ARow := Grille.Row ;
             Clipboard.AsText := Grille.Cells[ACol, ARow] ;
          End ;
       If (ActiveControl is TEdit) Then
          Begin
             Clipboard.AsText := (ActiveControl as TEdit).SelText ;
          End ;
    End;
    { =============================================================== }
    procedure TF_Princ.Coller1Click(Sender: TObject);
    Var
       Grille : TStringGrid ;
       ACol, ARow : Integer ;
    Begin
       If Clipboard.HasFormat(CF_TEXT) then
          Begin
             If (ActiveControl is TStringGrid) Then
                Begin
                   Grille :=  (ActiveControl as TStringGrid) ;
                   ACol := Grille.Col ;
                   ARow := Grille.Row ;
                   Grille.Cells[ACol, ARow] := Clipboard.AsText ;
                End ;
             If (ActiveControl is TEdit) Then
                Begin
                   (ActiveControl as TEdit).SelText := Clipboard.AsText ;
                End ;
          End ;
    End;
    { =============================================================== }
    Savez vous comment faire pour ne copier coller que la partie sélectionnée de la cellule ?

    Merci

    Charly

  2. #2
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Normal fait toujours référence au texte entier de la cellule.

    Lorsqu'une cellule passe en mode édition, un contrôle TInplaceEdit est créé et supperposé exactement à la cellule (même taille, pas de bordures, etc.). C'est dans ce contrôle que l'utilisateur tape ou modifie son texte.

    TInplaceEdit est un descendant spécialisé de TCustomEdit comme TEdit et dispose lui aussi de la propriété SelText. C'est cette propriété qu'il faudrait pouvoir utiliser pour le copier/coller.

    TStringGrid hérite, de TCustomGrid, la propriété InplaceEditor qui référence le contrôle TInplaceEdit créé lorsqu'une cellule passe en mode édition.

    Malheureusement InplaceEditor est une propriété protégée et n'est pas directement accessible. Il faut ruser en déclarant une classe bidon rendant la propriété publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Type   TBidonGrid = Class(TCustomGrid)
      Public
        Property InPlaceEditor;
      End;
    Après quoi on peut utiliser cette classe pour transtyper la TStringGrid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      If (ActiveControl is TStringGrid) Then
          Begin
             Grille :=  (ActiveControl as TStringGrid) ;
             ACol := Grille.Col ;
             ARow := Grille.Row ;
             If Grille.EditorMode   {Tester si la grille est en mode édition }
                Then Clipboard.AsText := TBidonGrid(Grille).InplaceEditor.SelText
                Else Clipboard.AsText := Grille.Cells[ACol, ARow] ;
          End ;
    Il est important de tester si la grille est en mode édition, sinon InplaceEditor n'est pas une référence valide et générera une exception.

    Procéder de façon similaire pour le coller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Grille.EditorMode   {Tester si la grille est en mode édition }
              Then TBidonGrid(Grille).InplaceEditor.SelText := Clipboard.AsText
              Else Grille.Cells[ACol, ARow]  := Clipboard.AsText;
    Je n'ai pas tout testé, fais-moi savoir ce que cela donne.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2014, 10h56
  2. [XL-2007] Copier coller plage de cellule VBA en decalant d'une colonne si remplie
    Par thibault12500 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/11/2013, 12h53
  3. [XL-2007] Pb copier/coller d'une cellule vers une autre
    Par rch05 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/01/2011, 17h24
  4. Copier/coller d'une cellule par rapport à une autre
    Par AzelRoth dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2009, 16h54
  5. Réponses: 8
    Dernier message: 11/12/2008, 20h10

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