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 :

Afficher un Hint dans une ListView


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut Afficher un Hint dans une ListView
    Bonjour,

    Dans une ListView comportant plusieurs colonnes et lignes,
    il arrive parfois que le texte soit plus large que la colonne.
    Un simple passage de la souris sur le texte fait appara�tre le texte en entier dans un Hint.
    Comment fait-on pour r�aliser cet effet ?

  2. #2
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonsoir,
    Je viens d'essayer un petit quelquechose qui s'approche peut etre de ce que tu recherches : avec l'�v�nement OnInfoTip du TListView.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TfrmTexture::ListeSousElementInfoTip(TObject *Sender,
          TListItem *Item, AnsiString &InfoTip)
    {
    InfoTip = Item->SubItems[0].Strings[0];
    }
    par exemple ceci affiche le texte du premier sous �l�ment (premi�re colonne) lorsque l'on survole les lignes du listview.
    Mais je ne sais comment rep�rer sur quelle colonne on se trouve, du moins pas encore...
    Et puis, c'est peut etre qqchose d�ja essay� qui ne te suffisait pas, dans ce cas mille excuses...
    Bon courage, @ +

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Merci Cantrelle. Ce n'est pas tout � fait ce que je cherche, mais c'est un d�but.
    Ici, le probl�me, le Hint est mal positionn�.

    J'ai trouv� pour la premi�re colonne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void __fastcall TfrmTexture::ListeSousElementInfoTip(TObject *Sender,
          TListItem *Item, AnsiString &InfoTip)
    { 
    InfoTip = Item->Caption;
    }
    J'ai bien trouver un exemple de ce que je cherche dans les exemples de Borland dans le r�pertoire suivant : \Borland\Examples\VirtualListView
    Mais je n'arrive pas � mettre la main sur le code qui g�re cet effet.

  4. #4
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    (re)Bonsoir,
    Ben, mon probl�me maintenant c'est que l'exemple que tu cites, chez moi, et ben il fait rien en rapport avec le sujet : pas de hint, pas de infotip ...
    mais c'est peut etre moi qui d�conne.
    Pour r�gler le soucis de la colonne 'survol�e', j'ai bricol� un petit quelquechose en guise de test. Ca aura au moins peut etre le merite de faire r�agir quelqu'un de plus dou� que moi...
    Dans le OnMouseMove :
    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
     
    //test pour un listview de 3 colonnes...
    int WColonne1 = FormX->ListViewX->Column[0]->Width;
    int WColonne2 = FormX->ListViewX->Column[1]->Width;
    int WColonne3 = FormX->ListViewX->Column[2]->Width;
    if (X > 0 && X < WColonne1)
    {
            FormX->IndiceColonne = 0;
    }
    if (X > WColonne1 && X < (WColonne1 + WColonne2))
    {
            FormX->IndiceColonne = 1;
    }
    if (X > (WColonne1 + WColonne2) && X < (WColonne1 + WColonne2 + WColonne3))
    {
            FormX->IndiceColonne = 2;
    }
    Dans le OnInfoTips :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    switch (FormX->IndiceColonne)
    {
    case (0):
    InfoTip = Item->Caption;
    break;
    case (1):
    case (2):
    InfoTip = Item->SubItems[FormX->IndiceColonne - 1].Strings[0];
    break;
    }
    Inconv�nients:
    .c'est surement loin d'etre g�nial
    .ca r�ponds pas encore a l'attente, la position du hint n'etant pas celle recherch�e (si j'ai bien compris , il faudrait qu'il soit completement en couverture de la ligne , non ?)
    @+




  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Sympa de chercher une solution � mon probl�me.
    Pour l'exemple avec Borland, voici ce que j'obtiens pour les textes trop courts :


    Cela fait un bon moment que je cherche dans le code de cet exemple, et je ne vois toujours pas ou cela est g�r�.
    Mais je vais encore cherch�, je finirais bien par trouver.

    Pour le positionnement du Hint, il me semble que cela se fait avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Application->ActivateHint(TPoint CursorPos);

  6. #6
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Salut,
    Je ne sais pas si tu cherches encore pour ton probl�me, moi j'ai continu� avec ce soucis de :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Application->ActivateHint(TPoint CursorPos);
    car il ne me donne pas le resultat escompt�...
    J'ai essay� aussi des choses comme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Application->ActivateHint(Mouse->CursorPos);
    ou ds OnInfoTip, d'utiliser :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Item->GetPosition();
    et d'obtenir :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     Application->ActivateHint(Item->GetPosition())
    par exemple.
    Mais pour moi rien de neuf, l'hint s'affiche a une position 'classique'
    Je sais plus trop quoi essayer
    Je crois que je vais etre content lorsque la solution pointera le bout de son nez...

  7. #7
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Bonjour,

    J'ai fait une petite d�couverte :
    Dans mon programme, je mets � jour la ListView en appelant simplement la fonction : void __fastcall TForm1::AfficherListView(void)
    Dans cette fonction se trouve une boucle qui copie un tableau dans la ListView.

    Dans l'exemple de Borland, c'est tout � fait diff�rent.
    La mise � jour de la ListView se fait par la m�thode ListView->Repaint();
    C'est l'�v�nement OnData de la ListView qui met � jour la ListView un � un, et non par une boucle.
    Et cet �v�nement est appel� lors d'un survol de la souris sur la ListView
    Je suis pr�t � parier que c'est � ce moment que ce Hint est cr�er.

    Je vais faire les modifications dans mon programme, et je vous tiens au courant.

  8. #8
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonjour,
    J'ai cherch� du cot� de l'�v�nement OnShowHint de TApplication. Avec celui ci on peut travailler sur et sur ces propri�t�s par exemple.
    De meme, dans l'�v�nement OnInfoTip du ListView on a acces a par exemple.
    Avec tout ceci je pensai pouvoir m'en tirer mais je n'ai pas un r�sultat parfait
    J'ai l'impression d'etre a la fois pas tres loin, et un peu a cot� de la plaque quand meme ...
    A plus tard. Bon courage...

  9. #9
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonjour,
    Je pense avoir quelquechose de coh�rent grace aux OnInfoTip et OnShowHint cit�s tout a l'heure.
    Dans OnInfoTip :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    TPoint pPoint = FormX->ListViewX->ClientToScreen(Item->GetPosition());
    FormX->PosItem = pPoint.y; // Ou PosItem est une variable 'Private' de FormX de type int
    Dans OnShowHint :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcall FormX::GestionHint(System::AnsiString &HintStr, bool &CanShow, THintInfo&HintInfo)
    {
      if (FormX->ListeSurvol == true)
      {
         HintInfo.HintPos.y =FormX->PosItem;
      }
    } 
    //J'utilise pour l'instant bool ListeSurvol pour m'assurer que le comportement du hint n'est modifié que pour l'objet listview qui nous interesse, faut voir l'interet du truc...
    Dans le Oncreate de FormX:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Application->OnShowHint = GestionHint;
    J'obtiens ainsi chez moi une bulle info align�e pile sur le 'top' de l'item du listview survol�e.
    On doit pas etre loin de l'effet recherch�, non ?
    @ +

  10. #10
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Bonjour,

    Tr�s bien. Moi de mon c�t�, je ne sais toujours pas comment l'exemple de Borland fonctionne.
    Alors je me suis retourn� sur ta m�thode que j'ai l�g�rement modifi�.

    Dans OnInfoTip :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TFormX::ListViewInfoTip(TObject *Sender, TListItem *Item, AnsiString &InfoTip)
    {  TPoint pPoint  = FormX->ListView->ClientToScreen(Item->GetPosition());
       Form1->PosItem = pPoint;                   //PosItem est une variable 'Private' de FormX de type TPoint
    }
    Dans OnShowHint :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::GestionHint(System::AnsiString &HintStr, bool &CanShow, THintInfo&HintInfo)
    {  if(HintInfo.HintControl == ListView)
       {  HintInfo.HintPos     = Form1->PosItem;   //Positionne le Hint
          HintInfo.HideTimeout = 10000;            //Supprime le scintillement
       }
    }
    Dans le OnCreate de FormX :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Application->OnShowHint = GestionHint;
    Pour ma part, c'est presque parfait.
    Il suffit de l'afficher seulement si le texte est tronqu�.

  11. #11
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonsoir,
    Pour le dernier soucis, j'ai essay� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    bool InfoLong; //Private
    dans OnInfoTip, j'ai rajout� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TRect pRect = Item->DisplayRect(drBounds);
    if (Item->Caption.Length() > pRect.Width())
    {
    frmTexture->InfoLong = true;
    }
    else
    {
    frmTexture->InfoLong = false;
    }
    et dans 'GestionHint' (pour OnShowHint):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            switch (frmTexture->InfoLong)
            {
            case true:
                    CanShow = true;
            break;
            case false:
                    CanShow = false;
            break;
     
            }
    On doit etre sur la bonne voie la
    Mais y a peut etre mieux, mais pour l'instant moi j'ai pas mieux (au regard de mes connaissances) en esp�rant que cela r�ponde a ton souci.
    En tout cas, je me servirai de cela pour mon projet (j'ai ainsi un peu travaill� pour moi la )
    A plus tard....

  12. #12
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Bonjour,

    J'ai modifi� histoire d'affiner un peu plus :

    Dans 'Private' de FormX :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
       TPoint PosItem;
       bool InfoLong;
    Dans OnInfoTip :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void __fastcall TFormX::ListViewInfoTip(TObject *Sender, TListItem *Item, AnsiString &InfoTip)
    {  TPoint pPoint  = FormX->ListView->ClientToScreen(Item->GetPosition());
       FormX->PosItem = pPoint;
       FormX->InfoLong= Item->Caption.Length()*6>Item->DisplayRect(drLabel).Width();
    }
    Dans OnShowHint :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TFormX::GestionHint(System::AnsiString &HintStr, bool &CanShow, THintInfo&HintInfo)
    {  if(HintInfo.HintControl == ListView)
       {  HintInfo.HintPos     = FormX->PosItem;   //Positionne le Hint
          HintInfo.HideTimeout = 10000;            //Supprime le scintillement
          CanShow              = FormX->InfoLong;  //Controle de l'affichage
       }
    }
    Dans le OnCreate de FormX :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Application->OnShowHint = GestionHint;
    Pour moi, tout est bon. Je n'ai pas besoin de plus.
    Cantrelle, je te remercie de ton aide.

  13. #13
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    30
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 30
    Par d�faut
    Bonjour,

    La bonne blague !!!
    Je reviens sur mon exemple de Borland. Et j'ai trouver pourquoi cela ne fonctionnait pas sur mon programme.
    Lorsque mon appliquation est affich�e, j'affiche cette fen�tre au premier plan.
    Le Hint s'affichait bien, mais derri�re la fen�tre.
    Je m'en suis apper�u par accident, lorsque mon curseur a survol� un texte tr�s long.
    Un bout du Hint d�passait � droite de la fen�tre.
    Et l�, je suis vert.

  14. #14
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonjour,
    De toutes facons, de mon cot� un traitement sp�cifique du hint sur un listview etait le bien venu.
    Et puis, j'aurais peut etre pas fait la d�marche si tot sans cela....
    A plus tard peut etre pour ton autre sujet sur la Dll et les icones; bien que je crois cela hors de ma port�e, malgr� son interet.
    @ +

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Afficher des images dans une listView de mani�re asynchrone
    Par badaboo dans le forum Composants graphiques
    R�ponses: 0
    Dernier message: 23/02/2010, 09h47
  2. afficher les donn�es d'une requ�te dans une ListView
    Par modafine dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 14/12/2008, 04h44
  3. afficher une arraylist dans une listview
    Par ninolf dans le forum VB.NET
    R�ponses: 3
    Dernier message: 17/05/2008, 12h02
  4. Afficher des informations dans une ListView
    Par revero275 dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 03/04/2007, 21h58

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