Piège à souris et boîte à cadre bivariée<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai une analyse qui crache un complot bivarié. Lorsque j'ai ajouté des fonctionnalités supplémentaires via une opération Mousetrap, je ne peux pas sélectionner de points et je ne sais pas pourquoi. Existe-t-il un moyen d’empêcher cela ou au moins d’ajouter cette fonctionnalité?
Comment puis-je réparer cela?
dt = Open ("$ SAMPLE_DATA / Big Class.jmp");
nw = nouvelle fenêtre ("MouseTrap Test", Vlb = vlistbox ());
vlb << Append (biv = dt << Bivarié (Y (: hauteur), X (: poids));
rbiv = biv << report;
rbiv [cadre (1)] << Ajouter un script graphique (Mousetrap (print ("test"), print ("test test"))));
biv2 = dt << Bivarié (Y (: hauteur), X (: poids));)
Re: piège à souris et boîte à cadre bivariéMerci merci merci. Cela m'a rendu fou.
Et je suis sûr que vous voulez dire "\! N". Votre C # / C ++ est affiché.
Re: piège à souris et boîte à cadre bivariéAlors, n ° 4 alors. Pour tous ceux qui lisent ... ce script utilise une fonction nommée "MouseTrap" dans un script graphique attaché au graphique supérieur. Lorsque vous faites glisser la souris sur le graphique supérieur, la fonction MouseTrap enregistre les mouvements de la souris, empêchant ainsi la sélection normale de points dans un "rectangle en caoutchouc". Pour émuler le comportement de sélection, MouseTrap conserve les variables d'état "scripton" et "startx ... othery". msharp scripton créé pour savoir s’il faut ou non exécuter un script trop long pour chaque point supplémentaire ajouté au rectangle. MouseTrap utilise également scripton pour savoir si le bouton vient d’être appuyé. Si tel est le cas, X, Y est capturé dans startx, starty, sinon dans otherx, othery. Et si ce n'est pas la première fois, MouseTrap utilise startx ... sinon dans une instruction where pour sélectionner les lignes de la table. Les fonctions Min et Max du compte de la commande SelectWhere permettent de tracer le rectangle de sélection de haut en bas, de bas en haut et de gauche à droite.
MakeRowStateHandler devrait probablement aussi faire la même évaluation que MouseTrap; ici, il ne fait qu'imprimer les lignes qui ont changé. Il y a quelques autres instructions d'impression dans ce code; regardez le journal pour avoir une idée de ce qui se passe.
//Startdt = Open( "$SAMPLE_DATA/Big Class.jmp" );script = "\[New Window("Test", Text Box("Hello"));]\";scripton = 1; // this is a better way to deal with row state changes (and not needed for the rest of the example) rs = dt<startx = .;starty = .;otherx = .;othery = .;nw = New Window( "MouseTrap Test", Vlb = V List Box() );vlb << Append( biv = dt << Bivariate( Y( :height ), X( :weight ) ); rbiv = biv << report; rbiv[frame box( 1 )] << Add Graphics Script( If( !Is Missing( startx ), Line( {startx, starty}, {otherx, starty}, {otherx, othery}, {startx, othery}, {startx, starty} ) ); Mousetrap( If( scripton, write("down\n"); startx = x; starty = y; , write("move\n"); otherx = x; othery = y; dt << selectwhere( Min( starty, othery ) < :height < Max( starty, othery ) & Min( startx, otherx ) < :weight < Max( startx, otherx ) ); ); scripton = 0; , write("up\n"); scripton = 1; startx = .; // toggle off Eval( Parse( script ) ); ); ); biv2 = dt << Bivariate( Y( :height ), X( :weight ) ););Re: piège à souris et boîte à cadre bivariéCe sont tous des déclarations OU. J'ai besoin d'une déclaration AND. Comment puis-je sélectionner des points ET exécuter le script? Tout ce que vous avez répertorié sélectionne des points OU exécute le script.
Un peu plus d'informations, j'ai un script qui s'exécute chaque fois qu'un point est sélectionné. Lorsque vous faites glisser et sélectionnez plusieurs points, si l'utilisateur est lent, le script s'exécutera plusieurs fois. Je souhaite empêcher le script de s'exécuter jusqu'à ce que l'utilisateur relâche la souris. Voir exemple ci-dessous.
//Début
dt = Open ("$ SAMPLE_DATA / Big Class.jmp");
script = "\ [Nouvelle fenêtre (" Test ", Zone de texte (" Bonjour "));]]" "
scripton = 1;
// Script sélectionné
dt << Nouvelle colonne ("Script sélectionné",
numérique,
Formule(
Si (sélectionné (état de la ligne ())) & scripton == 1,
Eval (Parse (script))
)
)
)
Column (dt, "Script sélectionné") << Hide;
//RÉPARER?!?!?
nw = nouvelle fenêtre ("MouseTrap Test", Vlb = vlistbox ());
vlb << Append (biv = dt << Bivarié (Y (: hauteur), X (: poids));
rbiv = biv << report;
rbiv [cadre (1)] << Ajouter un script graphique (Mousetrap (scripton = 0, scripton = 1));
biv2 = dt << Bivarié (Y (: hauteur), X (: poids));
)
Re: piège à souris et boîte à cadre bivariétrois façons:
1) utilisez l’outil Pinceau (appuyez sur
avec le script actuel (maintenez la touche Alt enfoncée tout en brossant pour changer la taille du pinceau). Lorsque l'outil Pinceau est actif, le piège à souris ne l'est pas.
2) modifiez votre script pour placer le script graphique plus tôt dans la liste de dessin
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );nw = new Window("MouseTrap Test", Vlb = vlistbox());vlb << Append(biv = dt << Bivariate( Y( :height ), X( :weight ) );rbiv = biv << report;rbiv[frame box(1)] << Add Graphics Script( 1, Mousetrap(print("test"), print("test test")));biv2 = dt << Bivariate( Y( :height ), X( :weight ) );)La logique est la suivante: le script qui dessine en premier est repeint par les scripts graphiques suivants. Les tests de frappe de la souris sont donc effectués dans l’ordre inverse: s’il est tracé en dernier, il est plus visible et devrait être plus facile à utiliser avec la souris. Maintenant, si vous cliquez sur un point, le marqueur seg prendra la souris (et vous pourrez faire glisser un rectangle de sélection). Si vous cliquez hors d'un point, le script mousetrap prend le clic. Vous ne pouvez pas sélectionner le rectangle si vous cliquez sur un point. Vous pouvez expérimenter en utilisant rightClick-> Personnaliser et déplacer les scripts de haut en bas.

(J'ai sauvegardé le script et jeté un œil pour voir comment faire le "1" ci-dessus.)
3) utilisez Handle au lieu de Mousetrap. Sauf si vous avez vraiment besoin de la souris pour attraper toute l'activité de la souris. La poignée ne capture que les clics sur la poignée carrée.
4) Je suppose que vous pourriez ré-implémenter la logique de sélection dans la souris si vous en aviez vraiment besoin. 1-3 semblent bien mieux cependant.