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

Ausgelagerte Callback ansprechen?

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2012, 12:08     Titel: Ausgelagerte Callback ansprechen?
  Antworten mit Zitat      
Hey Profis,

ich habe da mal eine Frage. Ich habe eine GUI mit GUIDE erstellt. Während das GUI dann geöffnet ist, kann ich (über einem anderen m.File) dynamisch weitere Objekte hinzufügen, Pop-Ups, Editfelder, usw. jenachdem wie ich lust habe. Die Pop-Ups zB haben dann einen Callback.

Und mir geht es darum, wie ich im GUI m-File eine Callback-Funktion (nested, in der Skizze rot eingekreist) aus einem anderen m-File aufrufen oder ansprechen kann, wenn das denn überhaupt geht. Wenn es schon etwas zu diesem Thema gibt, nehme ich auch gerne den Link an, ich hab ihn bisher nicht gefunden. Oder irgendwie nicht das was ich suche.

Ich brauche auch eigentlich nur ein Prinzip oder Schema, anhand eines Beispiels oder eine andere Lösung. So wie es bei mir grad ist, hab ich euch mal skizziert. Vielleicht habt ihr vermutlich sogar eine bessere Lösung.

Ich hoffe ihr habt was für mich. Danke schonmal im Voraus.[/b]

Skizze.jpg
 Beschreibung:

Download
 Dateiname:  Skizze.jpg
 Dateigröße:  208.51 KB
 Heruntergeladen:  835 mal


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.06.2012, 18:08     Titel:
  Antworten mit Zitat      
Hallo
du kannst dir z.B. Function Handle in deiner Strukt ablegen und auf die Funktionen zugreifen.
Code:

function a=add(b,c)
a= b+c
 

% handle der Funktion erzeugen
Code:

h = @add
%
% ansprechen über handle
h(1, 2)
 



Sonst kann die Anfragen über FEVAL abarbeiten, also in der Hauptfunktion des M-Files muss man eine FEVAL einfügen.
Code:

function varargout = main(varargin)

if (nargout)
   [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
else
   varargout{1}=[];
   feval(varargin{:}); % FEVAL switchyard
end
function a= add(b,c)
a= b+c;
 


Code:

a = main('add',2,3)
 


In deinem Fall wäre OOP besser.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2012, 07:52     Titel:
  Antworten mit Zitat      
danke für die Antwort.

also ich nehme an das dein Beispiel:
________________________________________________________
Code:
function varargout = main(varargin)

if (nargout)
   [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
else
   varargout{1}=[];
   feval(varargin{:}); % FEVAL switchyard
end

function a= add(b,c)
a= b+c;

________________________________________________________

... ist nicht das m-File der GUI, sondern würde sag ich mal aus meiner Skizze die Funktionen:
- create_tabmenu.m
- create_objects.m
- function listtyp()
unter einen Hutbringen in der Art:

Code:

function varargout = main(varargin)
   if (nargout)
      [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
   else
      varargout{1}=[];
      feval(varargin{:}); % FEVAL switchyard
   end
end % selbst dazu getan

function create_tabmenu(...)
   ...
end

function create_objects(...)
   ...
   
   % Listbox für den Typ erstellen
   objects_rec.typ(1,tab_nr)=uicontrol(...
       'Parent',tabhandle,...
       'Style','popup',...
       'Units','pixels',...
       'Position',[x1 643 195 22],...
       'String',sprachen.(['typ_rec' num2str(tab_nr)]).(last_lang),...
       'BackgroundColor','white',...
       'ForegroundColor','red',...
       'FontWeight','bold',...
       'Callback',{@listtyp,handles});
   
   ...
end

function listtyp(...)
   ...
end
 


das GUI m-File

Code:
function varargout = Coil_Creator(varargin)
% COIL_CREATOR MATLAB code for Coil_Creator.fig

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Coil_Creator_OpeningFcn, ...
                   'gui_OutputFcn',  @Coil_Creator_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end


function handles = receiverpopup_Callback(hObject, eventdata, handles)
% hObject    handle to receiverpopup (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns receiverpopup contents as cell array
%        contents{get(hObject,'Value')} returns selected item from receiverpopup

% Funktion, um Tabmenü zu erstellen
handles = main('create_tabmenu',anz_tabs, panelhandle, handles);

guidata(hObject, handles)


so würde ich dann aus dem GUI auch auf listtyp zugreifen können, stimmts?

dann hätte ich ja sowas wie eine funktionsbibliothek,
oder sehe ich das falsch?
und mit OOP meinst objektorientierte Programmierung. wie sieht das denn (einfaches Beispiel) in matlab aus? ich hatte mal im studium java gehabt, aber das fand ich irgendwie kacke xD. bin dafür aber noch offen.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2012, 09:28     Titel:
  Antworten mit Zitat      
ich habe das jetzt mal getestet. in einem beispiel und ich muss schon sagen, ich finde es hammer. danke für die idee, sie ist simpel und genial Very Happy
 
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.