Hallo, ich steuer über eine serielle Schnittstelle einen Roboterarm, alles funktioniert auch soweit nur die ButtonDownFcn nicht. Ich habe über ein axes ein Hintergrundbild angelegt. auf dem axes ist ein Button, mit dem ich die Drehrichtungen bedienen kann, dabei bewegt er sich nach links wenn ich die linke maustaste betätige. jetzt will ich aber dass wenn ich rechts klicke, er sich nach rechts bewegt. soweit funktioniert das auch, wenn kein hintergrundbild geladen ist, also kein axes vorhanden ist. sobald aber ich die axes definieren mit dem hintergrundbild, funktioniert es nicht. warum? kann mir jemand helfen? warum wird die ButtonDownFcn des Buttons durch das axes deaktiviert? wie kann ich das umgehen?
Danke im Voraus
... mit dem ich die Drehrichtungen bedienen kann, dabei bewegt er sich nach links wenn ich die linke maustaste betätige.
Bewegt sich der Button oder der Roboterarm?
Zitat:
jetzt will ich aber dass wenn ich rechts klicke, er sich nach rechts bewegt.
Ein Rechts-Klick auf den Button, oder irgendwo in der Figure?
Zitat:
warum wird die ButtonDownFcn des Buttons durch das axes deaktiviert?
Das ist in der Tat sehr ungewöhnlich. Ein AXES-Object kan die ButtonDownFcn der FIGURE blockieren. Das kann man aber umgehen, indem man die Eigenschaft 'HitTest' auf 'off' stellt und damit die AXES für alle Mausevents versteckt. Wieso aber der Button keine Rechts-Klicks mehr empfängt, kann ich ohne den Code zu sehen nicht sagen. Ich vermute einen Programmierfehler, der z.B. die eigentliche Callback-Funktion blockiert oder der das Erstellen des Buttons beeinflußt. Das ist aber frei geraten.
Gruß, Jan
Gast12345
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.07.2011, 15:24
Titel:
Vielen Dank für die schnelle Antwort,
Ich möchte auf einen Button Links- oder Rechtsklicken, und dann damit Relais umschalten. Dabei befindet sich der Button auf einem AXES-Feld, dass ein Foto darstellt.
Der Code dazu sieht wie folgt aus:
Damit stelle ich das Bild auf der AXES-Fläche dar, auf der sich nun auch der Button befindet. Der Button_Callback funktioniert einwandfrei.
Code:
function Pushbutton_Callback(hObject, eventdata, handles) % hObject handle to Pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Nur die ButtonDownFcn (also der Rechtsklick) erkennt MATLAB nicht...
Der Code wäre wie folgt:
Code:
function Pushbutton_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to Pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Mit hilfe der Variable z würde ich dann die Relais steuern, was hier aber nicht weiter eine Rolle spielt.
Nun bin ich ratlos, denn ohne das Darstellen des Bildes (also wenn ich den obersten Code weglasse) funktioniert auch die ButtonDownFcn.
Frage mich also wo hier der Fehler ist.
MFG
Gast12345
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.07.2011, 15:26
Titel:
PS: ich habe "HitTest" des AXES-Feldes bereits auf off gestellt, was aber das Problem nicht gelöst hat.
Wird die ButtonDownFcn angesprungen und funktioniert nur falsch? z.B. mit einem Breakpoint überprüfen.
Das Erstellen einer AXES hat keine Auswirkungen auf die ButtonDownFcn eines UICONTROL Objektes. Es muss also irgend einen unerwarteten Seiteneffekt geben, der Dein Problem bewirkt. Bisher ist aber in Deinen Beschreibungen der Auslöser noch nicht zu finden.
Gruß, Jan
Gast12345
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.07.2011, 22:19
Titel:
Hallo Jan,
Da die ButtonDownFcn vorm Einfügen des Bildes in AXES funktioniert hat, dachte ich dass eine Definition mit uicontrol nicht nötig wäre.
Ich hab einfach den Inspector des Buttons aufgerufen und mir ein feld für die ButtonFownFcn erstellen lassen:
Code:
% --- If Enable == 'on', executes on mouse press in 5 pixel border. % --- Otherwise, executes on mouse press in 5 pixel border or over Pushbutton. function Pushbutton_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to Pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Vielleicht war das der Fehler. Ich habe nun deine Definition bei mir in der Function eingefügt, jedoch ist der Fehler dadurch nicht behoben.
Vielen Dank schonmal
Gast12345
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 31.07.2011, 12:50
Titel:
habe jetzt endlich die Lösung des Problems gefunden.
Zwar habe ich den "HitTest" von AXES anfangs auf "off" gesetzt, aber sobald das image geladen wurde, hat sich dieser automatisch wieder auf on gestellt.
Danke Jungs! Hab mich mit euren Hinweisen in meinem Problem (http://www.gomatlab.de/axes-buttondownfct-reagiert-nicht-t18860.html) auch noch mal auf die Suche gemacht und hab festgestellt, dass bei mir die ButtonDownFcn zwischendurch gelöscht wird. Nach dem Manuellen hinzufügen funktioniert es nun Vielen Dank für den Tipp!
Nun funktioniert der Callback, aber die ButtonDownFcn nicht mehr.
Das entspricht aber nicht der Dokumentation, weil der Button eigentlich über dem AXES-Objekt liegt und deshalb die Maus-Events eigentlich gar nicht "stehlen" kann. Das ist also ein Bug, meiner Meinung nach. Allerdings verhielt sich Matlab 6.5 schon genau gleich. Ich versuche dem mal auf den Grund zu gehen.
Kann mir bitte jemand erklären. Ich habe das gleiche Problem, dass wenn ich ein Bild in der Figure mir anzeigen lasse, dann funktioniert die ButtonDownFcn nicht mehr...
FrageMan
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.08.2011, 11:17
Titel:
so habe verstanden, nach dem ich Bild anzeigen lasse, führe ich folgende Zeile aus:
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.