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 :

Où trouver le caractère créé par ALT+n du pavé numérique


Sujet :

Delphi

  1. #1
    Nouveau membre du Club

    Homme Profil pro
    Artisan en électronique
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Artisan en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 38
    Points
    38
    Par défaut Où trouver le caractère créé par ALT+n du pavé numérique
    Bonjour,

    J'ai la procédure suivante:

    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
    16
     
    procedure signe(Sender: TObject);
    begin
      keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); 
     
      keybd_event(VK_NUMPAD1, MapvirtualKey(VK_NUMPAD1, 0), 0, 0);
      keybd_event(VK_NUMPAD1, MapvirtualKey(VK_NUMPAD1, 0), KEYEVENTF_KEYUP, 0);
     
      keybd_event(VK_NUMPAD7, MapvirtualKey(VK_NUMPAD7, 0), 0, 0);
      keybd_event(VK_NUMPAD7, MapvirtualKey(VK_NUMPAD7, 0), KEYEVENTF_KEYUP, 0);
     
      keybd_event(VK_NUMPAD2, MapvirtualKey(VK_NUMPAD2, 0), 0, 0);
      keybd_event(VK_NUMPAD2, MapvirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
     
     keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
    end;
    Le résultat, 1/4, je peux le récuperer par exemple dans un memo ou un label avec SetFocus
    Mais, là, je travaille avec "Application.ShowMainForm := False;" je ne peux donner le focus à rien

    Ai-je un moyen de le récuperer dans une variable ?

  2. #2
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 076
    Points : 5 541
    Points
    5 541
    Par défaut
    Citation Envoyé par Alain_31 Voir le message
    Bonjour,

    J'ai la procédure suivante:

    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
    16
     
    procedure signe(Sender: TObject);
    begin
      keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); 
     
      keybd_event(VK_NUMPAD1, MapvirtualKey(VK_NUMPAD1, 0), 0, 0);
      keybd_event(VK_NUMPAD1, MapvirtualKey(VK_NUMPAD1, 0), KEYEVENTF_KEYUP, 0);
     
      keybd_event(VK_NUMPAD7, MapvirtualKey(VK_NUMPAD7, 0), 0, 0);
      keybd_event(VK_NUMPAD7, MapvirtualKey(VK_NUMPAD7, 0), KEYEVENTF_KEYUP, 0);
     
      keybd_event(VK_NUMPAD2, MapvirtualKey(VK_NUMPAD2, 0), 0, 0);
      keybd_event(VK_NUMPAD2, MapvirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
     
     keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
    end;
    Le résultat, 1/4, je peux le récuperer par exemple dans un memo ou un label avec SetFocus
    Mais, là, je travaille avec "Application.ShowMainForm := False;" je ne peux donner le focus à rien

    Ai-je un moyen de le récuperer dans une variable ?
    Je ne comprend pas bien ce que tu veux faire... Peux-tu développer un peu mieux ?
    Tu veux intercepter des caractères du clavier ou simuler une frappe au clavier ?

  3. #3
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut
    Tu peux aussi travailler avec une fenêtre dont la valeur top = -1000 par exemple plutôt que de mettre showmainform à false

  4. #4
    Nouveau membre du Club

    Homme Profil pro
    Artisan en électronique
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Artisan en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 38
    Points
    38
    Par défaut
    Bonjour Sergio,

    Je ne tape rien au clavier.
    Quand je lance cette procédure, elle simule l'appui sur les touches suivantes: ALT+172
    (ALT: VK_MENU, puis 1, 7 et 2 du pavé numérique: Numpad_1, Numpad_7 et Nimpad_2)

    Ca fonctionne bien, elle écrit donc toute seule le caractère ASCII ¼ dans mon Memo1, à condition que j'ai mis Memo1.SetFocus

    Sinon, sans SetFocus, le résultat (le caractère ¼) n'apparaît nulle part, le Memo reste vide, mais elle l'a créé et je présume qu'elle doit bien l'avoir stocké quelque part.

    C'est pour mes essais seulement que j'ai utilisé le SetFocus, avec un Memo, un Label ... ça fonctionne sans problème.

    Mais, là, quand je rajoute: Application.ShowMainForm := False; dans mon .dpr pour que l'application ne soit pas visible à l'écran, pour n'avoir d'elle qu'une icône dans le systray avec un petit menu: (A propos, quitter), je ne peux plus utiliser SetFocus qui me permettait de récupérer dans Memo le caractère créé et de m'en servir dans le reste de mon programme.

    Mais mes connaissances en programmation sont trop limitées, et je ne sais pas comment retrouver ce caractère généré par la procédure pour pouvoir le mettre dans une variable et enfin l'utiliser

    J'ai essayé plein de choses, sûrement pas les bonnes, sans résultat.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Mais, là, quand je rajoute: Application.ShowMainForm := False; .. je ne peux plus utiliser SetFocus qui me permettait de récupérer dans Memo le caractère créé et de m'en servir dans le reste de mon programme.
    logique

    J'ai de lointains souvenirs (<2000) de buffer de clavier, dans mon cas il s'agissait de le vider mais peu importe, je pense que c'est la piste à suivre
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1.Lines.text := Memo1.Lines.text+#172 ;

  7. #7
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 076
    Points : 5 541
    Points
    5 541
    Par défaut
    Citation Envoyé par Alain_31 Voir le message
    Bonjour Sergio,

    Je ne tape rien au clavier.
    Quand je lance cette procédure, elle simule l'appui sur les touches suivantes: ALT+172
    (ALT: VK_MENU, puis 1, 7 et 2 du pavé numérique: Numpad_1, Numpad_7 et Nimpad_2)

    Ca fonctionne bien, elle écrit donc toute seule le caractère ASCII ¼ dans mon Memo1, à condition que j'ai mis Memo1.SetFocus

    Sinon, sans SetFocus, le résultat (le caractère ¼) n'apparaît nulle part, le Memo reste vide, mais elle l'a créé et je présume qu'elle doit bien l'avoir stocké quelque part.

    C'est pour mes essais seulement que j'ai utilisé le SetFocus, avec un Memo, un Label ... ça fonctionne sans problème.

    Mais, là, quand je rajoute: Application.ShowMainForm := False; dans mon .dpr pour que l'application ne soit pas visible à l'écran, pour n'avoir d'elle qu'une icône dans le systray avec un petit menu: (A propos, quitter), je ne peux plus utiliser SetFocus qui me permettait de récupérer dans Memo le caractère créé et de m'en servir dans le reste de mon programme.

    Mais mes connaissances en programmation sont trop limitées, et je ne sais pas comment retrouver ce caractère généré par la procédure pour pouvoir le mettre dans une variable et enfin l'utiliser

    J'ai essayé plein de choses, sûrement pas les bonnes, sans résultat.
    Je ne comprend pas...
    Si tu veux juste mettre une chaine de caractères avec "xxx¼yyy", par exemple, dans un mémo pourquoi faire une procédure si tordue ?
    Il suffit de faire, dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1.Lines.Add('xxx¼yyy');
    Et la ça marchera que ta fenêtre soit visible ou pas....

    Sinon pour le mettre dans une variable c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
        UnQuart    :  string;
    begin
       UnQuart:='¼';
       ...
    end;
    Sinon comme ça aussi

    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
     
     
    implementation
     
    {$R *.dfm}
     
    const
        UnQuart = 188;
     
    procedure TForm25.FormCreate(Sender: TObject);
    var
        Chaine  :   string;
    begin
        Chaine:=Chr(UnQuart);
    end;
    Je viens aussi de voir que le caractère 1/4 sort en ALT+172 au clavier mais en ascii c'est le code 188

  8. #8
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Je viens aussi de voir que le caractère 1/4 sort en ALT+172 au clavier mais en ascii c'est le code 188
    Bonjour,
    si tu fais ALT+0188 au clavier tu obtiens aussi "¼"

    Cordialement,

    @+

  9. #9
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 076
    Points : 5 541
    Points
    5 541
    Par défaut
    Citation Envoyé par Cirec Voir le message
    Bonjour,
    si tu fais ALT+0188 au clavier tu obtiens aussi "¼"

    Cordialement,

    @+
    Ca dépend de ton éditeur de texte ainsi que du jeux de caractères par défaut, chez moi, sous le bloc-notes :

    ALT+172 ="¼"
    ALT+188 ="╝"

    Par contre le caractère dans la table Unicode est bien 188 :

    Nom : Unsaved image.jpg
Affichages : 888
Taille : 87,0 Ko

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Les caractères ASCII étendus dépendent de la page de code séléctionnée. Le symbole retourné pourrait donc être différent d'un pc à l'autre, d'une app à l'autre.

    Mais par le pavé numérique, on peut forcer l'utilisation de la page de code 1252 en préfixant la valeur par un 0 : Alt+0188.

  11. #11
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    Ca dépend de ton éditeur de texte ainsi que du jeux de caractères par défaut, chez moi, sous le bloc-notes :

    ALT+172 ="¼"
    ALT+188 ="╝"

    Par contre le caractère dans la table Unicode est bien 188 :

    Nom : Unsaved image.jpg
Affichages : 888
Taille : 87,0 Ko
    oui dans mon Bloc-Notes aussi:
    ALT+172 ="¼"
    ALT+188 ="╝"

    mais:
    ALT+0188 ="¼"

    d'où l'importance du 0 (voir les explications d'Andnotor à ce sujet)

    d'ailleurs dans l'entouré sur l'image de la table des caractères on voit bien :
    "Frappe: ALT+0188"

    Cordialement,

    @+

  12. #12
    Nouveau membre du Club

    Homme Profil pro
    Artisan en électronique
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Artisan en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 38
    Points
    38
    Par défaut
    La solution du top := -1000 est idée qui me va pour permettre le SetFocus

    Celle du: "Memo1.Lines.text := Memo1.Lines.text+#172 ;" me conviendrait encore mieux

    Mais, la valeur de mon scancode n'est pas figée, elle dépend de ce que je tape au clavier (pas au clavier numérique, mais en convertissant en Numpad_x)
    Voilà le pourquoi de ma procedure qui n'était qu'un exemple

    Et là, je ne sais pas comment changer, par exemple le #172 par une autre valeur sans que cela devienne un string et non plus une ligne de commande

    Un exemple:
    J'ai la valeur d'un sancode dans une variable, ici 172, mais cette valeur changera plusieurs fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var 
      Codes: Integer;
     
    begin
      Codes := 172;
     
      // Memo1.Lines.Text := ? ? ? ...   si je mets: 
     
      Memo1.Lines.Text := #172; // ça fonctionne pour générer ce caractère, mais si je mets:
     
      Memo1.Lines.Text := '#' + IntToStr(Codes); // évidemment, ça n'est plus qu'un texte et pas une commande comme #172
    Y-a-t'il une solution ?

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1.Lines.Add(Chr(Codes));
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Nouveau membre du Club

    Homme Profil pro
    Artisan en électronique
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Artisan en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 38
    Points
    38
    Par défaut
    Merci à tous,
    Grâce à vous, j'ai pu y arriver.

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

Discussions similaires

  1. [Mail] Envoyé des caractères spéciaux par mail
    Par Oberown dans le forum Langage
    Réponses: 1
    Dernier message: 17/03/2006, 00h55
  2. Trouver un exécutable commencant par...
    Par Griswold dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2005, 18h28
  3. [Mail] Envoie de caractère spéciaux par mail() ?
    Par Oberown dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 17h13
  4. [Débutant(e)] Ou trouver la commande lancée par eclipse
    Par Emdis dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/11/2004, 12h00
  5. Requete avec chaine de caractère commence par
    Par jazzes_dean dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/08/2004, 14h07

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