WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Axes blockiert ButtonDownFcn meines Buttons

 

gast12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2011, 12:33     Titel: Axes blockiert ButtonDownFcn meines Buttons
  Antworten mit Zitat      
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


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.07.2011, 15:02     Titel: Re: Axes blockiert ButtonDownFcn meines Buttons
  Antworten mit Zitat      
Hallo gast12345,

Zitat:
auf dem axes ist ein Button, ...

Was bedeutet das?

Zitat:
... 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
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2011, 15:24     Titel:
  Antworten mit Zitat      
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:

Code:

axes(handles.axes1);            
Bild=imread('Img1.jpg','jpg');    
image (Bild); axis image;        
axis off
 


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)

handles.z=handles.z+1;          
guidata(hObject, handles);    
 


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)

handles.z=handles.z-1;        
guidata(hObject, handles);
 


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: ---
     Beitrag Verfasst am: 30.07.2011, 15:26     Titel:
  Antworten mit Zitat      
PS: ich habe "HitTest" des AXES-Feldes bereits auf off gestellt, was aber das Problem nicht gelöst hat.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.07.2011, 16:15     Titel:
  Antworten mit Zitat      
Hallo Gast12345,

Merkwürdig. Wie wird denn die ButtonDownFcn definiert?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2011, 16:29     Titel:
  Antworten mit Zitat      
Entschuldige aber ich verstehe die Frage nicht wirklich. Könntest du das bitte konkretisieren?
MFG
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.07.2011, 22:05     Titel:
  Antworten mit Zitat      
Hallo Gast12345,

Wie hast Du die ButtonDownFcn des UICONTROLs gesetzt? Vielleicht so:
Code:
uicontrol('Style', 'PushButton', ...
  'Callback', {@Pushbutton_Callback, handles}, ...
  'ButtonDownFcn', {@Pushbutton_ButtonDownFcn, handles});

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2011, 22:19     Titel:
  Antworten mit Zitat      
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)

handles.z=handles.z-1;        
guidata(hObject, handles);
 


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 Smile
 
Gast12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2011, 12:50     Titel:
  Antworten mit Zitat      
habe jetzt endlich die Lösung des Problems gefunden. Smile
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.

Also habe ich nach dem Laden des Images
Code:

set(handles.axes,'HitTest','off');
set(findobj(gcf,'type','image'),'hittest','off')
 

noch den Hittest von AXES und den image auf off gesetzt, und es klappt !!

Danke Jan für deinen Hittest tip Smile
 
Knappe Franz
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2011, 17:40     Titel:
  Antworten mit Zitat      
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 Smile Vielen Dank für den Tipp!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.07.2011, 22:56     Titel:
  Antworten mit Zitat      
Hallo Gast12345,

Ich habe erst jetzt Dein Problem verstanden.
Code:
uicontrol('Style', 'pushbutton', 'Position', [100, 100, 80, 20], ...
    'Callback', 'disp(''callback'')', ...
    'ButtonDownFcn', 'disp(''buttondown'')');

Jetzt funktionieren beide Callbacks. Aber dann:
Code:

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
FrageMan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 10:48     Titel:
  Antworten mit Zitat      
Ich versetehe nicht, wohin schreibt man den Code
Code:


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... Sad
 
FrageMan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 11:17     Titel:
  Antworten mit Zitat      
so habe verstanden, nach dem ich Bild anzeigen lasse, führe ich folgende Zeile aus:
Code:
set(handles.Image2, 'ButtonDownFcn',{@axes2_ButtonDownFcn, handles});


Dann wird die axes2_ButtonDownFcn aufgerufen.

Die HitTest muss aber bei mir "on" sein!!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.