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

Autres IDE Pascal Discussion :

GetWindowText - Retour du texte avec des ? [CodeTyphon]


Sujet :

Autres IDE Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Élève
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut GetWindowText - Retour du texte avec des ?
    Bonjour à tous ceux qui me lisent,

    Je suis débutant sous Lazarus (où plutôt Code Typhon pour les composants installés d'office...) et j'ai parcouru un bon nombre de pages web, lu beaucoup d'articles mais je n'arrive pas à me défaire de ce problème tout con mais pourtant bien réel...

    A savoir que je souhaite récupérer le nom d'une fenêtre à l'écran quand ma souris passe dessus... rien de sorcier... là où je bloque, c'est que le texte qui m'est renvoyé comporte des ? à la place de chaque caractères accentués... j'ai beau essayer AnsitoUTF8() et autre UTF8Encode()... etc... Je ne comprends plus rien à force de lire à gauche à droite...

    Je développe sur Windows 10 64-bits avec Code Typhon 5.70... La version de FPC est la 3.1.1.

    J'utilise un timer, windowFromPoint et GetWindowText...

    Voiçi mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Timer2Timer(Sender: TObject);
    var
        MPos: longint;
        TitleWnd:array[0..255] of char;
        TitreFenetre :string;
    begin
         MPos := WindowFromPoint(Mouse.CursorPos);
         LabelFenetre.Caption := 'Handle de la fenêtre courante : ' + IntToStr(MPos);
         GetWindowText(MPos, TitleWnd,255);
         TitreFenetre := TitleWnd;
         LabelNomFenetre.Caption := 'Nom de la fenêtre : ' + TitreFenetre;
    end;
    Il y a surement des erreurs... mais cela fonctionne en dehors du fait que je récupère un texte illisible dés qu'il y a a des accents ???

    Si quelqu'un peut me donner une explication ou une correction de ce code...

    ... et merci d'avance de m'avoir lu ;-)

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut,
    Citation Envoyé par xlbe78 Voir le message
    j'ai beau essayer AnsitoUTF8() et autre UTF8Encode()... etc... Je ne comprends plus rien à force de lire à gauche à droite...
    je pense que tu n'es pas loin. Allez encore un peu de lecture : le dernier post ici, et l'avant-dernier post là.

    Donc tu devrait transformer
    Citation Envoyé par xlbe78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         GetWindowText(MPos, TitleWnd,255);
    en GetWindowTextW(MPos, TitleWnd,255); pour voir. Attention, non testé, juste une idée matinale.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre à l'essai
    Profil pro
    Élève
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci pour cette réflexion matinale :-)

    J'ai essayé windowGetTextW (Unicode) et windowGetTextA (Ansi)... et j'ai ce message Error: Incompatible type for arg no. 2: Got "Array[0..255] Of Char", expected "PWideChar".

    Je pige bien que je devrais remplacer ma déclaration de variable par un TitleWnd : PWideCHar; ... mais quand je fais çà, je n'ai rien comme retour dans mon tlabel mais en plus, Lazarus me fait apparaitre une belle fenêtre "Assembleur" avec un beau gros plantage au bout de 10 secondes... Il semblerait que les PChar, PWideChar etc... soient délicats à manipuler.

    J'ai lu l'article sur le sujet içi : http://reisubar.developpez.com/tutor...trings-pchars/

    Bref, je sèche... même si j'ai l'idée que je ne suis pas loin d'une solution.

    Aussi, je vais regarder les deux posts dont tu me parles...

  4. #4
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Avec Lazarus 1.6 faut utiliser WinCPToUTF8 de l'unité LazUtf8 Pour convertir explicitement de Ansi en UTF8.
    Ici la conversion automatique de Codepage ne joue pas car TitleWnd n'est pas de type string.

    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
    Uses LazUtf8 ... ;
     
    procedure TForm1.Timer2Timer(Sender: TObject);
    var
        MPos: longint;
        TitleWnd:array[0..255] of char;
        TitreFenetre :string;
    begin
      MPos := WindowFromPoint(Mouse.CursorPos);
      LabelFenetre.Caption := 'Handle de la fenêtre courante : ' + IntToStr(MPos);
      GetWindowText(MPos, TitleWnd,255);
    // TitreFenetre := TitleWnd;
     TitreFenetre := WinCPToUtf8(TitleWnd);
      LabelNomFenetre.Caption := 'Nom de la fenêtre : ' + TitreFenetre;
    end;

  5. #5
    Membre à l'essai
    Profil pro
    Élève
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Yess DomDA91 ! çà fonctionne... merci :-)

    Merci également à Jipété... les deux posts que tu m'as pointé sont chouettes aussi...


    Je passe en résolu...

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

Discussions similaires

  1. changer un textarea par fonction JS : texte avec des sauts de ligne
    Par agrotic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/10/2006, 14h08
  2. Import fichier texte avec des champs variables
    Par joshua12 dans le forum Access
    Réponses: 4
    Dernier message: 26/09/2006, 09h06
  3. [JSTL 1.0.6] affichage d'un texte avec des retour chariots
    Par clettebou dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/08/2006, 10h16
  4. Ecrire du texte avec des coordonnées 3D
    Par julian_ross dans le forum DirectX
    Réponses: 3
    Dernier message: 21/06/2005, 15h05
  5. [Javascript] Afficher du texte avec des intervalles
    Par Invité4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/01/2005, 21h29

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