2016-08-09 15 views
1

Diese post zeigt, wie Sie mit der Funktion overobj den Zeiger so einstellen, dass er den Achsenteil einer GUI ändert. Das Problem ist, dass dies die Zeigerform außer Kraft setzt, die von den Zoom- oder Schwenk-Symbolleistenschaltflächen festgelegt wurde. Ich kann wie folgt testen für verschiedene Symbolleisten-Schaltflächen sind:Koordinieren von Schaltflächen und Schaltflächen in der Werkzeugleiste zum Setzen des Zeigers in Matlab

if (strcmp(handles.zoom.State, 'off')) 
    obj_han=overobj('axes'); 
    if ~isempty(obj_han) 
     set(handles.figure1,'Pointer','cross'); 
    else 
     set(handles.figure1,'Pointer','arrow'); 
    end 
    end 

Aber das erfordert einen neuen Test für jedes Werkzeug in der Symbolleiste hinzufügen, die für Fehler wie eine Formel scheint. Wie setzt Zoom beispielsweise den Zeiger? Gibt es eine bessere Möglichkeit zum Integrieren des Zeigers mit der Art, wie die Symbolleistenschaltflächen die Änderung vornehmen?

Antwort

2

Sie könnten den undokumentierten uimode and uimodemanager verwenden, um den aktuellen uimode abzurufen, und wenn der aktuelle uimode leer ist, dann ist keines der Werkzeuge aktiv.

manager = uigetmodemanager(gcf); 

% Only alter the pointer if the CurrentMode is empty 
if isempty(manager.CurrentMode) 
    if ~isempty(obj_han) 
     set(handles.figure1, 'Pointer', 'cross') 
    else 
     set(handles.figure1, 'Pointer', 'arrow') 
    end 
end 

würde ich die uimodemanageraußerhalb Ihres Rückrufs abrufen und explizit auf den Rückruf übergeben, so dass Sie es nicht jedes Mal abgerufen haben.

+0

das funktioniert, aber eine zusätzliche Frage auffordert. Meine Gui hat ein Achsenobj, das ich dann imi show ('pic.bmp') oben auf. Das Standardverhalten besteht darin, die Sichtbarkeit der Achsen obj zu deaktivieren, wodurch die Achsen von overobj ausgeblendet werden. OK, mach es wieder an, aber jetzt bekomme ich Tickmarkierungen außerhalb meines Bildes. Ich kann sie mit axes.XTick = [] ausschalten (und dasselbe für Y), aber gibt es einen eleganteren Weg, dies zu tun? Sollte die erste Zeile Ihres Codes auch gcbf anstelle von gcf verwenden? – Llaves

+0

@Llaves Der einzige Weg, dies mit einer Achse zu erreichen, ist das, was Sie getan haben. Sie können 'gcbf' verwenden, wenn Sie bevorzugen. Das Snippet zeigt nur an, dass Sie den "uimodemanager" von der Figur abrufen. Wie Sie diesen Zahlengriff erhalten, bleibt Ihnen überlassen. – Suever

Verwandte Themen