begin process at 2010 02 10 06:16:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

Recuperer texte via handle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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 !

1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales