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

 Delphi Discussion :

Integer et string.


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut Integer et string.
    Bonjour à vous,

    Bon, j'ai 1 questions de débutant que je n'arrive pas à resoudre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var PseudoList
    PseudoList:= SendMessage(o, WM_GETTEXT,0, 0);
    o, c'est le handle du composant de mon appli externe...bref

    Là, le compilo (delphi6) me dit [Erreur] Unit1.pas(82): Types incompatibles : 'String' et 'Integer'
    ça, je n'arrive pas à le résoudre, honte à moi

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bonjour

    Je vois déjà une erreur dans l'utilisation de WM_GETTEXT puisque wParam est égal à 0. wParam doit définir le nombre de caractères maximum renvoyés.

    Et ensuite en supposant que PseudoList est de type string, cela expliquerait ton erreur de compilation puisque SendMessage renvoie un Integer.

    Regarde de plus près l'aide sur WM_GETTEXT, et en faisant une recherche sur le forum tu devrais trouver plusieurs exemples d'utilisation.

    @+ Claudius

  3. #3
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    De quel type est PseudoList ?
    De quel type est la valeur de retour de SendMessage ?

    si SendMessage renvoie un integer et que PseudoList est un string, tu peux soit changer le type de PseudoList en integer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var PseudoList : integer;
    soit transtyper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtoint (sendMessage(....));
    [Il était une fois Delphi ....]


  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var  s:string;
    begin
           setlength(s,200);
           sendmessage(o,wm_gettext,s[1],length(s)-1)
    end;
    bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    Merci pour vos reponses.
    J'ai essayer ton code edam , mais delphi me met type incompatible à la compilation.

    J'ai essayer de transtyper aussi, mais le résultat n'est pas celui attendu.
    Peut-être, çe que je veut faire n'est pas compatible.

    Je souhaite récuperer le contenu (du texte) d'un composant ATL d'une application externe puis le rapporter dans une ListBox de mon application delphi.
    Le résultat est 0 à chaque fois, je n'ai rien, aucun texte...

  6. #6
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    je pense qu'il faut que tu regardes si tu as pas fait d'erreur au niveau de l'handle
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par shell13010 Voir le message
    je pense qu'il faut que tu regardes si tu as pas fait d'erreur au niveau de l'handle
    Non, aucune erreur au niveau de l'handle.
    Bon, c'est pas grave pour le moment.

    En revanche, j'ai une autre petite question, je vous emunere mon problème.

    Je récupère le handle d'une fenêtre, à l'interieur, il y'as des composants.
    Je veut récuperer les handles un par un pour les inclure dans un tableau.
    Le problème, c'est que quand je passe un coup de getWindow(handle, GW_CHILD); Et bien je me tape un handle qui n'est pas visible
    Comment faire pour que je récupère QUE les handles visible.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o: integer;
    begin
      a:= FindWindow('#32770','Titre de ma fenetre'); //
          Label1.Caption := IntToHex(a, 8);
     
    b:= GetWindow(a, GW_CHILD);
          Label2.Caption := IntToHex(b, 8);
    Ma variante b récupère un handle non visible, et moi, je souhaiterais que ce soit le child visible dans cette variante.
    (Ne me dite pas de faire un findwindowex, je ne peut absolument pas récuperer par la classe, donc oublions cela.)
    J'ai télécharger une source qui se sert, je crois de isWindowVisible
    Mais, si vous avez des infos à ce sujet, je suis preneur.
    Merci beaucoup.

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Un petit exemple simple d'utilisation: une TForm avec un TEdit, une TListBox et un TButton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Button1Click(Sender: TObject);
    var
      L: Integer;
      S: string;
    begin
      // Longueur de la chaine du TEdit
      L := SendMessage(Edit1.Handle, WM_GETTEXTLENGTH, 0, 0);
      // Définir la longueur de la chaine
      SetLength(S, L);
      // Lecture et assignation du text à la chaine
      // Nota: L + 1 pour réserver une place au zéro terminal #0
      SendMessage(Edit1.Handle, WM_GETTEXT, L + 1, LParam(PChar(S)));
      // Ajout du résultat dans la ListBox
      ListBox1.Items.Add(S);
    end;
    @+ Claudius

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    désoler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var  s:string;
    begin
           setlength(s,200);
           sendmessage(o,wm_gettext,length(s)-1,@s[1])
    end;
    bien sûr avec le code clodios, tu récupére la taille du buffer avant de le spécifier à une string
    An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.

    WM_GETTEXT
    wParam = (WPARAM) cchTextMax; // number of characters to copy
    lParam = (LPARAM) lpszText; // address of buffer for text
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par yannfrance Voir le message
    Non, aucune erreur au niveau de l'handle.
    Bon, c'est pas grave pour le moment.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o: integer;
    begin
      a:= FindWindow('#32770','Titre de ma fenetre'); //
          Label1.Caption := IntToHex(a, 8);
      
    b:= GetWindow(a, GW_CHILD);
          Label2.Caption := IntToHex(b, 8);

    Es tu vraiment si sur qu'il ne s'agit pas d'une erreur de Handle ?

    Pascal
    THandle = LongWord;

    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    procedure TForm1.Button1Click(Sender: TObject);
    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o:    THandle;
    begin
      a:= FindWindow('#32770','Titre de ma fenetre'); //
      ....
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Merci ça fonctionne.

    Sinon, pour rechercher un handle enfant visible uniquement, comment dois-je procéder.

    Car ce code me donne dans la variable b, un handle non Visible.
    Je ne souhaite pas passer par FindWindowEx.
    Comme dit plus haut, j'ai vu avec IsWindowVisible, mais je ne vois pas comment l'introduire à ma source.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o: integer;
    begin
      a:= FindWindow('#32770','Titre de ma fenetre'); //
          Label1.Caption := IntToHex(a, 8);
     
    b:= GetWindow(a, GW_CHILD);
          Label2.Caption := IntToHex(b, 8);
    Voila, je souhaiterais obtenir le premier enfant VISIBLE de ma fenêtre.

    merci beaucoup.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Bonsoir,

    C'est bon j'ai trouver.

    Merci Cl@udius pour ton code, il fonctionne à merveille.
    Cepandant, il me reste une dernière chose à peaufiner.
    Je récupère le texte, mais je souhaiterais retirer la derniere lettre lorsque je recupere le texte.
    Il me reste plus que celà. le resultat moins une lettre à la fin.

    Réedition,

    C'est bon, j'ai trouver, j'ai modifier ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Edit1.Handle, WM_GETTEXT, L + 1, LParam(PChar(S)));
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Edit1.Handle, WM_GETTEXT, L - 1, LParam(PChar(S)));
    Merci, sujet résolue.

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

Discussions similaires

  1. #N/A integer et string: erreur de compatibilité de types
    Par Many31 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/01/2008, 14h51
  2. conversion d'un Integer en String
    Par fredonouille dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2007, 23h58
  3. convertir integer en string
    Par Emcy dans le forum C
    Réponses: 111
    Dernier message: 07/03/2007, 21h05
  4. JSF selectOneMenu converter Integer et String
    Par LaseLiep dans le forum JSF
    Réponses: 2
    Dernier message: 12/01/2007, 10h20
  5. Integer ou string dans une DBGRID
    Par Yepazix dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/08/2004, 13h42

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