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

Objekterzeugung auslagern-Zugriff auf Callbacks

 

stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 26.03.2015, 11:22     Titel: Objekterzeugung auslagern-Zugriff auf Callbacks
  Antworten mit Zitat      
Hallo zusammen,

ich habe ohne GUIDE ein HauptGUI erstellt. Die Objekterzeugung möchte ich gern auslagern, weil es sehr viele Objekte sind und der Code damit unübersichtlich wirkt. Außerdem benötige ich in mehreren GUIs genau diese Objekte. Ich möchte sie also auch wiederverwerten.

Dazu habe ich eine Funktion geschrieben und an diese dann handles übergeben. Jetzt habe ich allerdings das Problem mit den erzeugten Callbacks in der ausgelagerten Funktion
Die erzeugten Objekte haben einen gemeinen Callback (update_callback) auf den ich dann beim triggern zugreife, dieser Callback befindet sich in dem HauptGUI.

HauptGUI:
Code:
handles = CreateObjects(handles);
...
function update_callback(handles)
% update irgendetwas


Ausgelagerte Objekterzeugung:

Code:
function h = CreateStateSwitch(h)
h.TestObject = uicontrol(...
    'Style',            'popup',...
    'Units',            'pixel',...
    'Position',         [5 10 90 20],...
    'String',           testStruct,...
    'Value',            testValue,...
    'Callback', @update_callback);


Die Erzeugung klappt aber wenn ich update_callback triggere dann sagt er, dass die Funktion "Undefined" ist.

Wie kann ich also richtig den Callback generieren?

Grüße

stealth_mx
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: 26.03.2015, 13:32     Titel: Re: Objekterzeugung auslagern-Zugriff auf Callbacks
  Antworten mit Zitat      
Hallo stealth_mx,

Wenn ich es richtig verstehe, definierst Du den Callback innerhalb einer eigenen Funktion, in der die Unterfunktion des Haupt-GUIs @update_Callback aber nicht sichtbar ist. Dann muss diese Callback von der Main-GUI als Variable mitgeliefert werden:

Code:
handles = CreateObjects(handles, @update_callback);
...
guidata(FigureHandle, handles);

function update_callback(hObject, EventData)
handles = guidata(hObject)
% update irgendetwas


Ausgelagerte Objekterzeugung:

Code:
function h = CreateObject(h, callback)
h.TestObject = uicontrol(...
    'Style',            'popup',...
    'Units',            'pixel',...
    'Position',         [5 10 90 20],...
    'String',           testStruct,...
    'Value',            testValue,...
    'Callback',        callback);

Es ist eine Fehlerquelle, den handles-Struct als Input eines Callbacks zu definieren, wenn er nach der Definition noch geändert wird. Deshalb habe ich handles per GUIDATA am Start des Callbacks neu aus den ApplicationData geholt.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 26.03.2015, 14:44     Titel:
  Antworten mit Zitat      
Hallo, danke für die Antwort, das GUIDATA steckt bei mir auch drin, genau an der Position, wo sie hingehört, habe es leider nur vergessen mit reinzusetzen.

Bedeutet das man jeden Callback dann immer so mitziehen muss? Wenn ich also beispielsweise 10 Callbacks so definiert hätte. (ob das ganze dann Sinn hätte sei dahingestellt)
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: 26.03.2015, 23:29     Titel:
  Antworten mit Zitat      
Hallo stealth_mx,
Zitat:
Bedeutet das man jeden Callback dann immer so mitziehen muss?

Das verstehe ich nicht. Was ist "mitziehen"?

Zitat:
Wenn ich also beispielsweise 10 Callbacks so definiert hätte. (ob das ganze dann Sinn hätte sei dahingestellt)

Ja? Was ist dann, wenn Du 10 Callbacks so definiert hättest?
Du kannst auch das Objekt in der externen Funktion erzeugen, den Callback erst mal leer lassen und ihn erst in der Hauptfunktion in das Objekt schreiben.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 27.03.2015, 11:46     Titel:
  Antworten mit Zitat      
Hi, mit dem mitziehen meine ich, dass ich händisch immer alle Callbacks übergeben muss. Gibt es einen allgemeinen, ich sage mal "dynamischen" Weg? Also nur eine Übergabeparameter

Damit meine ich das ich im Endeffekt nur einen "allgemeinen" Übergabeparameter habe obwohl ich z.B. 10 verschiedene Callbacks so definiere?

Ich glaube, dass es jedoch nicht funktionieren wird. Ich erstelle die Callbacks in der Hauptfunktion, muss also auch jeden Callback dann an die Nebenfunktion übergeben und dort den erstellten Objekten zuweisen.

Ich denke ich werde sowas nie brauchen. Ist reines Interesse das zu wissen.
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: 28.03.2015, 02:43     Titel:
  Antworten mit Zitat      
Hallo stealth_mx,

Ich kann mir unter einem "allgemeinen" Übergabe-Parameter nichts vorstellen. Du könntest danürlich die 10 Callbacks zu einem Vektor zusammenfassen. Aber das sind ja im gewissen Sinn immer noch 10 Function Handles.

Gruß, Jan
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 - 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.