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
TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|