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

handles im callback übergeben: brauche struct2str oder so..

 

Christian2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2008, 18:29     Titel: handles im callback übergeben: brauche struct2str oder so..
  Antworten mit Zitat      
Ich möchte, daß bei einem Klick in einem Kontextmenü die Funktion "Machwas" aufgerufen wird, die als Parameter u.a. die handles-Struktur übergeben bekommen soll.

Das Problem ist nun, daß ich mir für den Callback-Aufruf einen String zusammenbasteln muß:

Code:

menuitem = uimenu(menu,'Label','Test','Callback',['Machwas(' handles ',''option'');']);
 


So müßte natürlich eine struct-Struktur in einen String umgewandelt werden. Dementsprechend beschwert sich Malab: "??? Error using ==> horzcat The following error occurred converting from char to struct: Error using ==> struct Conversion to struct from char is not possible."

Ich bräuchte also einen Befehl struct2str oder so ähnlich, den es aber leider nicht zu geben scheint.

Ich wäre für einen Tipp sehr dankbar.


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2008, 23:04     Titel:
  Antworten mit Zitat      
Hallo,

warum musst du einen String basteln?

Reicht es nicht wenn du deiner Funktion die Struktur übergibst (wie du ja selbst möchtest)?

Code:
menuitem = uimenu(menu,'Label','Test','Callback',{@Machwas handles });
sollte funktionieren (oder so ähnlich ^^)

struct2str gibts im File Exchange http://www.mathworks.com/matlabcent.....15017&objectType=file

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 13:22     Titel: bin ein bißchen weiter
  Antworten mit Zitat      
Vielen Dank für den Tipp. Bin ein bißchen weitergekommen dadurch.

Ich habe folgendes ausprobiert:

Code:

fun = @(x1,x2)Machwas(x1,x2);
menuitem = uimenu(menu,'Label','Test','Callback',fun(handles,'option'));
 


Dies gibt die Fehlermeldung: "??? Error using ==> uimenu Value must be a string, a function handle, or a cell array containing string or function handle".
Trotz der Fehlermeldung wird die Funktion "Machwas" aber aufgerufen, und zwar ohne, daß ich auf das Kontextmenü geklickt hätte, sondern einfach von selbst.

Außerdem habe ich probiert:

Code:

fun = @()Machwas(handles,'option');
menuitem = uimenu(menu,'Label','Test','Callback',fun);
 


Dies gibt dann die Fehlermeldung: "Error using ==>Machwas>@()Machwas(handles,'option') Too many input arguments." - und es passiert nichts.

Wäre froh, wenn mir noch einmal jemand weiterhelfen könnte.
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 13:59     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal vor fun geschwungene Klammern zu setzen und die runden wegzulassen:
Code:
menuitem = uimenu(menu,'Label','Test','Callback',{fun handles 'option'});
Allerdings musst du dann auch deine Funktion fun umschreiben!
Code:
fun = @(x1,x2,x3,x4)Machwas(x3,x4);
oder so ähnlich.
Denn in Callback-Funktionen sind die ersten zwei Übergabewerte hObject und eventdata - ein handle zum aktuellen Callback Objekt und ein zusätzliches Datenfeld.

Funktionen kannst du natürlich auch ganz normal mit function deklarieren:
Code:
function Machwas(hObject,eventdata,handles,string)
...
return
und dann über
Code:
menuitem = uimenu(menu,'Label','Test','Callback',{@Machwas handles 'option'});
aber das scheint dir ja irgendwie nicht zu gefallen -.-

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 14:21     Titel: Super!
  Antworten mit Zitat      
Super, vielen Dank! Das waren die entscheidenden Hinweise. Es funktioniert jetzt. Der Vollständigkeit halber noch einmal die Version, die funktioniert:

Code:
fun = @(x1,x2,x3,x4)Machwas(x3,x4);
menuitem = uimenu(menu,'Label','Test','Callback',{fun handles 'option'});

Beim Aufruf des Callbacks werden also als erstes hObject und eventdata übergeben und dann erst meine eigenen Übergabevariablen. Deswegen hat er sich auch über "too many input arguments" beschwert, weil ja vier an den function handle übergeben wurden, der jedoch nur zwei erwartete.
Auch die geschweiften Klammern statt den runden sind offenbar notwendig.
 
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 - 2024 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.