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

API, COM et SDKs Delphi Discussion :

Récupération items listbox


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut Récupération items listbox
    Je voudrais récupérer les items d'une listbox d'une application externe à
    la mienne.J'arrive à trouver le handle de la listbox (EnumChildWindows)
    mais ça ne donne rien avec GetWindowText pour le texte des items.Donc
    je voudrais savoir quelle api employé pour directement lire les items de
    la listbox ou si ce n'est pas possible d'intercepter la chaine qui sera envoyée à la propriété items de la listbox avant qu'elle ne s'affiche dedans.Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    En fait j'ai trouvé ce code en C++ mais qui me pose un problème:
    i = SendMessage(hwnd, LB_GETITEMDATA, (WPARAM)1, (LPARAM)0);
    Le retour de i doit surement etre un string mais dans delphi le retour est exclusivement un integer.Bizzare car dans le sdk il y a ceci sur le retour de la fonction sendmessage:
    'The return value specifies the result of the message processing and depends on the message sent'.
    Donc le retour dépend du message et n'est pas exclusivement integer.
    Que faut-il que je fasse en delphi pour avoir un retour string de la fonction
    sendmessage?Merci.

  3. #3
    Membre habitué Avatar de gord's
    Inscrit en
    Avril 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 115
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par MSDN
    LB_GETITEMDATA
    An application sends an LB_GETITEMDATA message to retrieve the application-defined value associated with the specified list box item.
    on ne récupère pas la string, mais une éventuelle donnée associée, un peu comme le TComponet.tag de Delphi
    Citation Envoyé par MSDN
    LB_GETTEXT
    An application sends an LB_GETTEXT message to retrieve a string from a list box.

    To send this message, call the SendMessage function with the following parameters.

    SendMessage(
    (HWND) hWnd, // handle to destination window
    LB_GETTEXT, // message to send
    (WPARAM) wParam, // item index
    (LPARAM) lParam // buffer for items (LPTSTR)
    );
    Parameters
    wParam
    Specifies the zero-based index of the string to retrieve.
    Windows 95/98: The wParam parameter is limited to 16-bit values. This means list boxes cannot contain more than 32,767 items. Although the number of items is restricted, the total size in bytes of the items in a list box is limited only by available memory.

    lParam
    Pointer to the buffer that will receive the string; it is type LPTSTR which is subsequently cast to an LPARAM. The buffer must have sufficient space for the string and a terminating null character. An LB_GETTEXTLEN message can be sent before the LB_GETTEXT message to retrieve the length, in TCHARs, of the string.
    Return Values
    The return value is the length of the string, in TCHARs, excluding the terminating null character. If wParam does not specify a valid index, the return value is LB_ERR.

    Remarks
    If you create the list box with an owner-drawn style but without the LBS_HASSTRINGS style, the buffer pointed to by the lParam parameter will receive the value associated with the item (the item data).

    Requirements
    Windows NT/2000: Requires Windows NT 3.1 or later.
    Windows 95/98: Requires Windows 95 or later.
    Header: Declared in Winuser.h; include Windows.h.
    La prochaine révolution informatique : les machines qui font ce qu'on veut, au lieu de faire ce qu'on leur demande...
    Grand Vizir du Grand Gourou - Trois-quart aile gauche du TRFC et intendant de 3ème mi-temps - Papy fait de la résistance

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Merci pour ta réponse ça m'éclaire un peu plus pour trouver le bon chemin.Mais reste le problème de la fonction dans delphi car le second
    paramêtre doit être un buffer qui recoit les items alors qui delphi n'accepte
    qu'un integer en second parametre,donc y at-il un moyen d'utiliser la
    fonction sendmessage pour retourner ce résultat,ou faut-il proceder autrement?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    J'ai trouvé ce qu'il me fallait ici:
    http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20226193.html

    Il y a là beaucoup de trucs sur les api à utiliser avec delphi.D'après cette
    page j'ai créer ce petit code pour ceux que ça interresse:

    procedure TFrmLectureListbox.BtLectureClick(Sender: TObject);
    var
    H:hwnd;
    CharBuffer: array[0..255] of Char;
    TempStr:string;
    i,Nitems:integer;
    begin
    H:=strtoint(edit.text);// dans edit on entre le handle de la listbox
    Nitems:=SendMessage(H, LB_GETCOUNT, 0, 0);// le nombre d'items
    for i:=0 to Nitems-1 do
    begin
    SendMessage(H, LB_GETTEXT, i, Integer(@CharBuffer));
    TempStr := String(CharBuffer);
    liste.AddItem(TempStr,nil);
    end;
    end;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 69
    Points : 77
    Points
    77
    Par défaut
    merci pour le code, j'en avais justement besoin
    Mes programmes : www.antp.be/software/fr/

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    On cherche toujours ailleurs ce qu'on a sous le nez.Un membre de ce forum a concu un excellent code pour lister les process en cours (ce qui m'interesse).C'est nono40 et c'est là:
    http://nono40.developpez.com/sources/source0061.html

    Il liste des controles spéciaux (combobox,listbox,statusbar) mais pas
    les listeview ou les treeview ce que je suis en train de faire mais c'est
    une base interessante pour ceux que ça interesse.Donc merci à nono.

    Juste un détail:quand on cherche les fenetres filles d'un applet java(enumchildwindow) avec le handle de sa fenetre ,donc pour les controles surtout,il ne liste rien pourquoi ?Si quelqu'un a une réponse.

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

Discussions similaires

  1. Animation Items ListBox
    Par 1tsiMat dans le forum Silverlight
    Réponses: 6
    Dernier message: 25/05/2009, 12h57
  2. 2 items listbox même ligne
    Par gelwc dans le forum Excel
    Réponses: 2
    Dernier message: 01/09/2008, 09h41
  3. Récupération valeur ListBox
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/01/2008, 19h08
  4. [C#] monter / descendre items listbox
    Par iamunknown dans le forum Windows Forms
    Réponses: 12
    Dernier message: 26/04/2006, 19h37
  5. [VB.NET] récuperer item listbox !
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/07/2005, 16h38

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