yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010
-
27 mars 2009 à 05:44
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010
-
31 mars 2009 à 19:21
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.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 27 mars 2009 à 17:22
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) ...
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 27 mars 2009 à 18:11
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
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 30 mars 2009 à 08:47
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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à...
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 30 mars 2009 à 17:47
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.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 30 mars 2009 à 18:01
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 :
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 :
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é ^^
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 31 mars 2009 à 15:45
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.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 31 mars 2009 à 19:05
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).