Accueil > Forum > > > > Recuperer texte via handle
Recuperer texte via handle
vendredi 27 mars 2009 à 05:44:58 |
Recuperer texte via handle

yannfrance
|
Bonjour, Je récupère du texte dans une appli externe. Ca fonctionne sur des memo, richEdit: Code : var monhandle, longue : integer; Pseudo : string; begin Memo1.Lines.Clear; // efface contenue memo monhandle:= strtoint(Edit1.Text); //Contenu de edit dans monhandle longue := SendMessage(monhandle, WM_GETTEXTLENGTH, 0, 0);// recupère la longueur du texte SetLength(Pseudo, longue); // fixe la longueur pour Pseudo SendMessage(monhandle, WM_GETTEXT, longue + 1, LParam(PChar(Pseudo))); //Recupère le texte dans pseudo Memo1.lines.add(Pseudo); // ajoute au memo Mais là ou ça commence à ce corser, c'est là ou je veut récuperer tous le texte des composants tel que des TreeView, ListView, Label... Enfin bref, çe code ne fonctionne pas sur ces composants. Comment puis-je procéder ? Merci pour votre aide.
|
|
vendredi 27 mars 2009 à 17:22:04 |
Re : Recuperer texte via handle

Bacterius
|
Evidemment :
1. Le TLabel. Il n'est pas un composant fenêtré, il n'a donc pas de Handle. Autrement dit, pas de SendMessage dessus :) Il faudra réfléchir à d'autres techniques !
2. Le ListView et le TreeView. On peut facilement concevoir que les mémos et les edits ont une propriété Text, que les messages WM_GETTEXT récupèrent. Or, les ListView et TreeView n'ont pas cette propriété, puisqu'ils ont différents éléments séparés. Il faudra donc probablement se renseigner sur des messages plus spécialisés, ou alors établir un protocole de communication entre deux applications (si c'est toi qui les codes) ...
Voilà ... demande pour plus d'information.
Enfin des questions interessantes :)
Cordialement, Bacterius !
|
|
vendredi 27 mars 2009 à 18:11:35 |
Re : Recuperer texte via handle

yannfrance
|
Bonjour Bacterius Merci de t'intéresser à mon soucis. Excuse moi, j'ai pas réfléchie à propos du label. Sinon, je suis d'accord avec toi que pour récupérer les textes dans les treeview, ce sont des messages spécialisé tel que LVM_GETITEMTEXT d'àpres l'aide de delphi... mais lorsque j'essai (bidouiller à mon niveau) , ça ne donne rien. J'essai de récupérer le contenue dans un ComboBox, ListView, mais rien de concret. je vais continuer de chercher et de bidouiller, ont verra bien. Si je trouve du nouveau, j'apporterais... merci
|
|
vendredi 27 mars 2009 à 18:15:39 |
Re : Recuperer texte via handle

Bacterius
|
Pour LVM_GETITEMTEXT, tu dois passer dans wParam l'index (la position) de l'élément à récupérer, et dans lParam tu dois passer un pointeur :
Longword(@Variable)
qui pointera vers un enregistrement LVITEM.
Voici des informations sur le type LVITEM, qui n'est peut-être pas déclaré dans Delphi directement :
http://msdn.microsoft.com/en-us/library/bb774760(VS.85).aspx
Cordialement, Bacterius !
|
|
lundi 30 mars 2009 à 08:47:46 |
Re : Recuperer texte via handle

yannfrance
|
Bonjour, Bon, Le LVM_GETITEMTEXT c'est pour récuperer les textes dans les listView. J'ai trouver plein de source qui permet de le faire.  En ce qu'il concerne mon TreeView, j'ai consulter l'aide de delphi et j'ai trouver qu'il fallait envoyer le message avec TVM_GETITEM. Donc, étant novice, ça va être assez dur pour moi. Je ne sais pas réellement si je doit passer un TVM_GETCOUNT ou autre. Voilà, si quelqu'un est interresser pour m'aider, il seras le bienvenue. Je vais continuer à chercher 
|
|
lundi 30 mars 2009 à 08:57:04 |
Re : Recuperer texte via handle

yannfrance
|
J'ai essayer celà : var monhandle, longue : integer; Pseu : string; begin Memo2.Lines.Clear; monhandle:= strtoint(Edit1.Text); longue := SendMessage(monhandle, TVM_GETITEMHEIGHT, 0, 0); SetLength(Pseu, longue); SendMessage(monhandle, TVM_GETITEM, longue + 1, LParam(PChar(Pseu))); Memo2.lines.add(Pseu);Bon, il y'as du nouveau puisque là, il m'affiche quelque choses dans mon memo, mais le prblème, c'est que je ne parle pas le chinois  ???????????????? voilà...
|
|
lundi 30 mars 2009 à 17:47:53 |
Re : Recuperer texte via handle

