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

Mausposition auslesen - handles nicht gefunden

 

Hirokeen
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.05.13
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 30.05.2013, 21:58     Titel: Mausposition auslesen - handles nicht gefunden
  Antworten mit Zitat      
Hi Leute,

bin neu hier im Forum und komme nach langem Suchen nicht umher nun doch selbst zu fragen.
Ich stehe vor folgendem Problem:

Ich möchte die Position der Maus auslesen und abspeichern, wenn ich auf mein axes-Feld klicke. Dazu habe ich auch bereits einen brauchbaren Code gefunden. Das Problem liegt nun darin die Position anzeigen zu lassen.
Wenn ich bei der Funktion "druecken", die sich auf den Mausklick bezieht direkt den String meines Textfeldes ändern möchte, spuckt Matlab aus, dass das Ding nicht vorhanden sei.

Allgemein funktioniert der Code, nur die Ausgabe funzt eben nicht. Um das zu umgehen habe ich nen Button gesetzt, damit ich wenigstens die Position des letzten Klicks erhalte, aber das ist nun mal alles andere als komfortabel.

Danke schon mal für jede Antwort!

Code:

function disppos(hObject, eventdata, handles)
global h pt
h.f = handles.axes1;
% grid on;
h.a=gca;
set(gcf,'WindowButtonDownFcn',{@druecken, h});
set(gcf,'WindowButtonUpFcn', {@loesen,h});


function druecken(hObject, eventdata, handles, h)
global h pt
pt = get(h.a, 'CurrentPoint')
print(hObject, eventdata, handles);
set(gcf, 'WindowButtonMotionFcn', {@ziehen,h});

function ziehen(hObject, eventdata, handles, h)
global h pt
pt = get(h.a, 'CurrentPoint');
print(hObject, eventdata, handles);

function loesen(hObject, eventdata, handles, h)
global h
set(gcf, 'WindowButtonMotionFcn', '');

function print(hObject, eventdata, handles)
global pt
set(handles.text_status,'String',num2str([pt(1,1) pt(1,2)]));
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.05.2013, 00:52     Titel: Re: Mausposition auslesen - handles nicht gefunden
  Antworten mit Zitat      
Hallo Hirokeen,

Zitat:
... spuckt Matlab aus, dass das Ding nicht vorhanden sei.

Bitte poste eine Kopie der Fehlermeldung, anstatt sie nur ein paar Inhalte daraus zu interpretieren. Z.B. enthält sie die Zeile, in der das Problem auftrat. Dann müssen wir diese Zeile nicht erst aufwändig suchen. Danke!

Es ist überflüssing und stiftet Verwirrung, dass "h" sowohl als globale Variable als auch als Input-Argumetn übergeben wird. Entscheide Dich für eines von beiden - vorzugweise niemals für globals.

Ich rate mal, dass der handles-Struct, der an "print" (Nebenbei: das Überschreiben von Built-In Matlab Funktionen kann unerwartete Auswirkungen haben) übergeben wird, nicht vollständig ist. Mit dem debugger bekommst Du das leicht heraus:
Code:

Um immer aktuelle "handles" zu erhalten, verwende GUIDATA.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hirokeen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.05.13
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 31.05.2013, 09:12     Titel:
  Antworten mit Zitat      
Danke für die Antwort,
bin leider nur wenig vorwärts gekommen. Hab gar nicht dran gedacht, dass ich die build-in function überschreibe, das hab ich natürlich geändert.

Reference to non-existent field 'text_status'.

Error in gui_zone_editor>set_stuff (line 154)
set(handles.text_status,'String',num2str([pt(1,1) pt(1,2)]));

Error in gui_zone_editor>druecken (line 141)
set_stuff(hObject, eventdata, handles);

Error while evaluating figure WindowButtonDownFcn

Zeile 141 ist in diesem Fall die Zeile in der set_stuff aufgerufen wird. Also innerhalb der function druecken, als auch ziehen (Zeile 147).
Allerdings nicht in Zeile 157, also innerhalb der pushbutton-function.

text_status ist ein Textfeld im GUI.

Code:

function disppos(hObject, eventdata, handles)
global pt h
h.f = handles.axes1;
% grid on;
h.a=gca;
set(gcf,'WindowButtonDownFcn',{@druecken, h});
set(gcf,'WindowButtonUpFcn', {@loesen, h});

function druecken(hObject, eventdata, handles)
global pt h
pt = get(h.a, 'CurrentPoint')
set_stuff(hObject, eventdata, handles); %<--Zeile 141
set(gcf, 'WindowButtonMotionFcn', {@ziehen,h});

function ziehen(hObject, eventdata, handles)
global pt h
pt = get(h.a, 'CurrentPoint');
set_stuff(hObject, eventdata, handles); %<--Zeile 147

function loesen(hObject, eventdata, handles)
set(gcf, 'WindowButtonMotionFcn', '');

function set_stuff(hObject, eventdata, handles)
global pt h
set(handles.text_status,'String',num2str([pt(1,1) pt(1,2)])); %<--Zeile 154

function pushbutton_call_Callback(hObject, eventdata, handles)
set_stuff(hObject, eventdata,handles)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Rek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2013, 16:47     Titel:
  Antworten mit Zitat      
Wie Jan schon angedeutet hat, liegts an den handles. Code-Stücke zu übernehmen ist
sinnvoll aber man sollte drauf achten sie sinnvoll in sein eigenes Programm einzubauen.
Der Name der Variablen zum Speichern von handles ist frei wählbar. (Man kann natürlich
zusätzlich auch eine Auswahl der handles in einer neuen Struktur speichern und diese an Funktion etc. übergeben).

Du übergibst den Funktionen die Variable h. Diese enthält, soweit es aus dem Code-Auszug hervor geht, nur das handle deiner Axes-Komp -> h.f = gca;
Deshalb kommt es zur Fehlermeldung; der Funktion sind die in der Struktur handles definierten Variablen nicht bekannt. -> {@ziehen, handles} etc...

Zudem sei erwähnt dass h.f tendenziell eher für das handle der Figure verwendet wird.
In deinem Fall enthalten beide Variablen h.a, h.f vrs. das selbe handle!! Wenn du nur eine Figure,Axes hast ist gca, gcf ausreichend - beides zu mischen nicht sehr übersichtlich!

mfg
 
Hirokeen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.05.13
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 02.06.2013, 17:02     Titel:
  Antworten mit Zitat      
Hi,

vielen Dank für die Ratschläge. Hat super geklappt!
Private Nachricht senden Benutzer-Profile anzeigen
 
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.