Mausefalle und Biviariate Frame Box<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Analyse, die eine bivariate Handlung ausspuckt. Wenn ich einige zusätzliche Funktionen über eine Mousetrap-Operation hinzugefügt habe, kann ich keine Punkte auswählen und habe keine Ahnung, warum. Gibt es eine Möglichkeit, dies zu verhindern oder zumindest diese Funktionalität wieder einzufügen?
Wie kann ich das beheben?
dt = Open ("$ SAMPLE_DATA / Big Class.jmp");
nw = neues Fenster ("MouseTrap-Test"), Vlb = vlistbox ());
vlb << Append (biv = dt << Bivariate (Y (: Höhe), X (: Gewicht)));
rbiv = biv << report;
rbiv [Frame-Box (1)] << Grafikskript hinzufügen (Mausefalle (Drucken ("Test"), Drucken ("Test Test")));
biv2 = dt << Bivariate (Y (: Höhe), X (: Gewicht));)
Re: Mousetrap und Biviariate Frame BoxDanke danke danke. Das hat mich verrückt gemacht.
Und ich bin mir ziemlich sicher, dass du "\! N" meinst. Ihr C # / C ++ wird angezeigt.
Re: Mousetrap und Biviariate Frame BoxAlso Nr. 4 dann. Für alle, die mitlesen ... Dieses Skript verwendet eine Funktion mit dem Namen "MouseTrap" in einem Grafikskript, das an das obere Diagramm angehängt ist. Wenn Sie mit der Maus auf die obere Grafik ziehen, erfasst die MouseTrap-Funktion die Mausbewegungen und verhindert die normale Auswahl von Punkten in einem "Gummiband-Rechteck". Um das Auswahlverhalten zu emulieren, verwaltet MouseTrap die Statusvariablen "scripton" und "startx ... othery". Msharp Skript erstellt, um zu wissen, ob ein Skript ausgeführt werden soll, das an jedem zusätzlichen Punkt, der dem Rechteck hinzugefügt wird, zu lange dauert. MouseTrap verwendet auch ein Skript, um zu verfolgen, ob die Schaltfläche gerade gedrückt wurde. Wenn ja, werden X, Y in startx, starty, andernfalls in otherx, othery erfasst. Wenn dies nicht das erste Mal ist, verwendet MouseTrap startx ... othery in einer where-Anweisung, um die Zeilen in der Tabelle tatsächlich auszuwählen. Die Min- und Max-Funktionen im Befehl SelectWhere berücksichtigen das Zeichnen des Auswahlrechtecks von oben nach unten, von unten nach oben und von links nach rechts.
MakeRowStateHandler sollte wahrscheinlich auch dieselbe Bewertung durchführen wie MouseTrap. Hier werden nur die Zeilen gedruckt, die sich geändert haben. In diesem Code gibt es einige andere Druckanweisungen. Sehen Sie sich das Protokoll an, um eine Vorstellung davon zu bekommen, was passiert.
//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: Mousetrap und Biviariate Frame BoxAll dies sind ODER-Anweisungen. Ich brauche eine AND-Anweisung. Wie kann ich Punkte auswählen UND das Skript ausführen? Alles, was Sie aufgelistet haben, wählt entweder Punkte aus oder führt das Skript aus.
Ein wenig mehr Informationen, ich habe ein Skript, das jedes Mal ausgeführt wird, wenn ein Punkt ausgewählt wird. Wenn Sie mehrere Punkte ziehen und auswählen und der Benutzer langsam ist, wird das Skript mehrmals ausgeführt. Ich möchte verhindern, dass das Skript ausgeführt wird, bis der Benutzer die Maus freigibt. Siehe Beispiel unten.
//Start
dt = Open ("$ SAMPLE_DATA / Big Class.jmp");
script = "\ [Neues Fenster (" Test ", Textfeld (" Hallo "));] \";
scripton = 1;
// Ausgewähltes Skript
dt << Neue Spalte ("Ausgewähltes Skript",
numerisch,
Formel(
Wenn (ausgewählt (Zeilenstatus ()) & scripton == 1,
Eval (Parse (Skript))
)
)
);
Spalte (dt, "Selected Script") << Hide;
//FIX?!?!?
nw = neues Fenster ("MouseTrap-Test"), Vlb = vlistbox ());
vlb << Append (biv = dt << Bivariate (Y (: Höhe), X (: Gewicht)));
rbiv = biv << report;
rbiv [Frame Box (1)] << Grafikskript hinzufügen (Mausefalle (scripton = 0, scripton = 1));
biv2 = dt << bivariate (Y (: Höhe), X (: Gewicht));
)
Re: Mousetrap und Biviariate Frame BoxDrei Wege:
1) Verwenden Sie das Pinselwerkzeug (drücken Sie
mit dem aktuellen Skript (halten Sie beim Bürsten Alt gedrückt, um die Pinselgröße zu ändern). Wenn das Pinselwerkzeug aktiv ist, ist die Mausefalle nicht aktiv.
2) Ändern Sie Ihr Skript, um das Grafikskript zuvor in die Zeichnungsliste aufzunehmen
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 ) );)Die Logik ist: Das Skript, das zuerst zeichnet, wird von nachfolgenden Grafikskripten übermalt. Die Maus-Tests werden also in umgekehrter Reihenfolge durchgeführt - wenn es zuletzt gezeichnet wurde, ist es besser sichtbar und sollte mit der Maus leichter zu treffen sein. Wenn Sie nun auf einen Punkt klicken, nimmt das Markerseg die Maus (und Sie können ein Auswahlrechteck herausziehen). Wenn Sie auf einen Punkt klicken, übernimmt das Mausefallen-Skript den Klick. Sie können das Rechteck nicht auswählen, wenn Sie von einem Punkt weg klicken. Sie können mit rightClick-> Anpassen experimentieren und die Skripts nach oben und unten verschieben.

(Ich habe das Skript gespeichert und einen Blick darauf geworfen, wie die "1" oben beschrieben wird.)
3) Verwenden Sie Griff anstelle von Mausefalle. Es sei denn, Sie brauchen wirklich die Mausefalle, um alle Mausaktivitäten zu erfassen. Griff erfasst nur Klicks auf dem quadratischen Griff.
4) Ich denke, Sie könnten die Auswahllogik in der Mausefalle neu implementieren, wenn Sie es wirklich müssten. 1-3 scheinen jedoch viel besser.