Verfasst am: 22.10.2010, 15:12
Titel: Pan Funktion in Toolbar mit Shortcut belegen
Hallo Forum,
ich habe eine mit Guide erstellte GUI. In dieser habe ich auch eine Toolbar mit den Guide gegebenen mitteln integriert. Die dort dargestellte und auch funktionierende Pan Funktion soll nun über einen Shortcut angewählt/abgewählt werden können.
Ich finde dazu einfach nichts. Kann mir gar nicht vorstellen, dass es nicht gehen soll. Bei Menü einträgen kann doch auch einfach ein Shortcut definiert werden.
Über einen kurzen stups in die richtige Richtung würde ich mich sehr freuen.
Genau da bin ich gerade dran. Ich habe hier im Forum auch einen Thread dazu gefunden in dem einer Probleme mit der Keypressfcn hat. Ich habe diese leider auch.
Ich habe ein GUI welches ich mit Guide erstellt habe.
In das entsprechende M File habe ich mal folgende Funktion gepackt
function myPress(src,evnt)
if length(evnt.Modifier) == 1 & strcmp(evnt.Modifier{:},'alt') & ...
evnt.Key == 's'
disp('Juhuu es GEEEEHT');
end
Die sollte mir in der Kommandozeile dann 'Juhuu es GEEEEHT' ausgeben wenn alt+s gedrückt würde.
Aber wie verknüpfe ich diese Funktion nun mit der KeyPressFcn?
Ich gehe davon aus, das ich in GUIDE in den PropertieINspector meines Hauptfigures gehen muss und dort die Funktion bei KeyPressFcn eintragen muss. Aber mit welcher Syntax?
Eigentlich sollte bei dem Tastendruck die Pan Funktion ausgeführt werden. Aber das müsste doch gehen, wenn ich mir von GUIDE die Callback Funktion von PAN aus der Toolbar erzeugen lasse und dann auf diese verlinke, oder?
Entschuldige, wenn ich mich hier extrem dappig anstelle, komme aber nicht weiter.
Habe den Shortcut eingebaut. Wird nun über die KeyPressFcn des Hauptfensters des Gui gestartet. Das klappt auch soweit nur leider verliere ich dabei den Fokus auf das Hauptfenster so das ich die Pan Funktion nicht wieder über den Shortcut abwählen kann.
Wie bekomme ich den Fokus wieder zurück?
Hier mal mein Code der beiden Funktionen
Code:
% -------------------------------------------------------------------- function move_image_button_ClickedCallback(hObject, eventdata, handles) % hObject handle to move_image_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) try if eventdata.Key=='p'
disp('komme über taste');
ifstrcmp(get(handles.move_image_button,'State'),'on')
pan('off');
elseifstrcmp(get(handles.move_image_button,'State'),'off')
pan('on');
end end catch ifstrcmp(get(handles.move_image_button,'State'),'on')
pan('on');
elseifstrcmp(get(handles.move_image_button,'State'),'off')
pan('off');
end end % --- Executes on key press with focus on figure1 and none of its controls. function figure1_KeyPressFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata structure with the following fields (see FIGURE) % Key: name of the key that was pressed, in lower case % Character: character interpretation of the key(s) that was pressed % Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed % handles structure with handles and user data (see GUIDATA)
if eventdata.Key=='p'
% disp('disp_keypress');
move_image_button_ClickedCallback(hObject, eventdata, handles);
end
Das klappt auch soweit nur leider verliere ich dabei den Fokus auf das Hauptfenster so das ich die Pan Funktion nicht wieder über den Shortcut abwählen kann.
Ups, das ist schwierig.
Mit dokumentierten Matlab-Mitteln geht es gar nicht.
Da Du für die PAN-Funktion sowieso die Maus bewegen musst, wäre es vielleicht einfacher, du würdest bei dem normalen PAN-Button bleiben...
ich gehe davon aus, dass du auf ein JavaScript Workaround anspielst, oder?
Wäre mir auch recht.
Ich benötige den Shortcut, da in meiner Gui in einem hohem Zoom ein Polygonzug mit impoly eingezeichnet wird. Wegen des hohen Zooms müssen die Leute das Bild weiter schieben können. Hier jedes mal mit der Maus auf die Pan Taste drücken erscheint mir recht kompliziert. Es wäre viel einfacher, wenn die Benutzer ihren Polygonzug zeichnen würden, kurz auf P drücken, das Bild weiter schieben, wieder auf P drücken und dann weiter zeichnen können. Mit der normalen PAN Taste per Mausklick klappt das auch schon.
Ja, das geht nur in Java. Du kannst im CSSM-Forum die Frage konkret an Yair stellen. Der scannt offenbar das Forum regelmäßig nach seinem Namen.
Ich habe für eine ähnliche Situation eine PAN-ähnliche Funktion gebastelt, die mit der rechten Maustaste und einem normalen WindowButtonDownFcn-Callback gestartet wird.
In der FEX gibt's ein Tool zur 3D-Navigation, aber das läuft in 2D sehr ähnlich: es wird nicht die Camera bewegt, sondern die XLim und YLim-Werte neu gesetzt. Suche mal nach "3D", "navigate" oder so ähnlich. Der Sourcecode der PAN Funktion selbst ist dagegen nicht so hilfreich.
Das würde dann sogar ohne Tastatur laufen!
Gruß, Jan[/code]
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.