2016-10-26 1 views
0

J'ai un éditeur qui est lié à un champ de base de données. Lorsque l'utilisateur appuie sur certaines touches, le programme doit se comporter différemment, pour le reste des clés, il doit conserver le comportement par défaut. J'utilise cette partie du code:appliquer le dernier événement avec n'importe quelle touche ne fonctionnant pas comme prévu

ON ANY-KEY OF editor_1 IN FRAME F-Main 
DO: 
    APPLY LAST-EVENT:LABEL TO SELF. 
    RETURN NO-APPLY. 
END. 

Le problème est que lorsque CANDIDATURE DE DERNIÈRE ÉPREUVE: LABEL est exécuté l'éditeur ne se comporte pas comme défaut.

Quelques exemples du comportement par défaut, à savoir quand une clé n'est pas déclenchée:

  • CTRL + C est utilisé pour copier du texte sélectionné
  • CTRL + V est utilisé pour coller le texte copyed

Après avoir déclenché une clé dans l'éditeur, le programme fonctionne comme ceci:

  • CTRL + C aplicat ion avorte
  • CTRL + V ne fonctionne pas
  • CURSORS BAS/DROITE/GAUCHE/ne fonctionnent pas
  • Backspace ne fonctionne pas

Y at-il de toute façon de déclencher une clé sans écrasant la valeur par défaut comportement?

Remarque: Progress 4GL est v11.3 et est exécuté à partir de Windows.

+0

Quels sont les événements spéciaux? Je peux reproduire ce que vous dites, et j'ai remarqué que le codage de ctrl-c ctrl-v restaurera la fonction. Mais il est probablement plus facile de simplement code pour les événements spéciaux que vous essayez de capturer. – bupereira

Répondre

1

Vous devez mapper les étiquettes de touches à la touche FUNCTION que vous souhaitez appliquer.

Quelque chose comme:

ON ANY-KEY OF editor_1 IN FRAME F-Main 
DO: 
    if last-event:label = "backspace" then 
    apply delete-char to self. 
    else 
    apply lastkey to self. 
    /* use a CASE statement to extend this... */ 
    RETURN NO-APPLY. 
END. 
+0

Je l'ai essayé, mais il est difficile de gérer certains événements. Par exemple, je n'ai trouvé aucune solution bonne et propre pour que le curseur bouge de haut en bas dans l'éditeur. De plus, il y a beaucoup d'événements, et je ne sais pas si j'en oublie. Je vais essayer de déclencher des touches spéciales, et voyons. La chose complexe est que les clés spéciales sont stockées dans une table, et je devrais créer dynamiquement les déclencheurs, plus certaines des touches spéciales sont une combinaison de différentes touches spéciales.C'est plus facile à gérer avec n'importe quelle clé sauf pour les événements par défaut. Merci. – Yaisa

+0

Juste une petite chose à propos de votre code, cela n'a pas fonctionné pour moi tel qu'il est et je l'ai modifié en éditeur: DELETE-CHAR() – Yaisa

0

au lieu de déclencher un événement sur une touche, pourquoi ne pas le faire juste pour ces touches spéciales?

Par exemple, le comportement de contrôle-C serait dans ce déclencheur:

ON CTRL-C of editor_1 IN FRAME F-Main 
1

J'ai parlé au progrès et il n'y a pas de solution à ce problème. Ce problème avec ANY-KEY est lié aux éditeurs.

Vous pouvez mapper certaines étiquettes de touches sur la touche spécifique FUNCTION, mais certains événements sont impossibles (par exemple, les mouvements du curseur). À la fin, j'ai dû déclencher pour les touches spéciales, mais dans ce cas particulier, il était préférable de quelque chose comme n'importe quelle clé.