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

callbacks auslagern

 

ZITO
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2008, 11:48     Titel: callbacks auslagern
  Antworten mit Zitat      
hallo,

ich arbeite gerade an einer komplexen gui die aus mehreren panels und sub-panels besteht.
je nach subpanel (es können auch mehrere subpanels übereinander liegen) besitzen die callbacks für die gui-elemente eindeutige namen. ich habe mich für die version entschieden (unter der verwendung von GUIDE), dass ein *.m-file und ein *.fig-file existiert. durch die komplexität der gui ist das m-file, in der die
callbacks definiert werden sehr lang geworden, obwohl noch keiner der callbacks eine funktionalität besitz. ich würde daher am liebsten eine ordner-struktur machen, in der die callbacks als m-file je nach zugehörigem subpanel geordnet sind (pro callback ein m-file). wie kann ich das realisieren?

gruß zito
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 26.03.2008, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

Du kannst z.B. alle Callbacks eines uipanels in einem m-File namens z.B. 'Callback_uipanel12.m' sammeln (Zusatz entsprechend tag-Bezeichnung des uipanels, muß aber nicht sein). In diesem Callback steht exemplarisch Folgendes:

Code:
function Callback_uipanel12(tag,hObject,eventdata,handles)

switch tag
%% --------------------------------------------------------------
    case 'edFileName'
% Hier steht der auszuführende Code

%% --------------------------------------------------------------
    case 'edPathName'
% Hier steht der auszuführende Code
end


Der entsprechende Callback-Aufruf einer Edit-Box mit dem tag 'edFileName' lautet dann

Code:
Callback_uipanel12('edFileName',gcbo,[],guidata(gcbo))


Dabei wird der String 'edFileName' als tag an die Callback-Routine übergeben und über den switch als entsprechender case erkannt. Dann wird der entsprechende Code ausgeführt.
Ein großer Vorteil dieses Ansatzes ist, daß man alle Callback-Routinen in einem separaten m-File übersichtlich sammeln kann. Man muß natürlich dafür sorgen, daß dieses m-File in einem Ordner liegt, der zur Laufzeit vom Programm gefunden wird! (Der Autor spricht hier aus eigener leidvoller Erfahrung Embarassed )

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
ZITO
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2008, 14:34     Titel:
  Antworten mit Zitat      
hallo tompie,

danke für die schnelle antwort. diese lösung sieht nicht schlecht aus und ich werde sie wahrscheinlich verwenden. ich dachte nur, es wäre eventuell möglich
für jeden callback eine eigene m-file zu erstellen und diese per @funchandle der gui zu übergeben, so dass in der m-file der gui nicht 100 callbacks stehen.


gruß zito
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 27.03.2008, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

man muß ja nicht jedem GUI-Objekt eine separate Callback zuordnen! Man kann z.B. alle edit-Fenster, die die gleiche Funktionalität in ihrer Callback-Funktion haben, zusammenfassend immer denselben Callback-case aufrufen lassen. Da sich normalerweise in einer GUI viele Callback-Funktionalitäten wiederholen, kann das Callback-m-File relativ kompakt bleiben.

Die Tags der uicontrols können ja trotzdem unterschiedlich sein!

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
ZITO
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 08:46     Titel:
  Antworten mit Zitat      
hallo tompie,

vielen dank. so werde ich es machen.

gruß ZITO
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 25.04.2008, 11:21     Titel:
  Antworten mit Zitat      
Hallo zusammen,

mich plagt ein kleines Problem...
Ich bin grad dabei meine gesamten Callbacks auszulagern um von verschiedenen GUIs auf dieselben Callbacks zugreifen zu können.
Hier steht ja auch schon schön, wie man es prinzipiell anstellt, allerdings bekomme ich bei mir den Aufruf mit der zusätzlichen Parameterübergabe nicht hin Sad

Hier ein Beispiel, wie ich auf die Callbacks zugreife:
Code:
p.chebox_sv_hist = uicontrol(huc,'Style','checkbox',...
                              'Tag','sv_hist',...
                              'String','save histogram as *.eps (*)',...
                              'Units','normalized',...
                              'Position',[.0391,.63,.625,.1],...
                              'Callback',@cb_sv_hist);

Es ist mir möglich für jedes Element eine einzelne Callback auszulagern, allerdings bekomme ich es nicht hin, für (bspw.) mehrere checkboxes eine Callback zu schreiben, die dann in Abhängigkeit der Tags die Variablen belegt!?

Kann mir da jemand auf die Sprünge helfen?

Vielen Dank!
Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.