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

Langage Delphi Discussion :

de C à delphi


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut de C à delphi
    Bonjour

    Je ne connais rien au C.
    Quelqu'un ici pourrait-il m'aider à trouver l'équivalence en Delphi ?
    Je mets la procédure entière mais c'est surtout l'utilisation du pipe (0 |1|1;) qui me pose problème.
    Pour le reste je vais bien me débrouiller tout seul

    Code C : 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
    17
    18
    19
     
    void SendInputkey(HWND window, WORD key, WORD shift=0)
    {
        WORD loword = 1;
        WORD scancode=0x0000;
        WORD extendedkey=0x0100;
        WORD keyup= 0 |1|1;
        WORD keydown= 0 |1|0;
        WORD hiword = scancode | extendedkey |keyup;
        if(shift!=0)
            PostMessage(window, WM_KEYDOWN,(WPARAM) shift,MAKELPARAM(loword, hiword));
        PostMessage(window, WM_KEYDOWN,(WPARAM) key,MAKELPARAM(loword, hiword));
        extendedkey=0x0000;
        hiword = scancode | extendedkey | keydown;
        if(shift!=0)
            PostMessage(window, WM_KEYUP,(WPARAM) shift,MAKELPARAM(loword, hiword));
        PostMessage(window, WM_KEYUP,(WPARAM) key,MAKELPARAM(loword, hiword));
     
    }

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Par défaut
    salut
    teste ce code mais me pose pas de question il n'est pas de moi
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    procedure SendInputKey(window: HWND; key: Word; shift: Word = 0);
    var
      loword: Word;
      scancode: Word;
      extendedkey: Word;
      keyup: Word;
      keydown: Word;
      hiword: Word;
    begin
      loword := 1;
      scancode := $0000;
      extendedkey := $0100;
      keyup := 0 or 1 or 1;
      keydown := 0 or 1 or 0;
      hiword := scancode or extendedkey or keyup;
     
      if shift <> 0 then
        PostMessage(window, WM_KEYDOWN, shift, MAKELPARAM(loword, hiword));
     
      PostMessage(window, WM_KEYDOWN, key, MAKELPARAM(loword, hiword));
     
      extendedkey := $0000;
      hiword := scancode or extendedkey or keydown;
     
      if shift <> 0 then
        PostMessage(window, WM_KEYUP, shift, MAKELPARAM(loword, hiword));
     
      PostMessage(window, WM_KEYUP, key, MAKELPARAM(loword, hiword));
    end;

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    | c'est le or binaire mais il n'a aucun intérêt dans ce code entre des constantes 0 et 1, le résultat sera toujours 1
    Franchement ce code C est pourri, cela n'utilise même pas les constantes Windows prévu pour et il est plein d'étape inutile, l'auteur ne semblait pas bien maitriser grand chose.

    Souvent on peut tout simplement faire un + entre les constantes Windows qui sont toutes des multiples de 2 genre $0001, $0002, $0004, $0008 puis $0010, $0020, $0040, $0080 ...
    dans ce cas KF_EXTENDED (0x0100), KF_DLGMODE (0x0800), KF_MENUMODE (0x1000), KF_ALTDOWN (0x2000), KF_REPEAT (0x4000), KF_UP (0x8000)

    Vu le sujet du post et le titre de sujet autant le fusionner dans Ctrl + character vers un composant

    En gros cela doit se résumé à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure SendInputKey(window: HWND; key: Word; shift: Word = 0);
    begin 
      if shift <> 0 then
        PostMessage(window, WM_KEYDOWN, shift, MAKELPARAM(1, KF_EXTENDED + $0001));
     
      PostMessage(window, WM_KEYDOWN, key, MAKELPARAM(1, KF_EXTENDED + $0001));
     
      if shift <> 0 then
        PostMessage(window, WM_KEYUP, shift, MAKELPARAM(1, $0001));
     
      PostMessage(window, WM_KEYUP, key, MAKELPARAM(1, $0001));
    end;
    KF_EXTENDED en hiWord c'est synonyme du bit 24 à 1 :
    Indique si la touche est une touche étendue, telle que les touches ALT et CTRL de droite qui s’affichent sur un clavier à 101 ou 102 touches amélioré. La valeur est 1 s’il s’agit d’une clé étendue ; sinon, c’est 0
    KF_EXTENDED c'est 0x0100 qui devient en hiword x01000000 ce qui correspond bien au 24ème bit à 1
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    En fait c'est un code que j'ai trouvé sur https://cboard.cprogramming.com/wind...-wm_keyup.html

    Quand à déterminer, vu que je ne connais pas le langage proposé, difficile pour moi de juger

    Mais puisque le | est le OR effectivement je ne vois pas l'utilité du 0 or 1 or 1

    Sinon pour le résultat, le tien et celui de Papyvore donne le même résultat.

    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
    17
     
    procedure TForm12.Button1Click(Sender: TObject);
    var
      Key: char;
    begin
      Key := 'R';
      SendInputKey(Handle, Ord(Key), 1);   // Papyvore
      SendInputKey2(Handle, Ord(Key), 1);  // Shaï
    end;
     
    procedure TForm12.WMOP(var Msg: TWMKey);
    var
      St: TShortCut;
    begin
      St := ShortCutFromMessage(Msg);
      Memo1.Lines.Add(Format('%s', [ShortCutToText(St)]));
    end;
    Résultat :


    R

    R

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    J'ai bien pensé à mettre ça au bout de l'autre question mais comme c'était surtout pour comprendre cette histoire de | donc j'ai hésité.

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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