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

C++Builder Discussion :

StringGrid, selection de texte


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut StringGrid, selection de texte
    Bonjour a tous, j'ai une petite question assez simple.
    Est-il possible de récupérer le texte sélectionné d'une cellule d'un StringGrid?

    Pour être plus clair, j'ai un StringGrid dont chaque cellule contiens du texte.
    Je veux pouvoir sélectionner une partie du texte d'une cellule et la récupérer pour traiter uniquement la sélection.


    Si ça peut aider, j'utilise C++ Builder 6.
    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Tu peut regarder du coté de la propriété Selection, elle t'indique les coordonnées de tes bords de ta selection

  3. #3
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Si je me trompe pas la propriété Selection permet de retrouver les cellules sélectionnées. Moi ce que je veux c'est récupérer le texte sélectionné d'une cellule donnée.

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Excuse moi, j'avais lu a l'envers (non pas la tête en bas )

    J'ai déjà fait lorsque la cellule est édité, mais je ne pense pas que ce soit possible directement si la cellule n'est pas édité

  5. #5
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Et tu fais ça comment lorsque la cellule est éditée?

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Je ne retrouve plus le liens, mais en faite je ne suis pas sur que tu pourra en faire quelque chose, car c'est récupérable sur l'évènement OnKeyPress, donc pas forcement exploitable pour toi.
    L'idée c'est de caster le paramètre Sender en TInplaceEdit qui lui as les propriété pour connaitre le texte sélectionné
    Désolé de ce faux espoir

  7. #7
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    bonjour,
    si j'ai bien suivi ton problème tu cherche à récupérer le contenu d'une cellule. ok ça y a pas de problème!! par contre tu veux récupérer tout le contenu de cette cellule ou juste une partie du texte qu'elle contient?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  8. #8
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Ce que je voulais faire c'était de récupérer le texte sélectionné d'une cellule.
    Ce peut être tout le texte comme une partie du texte que contiens cette cellule

  9. #9
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    pour récupérer le texte d'une cellule rien de plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String Val_cellule = StringGrid->Cells[StringGrid->Selection.Left][StringGrid->Selection.Top]
    ensuite à toi de voir ce que tu préfère... tu peut aussi le l'afficher à l'écran.
    En revanche si tu veux récupérer juste une partie du contenu de la cellule, il faut que tu fasse un fonction de recherche... Mais pour cela tout dépend de ce que tu cherches...

    Dit moi si cela fonctionne....

    Bon courage
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  10. #10
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Pour récupérer le texte de la cellule il n'y a aucun soucis.
    Mais comme je disais ce que je voulais c'était retrovuer le texte sélectionné au sein de la cellule, le texte en surbrillance en gros.
    Peut etre quelque chose du genre de SelStart - SelLength d'un EditBox.

    Mais après recherches il semblerait que ce ne soit pas possible avec le StringGrid de base.

    Mais merci pour avoir pris de votre temps

  11. #11
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    je pense que tu as une chance de trouver ton bonheur sur ce lien...
    http://www.developpez.net/forums/sho...ight=selection

    bon courage
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si c'est possible (en tout les cas il me semble bien) mais je ne me souviens plus comment... ???
    En fait, le truc c'est de simuler un clic sur l'item Copier du PopMemu qui est associé à l'objet par BCB.
    Dans ce cas précis le texte sélectionné passe dans le clipboard qu'il suffit donc d'extraire avec PasteFromClipboard.

    Sinon... la solution manuelle risque d'être poussive... et consiste à calculer les coordonnées relatives de la souris par rapport à la cellule.
    On sait que l'on a deux couples (X,Y), l'un pour démarrer la sélection (OnMouseDown) et l'autre pour la fin de la sélection (OnMouseUp) et on n'utilise en définitive que les x.
    L'algo consisterait à mesurer graduellement le texte à l'aide de Canvas->TextWidth dans un premier temps pour le premier caractère correspondant au début de la sélection puis pour le dernier caractère correspondant à la fin de la sélection.
    On obtient ainsi la sous chaîne souhaitée (la portion selectionnée) !

    Je vais essayer de le faire (pour le fun) en attendant la solution avec le MenuItem Copier...

    A plus !

  13. #13
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Simuler le clic sur l'option copier, j'y avais pas pensé c'est pas bête.
    Enfin dans mon cas ça n'aurait pas fonctionné non plus car j'ai associé au stringGrid un popupMenu perso.

    Mais bon l'approche de l'appli a été revue, du coup je n'ai plus a gérer cela.

    Quand j'aurais un moment je regarderais comment développer cette solution, pour la gloire.

    Je vous présenterais ce que j'ai trouvé si j'arrive a quelque chose.

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    En fait, je pense qu'il faut développer depuis une classe dérivée de TStringGrid.
    Depuis une méthode membre on aura ainsi accès à l'InplaceEditor qui gère la saisie et la sélection du texte d'une cellule.
    Donc ce qui n'est pas possible de faire... avec TStringGrid (en tout cas pas avec mon BCB3 Pro) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString N = StringGrid1->InplaceEditor->SelText;
    Le devient puisqu'à ce moment là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class jStringGrid : public TStringGrid
    {
    public :
        __fastcall jStringGrid(TComponent *AOwner);
        __fastcall ~jStringGrid();
        AnsiString __fastcall GetSelText();
    };
    Donc les méthodes :

    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
     
    __fastcall jStringGrid::jStringGrid(TComponent *AOwner)
        : TStringGrid(AOwner)
    {
    if(AOwner->InheritsFrom(__classid(TWinControl)))
        {
        Parent = (TWinControl*)AOwner;
        }
    }
    //--
    __fastcall jStringGrid::~jStringGrid()
    {
    }
    //--
    AnsiString __fastcall jStringGrid::GetSelText()
    {
    return InplaceEditor->SelText;
    }
    //--
    C'est la solution la plus simple... mais délicate pour des débutants (pour devoir, sans doute, le réaliser sous forme de nouveau composant ... ...) !

    A plus !

  15. #15
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    En effet ça fonctionne très bien, et même s'il faut le passer sous forme de nouveau composant ça restera toujours plus simple que de calculer la selection par rapport a la position de la souris :p

    En tous cas il fallait le savoir pour la propriété InplaceEditor. Je ne l'ai trouvé référencé nul part dans l'aide relative a TStringGrid.

    Merci a tous, meme si ça ne m'est plus utile pour le moment, un jour j'en trouverais bien une utilisation

  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    C'est justement en essayant de le faire avec la souris que je me suis rendu compte que les événementielles du StringGrid (pour la souris) n'étaient plus actives dans la phase d'édition de la cellule... donc comme si un objet venait se placer au dessus de la cellule.

    L'InplaceEditor apparait dans la documentation de TCustomGrid dont hérite TStringGrid.

    A plus !

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

Discussions similaires

  1. Faire une selection de texte et la travailler
    Par simou37000 dans le forum Flash
    Réponses: 3
    Dernier message: 19/07/2006, 04h44
  2. safari : textarea et selection de texte
    Par zax-tfh dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/02/2006, 02h37
  3. [Debutant]Transfert StringGrid ou Edit texte vers RaveReport
    Par ghan77 dans le forum Composants VCL
    Réponses: 15
    Dernier message: 13/12/2005, 11h34
  4. DÉBUDANT : Détecter la selection du text dans un Edit .
    Par LibrairieSI dans le forum Windows
    Réponses: 1
    Dernier message: 16/10/2005, 00h54
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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