Bacterius
|
Normal : changes Pseu en PChar, et fais plutôt un StrAlloc à la place du Length (Pseu := StrAlloc(Longue) et pour libérer StrDispose(Pseu).
Ca devrait marcher mieux.
Cordialement, Bacterius !
|
|
lundi 30 mars 2009 à 18:01:09 |
Re : Recuperer texte via handle

Bacterius
|
En réalité, quand tu fais PChar(UneVariable), il va simplement te donner un pointeur vers un nouveau tableau de caractères qui contiendra le texte de la variable (dans le cas d'un String). Or, le SendMessage va (grossièrement) copier du texte dans le PChar pointé par PChar(Pseu). Comme tu n'as plus cette adresse, tu n'auras jamais le texte, et Pseu sera rempli de caractères bizarres.
Regarde :
procedure Test;
var
VarStr: String;
VarPChar: PChar;
begin
VarStr := 'Salut';
// Le pointeur @VarStr pointe vers une chaîne de caractères 'Salut')
VarPChar := StrAlloc(255);
// Le pointeur VarPChar pointe à présent vers une chaîne vide de 255 caractères)
VarPChar := PChar(VarStr);
// Le pointeur VarPChar pointe à présent vers une nouvelle adresse mémoire qui à son tour pointera vers le texte contenu dans VarStr).
StrDispose(VarPChar);
// VarPChar n'existe plus en mémoire
end;
C'est très interessant les pointeurs ...
N'oublie pas que quand tu manipules des objets (String, TBitmap, etc ...), ce sont juste 2 nombres : 1 pointeur et 1 longueur. Ca simplifie énormément de choses. Par exemple, si j'ai un enregistrement de 12 octets de ce type :
type
TMyRec=record
Number1, Number2, Number3: Longword;
end;
PMyRec=^TMyRec;
Quand tu créeras un objet TMyRec, ça sera juste un pointeur PMyRec, pointant vers le début de l'objet en mémoire (imaginons à l'adresse 500), et une longueur, contenant la taille en octets de l'objet (ici 12). Ainsi, avec ces deux nombres, l'ordinateur sait que notre objet occupe la place 500 à 511 en mémoire (511 car on compte le 500). Quand tu déréférences un objet (MonPointeurPMyRec^.Number1 := 7; par exemple), Delphi s'occupe de tout en copiant l'information directement en mémoire.
Regarde :
Adresses
500 |-
501 | Nombre 1, occupe 4 octets (32 bits)
502 |
503 |-
504 |-
505 |
506 | Nombre 2, occupe 4 octets (32 bits)
507 |-
Quand Delphi veut modifier le nombre 2, il va prendre l'adresse de départ (500), regarder à quel endroit dans l'enregistrement se trouve ta variable, et va modifier 4 octets. Il va donc se placer à 500 + 4 (504), et modifier les informations jusqu'à 500 + 4 + 4 (508).
Enfin c'est comme ça que je vois les choses :p et ça marche drôlement bien pour la mémoire partagée en fichier paginé ^^
Voilà ...
Cordialement, Bacterius !
|
|
mardi 31 mars 2009 à 15:45:05 |
Re : Recuperer texte via handle

yannfrance
|
Merci pour ce petit cours. Mais j'avoue que c'est encore flou dans ma tête. j'avoue aussi que lorsque je ne trouve pas de solution, je suis même prêt à taper n'importe quoi comme code au cas ou  Tous ce qui est chaine de caractères etc, manipulations de string, c'est vraiment mon point faible. Merci encore pour ce cours, je vais essayer d'approfondir aussi sur les pointeurs, ça l'air interressant.
|
|
mardi 31 mars 2009 à 19:05:18 |
Re : Recuperer texte via handle

Bacterius
|
Oui mais fais attention en testant n'importe-quoi : quand ta mémoire sera bourrée de pointeurs qui se baladent dans la nature ça va bien ramer et tu seras obligé de rebooter ^^
Je prépare d'ailleurs un tutorial sur les pointeurs, même si tu auras sûrement compris avant que je ne le poste (il sera prêt d'ici quelques jours/semaines).
Cordialement, Bacterius !
|
|
Cette discussion est classée dans : texte, memo, pseudo, longue, monhandle
Répondre à ce message
Sujets en rapport avec ce message
Bouton inserer texte ? [ par adri1 ]
Bonjour,Sauriez vous comment faire pour faire un bouton qui ajoute du texte dans un memo ?Exemple quand on clique sur le bouton sa ajoute dans le m
Comment Afficher Le Texte D'Un WebBrowser Dans Un Memo ? [ par BenXbox ]
Salut à Tous !!! Comment Je Peux Afficher Le Texte D'Un WebBrowser Dans Un Memo ?
Utilisation d'un MEMO [ par BRIVE ]
Votre texte ICIVotre texte ICIBONJOURObjet:Utilisation d'un MEMOPour obtenir une égalité entre les items d'un mémo et lenombre de lignes textes affich
Texte de Memo [ par toki127 ]
salut!je debute avec delphi, et j ai un pb vraiment debile. j ai pas trouvé de reponse sur le forum tellement c est simple ;) comment fait on pour vir
[TFrame] [ par gamez ]
Salut jai une ptite question sur les frames: je crée dynamiquement 2 pages d'un Tpagecontrol dans lesquels jy "colle" un frame (donc issus de la meme
Memo [ par Tchenouleur ]
Bonjour Je voudrais savoir si il est possible de changer la mise en forme d'un texte sous memo. J'ai essayé mais le problème c'est que quand je sélect
Qui y a t il ecrit sur la ligne x de mon Memo? [ par Joleroy ]
Salut,J' ai un memo avec par exemple 50 lignes de texte.J' ai mis ds l' evenement OnDbclick de mon memo ShowMessage('Vous avez cliquez sur' +Memo1.Lin
Texte déroulant dans Memo [ par ndlh721 ]
Bonjour, Comment faire défiler automatiquement un texte de bas en haut dans un composant MEMO dans Delphi 3 de sorte que le texte disparaisse vers le
affiché les dernières lignes dans un richedit [ par philpas ]
bonjour,j'utilisais un memo. A chaque fois que j'utilise la fonction memo.lines.add('ligne'); celui ci m'affiche la ligne à l'écran même si memo conti
Comment ajouter le texte reçu d'un ClientSocket dans un Memo ? [ par Yil2201 ]
Salut! Voila j'aimerais que mon TServerSocket recoive le texte de mon TClientSocket. Pour que le client l'envoie, c'est OK ( TClientSocket.Socket.Send
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|