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 von mehreren Objekten zusammenfassen

 

georgbauer
Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2009, 23:01     Titel: Callbacks von mehreren Objekten zusammenfassen
  Antworten mit Zitat      
Hi,

ich habe mehrere Objekte dessen Callbackfunktionen zusammengefasst werden sollen. Ich hab z.B. ein Slider und 3 Editfelder. Ein Editfeld soll das Maximum, eins das Minimum und eins den aktuellen Wert des Sliders angeben. Also man kann sagen diese vier Objekte sollen miteinander verknüpft werden. Wenn man das Maximum ändert soll sich die Sliderbar dementsprechend verwandeln. Wenn man den Slider bzw den Wert verändert soll analog dazu Wert bzw Slider verändert werden.

Ich habs das hinbekommen, dass ich das alles in eine Callbackfunktion bekomme. Es funktioniert alles einwandfrei:
Code:

% %
% Testfunktion: Gemeinsame Callbackfunktion für Slider und Editfelder
% %
function [] = SliderGroup_Callback(varargin)
% Handle und Struktur aufrufen
[handles, structure] = varargin{[1, 3]};

% Sliderinformationen lokal ablegen
sliderInfo = get(structure.slider,{'min','value','max'});
% Eingabewert zu Zahl machen und lokal ablegen
sliderGroupInput = str2double(get(handles, 'string'));

% Fallunterscheidung nach Eingabeort (Minimun, Maximun, Wert oder Slider)
switch handles
    % Minimumeingabe
    case structure.editminimum
        % Eingabewert kleiner gleich dem aktuellen Wert, dann übernehme
        % Eingabe
        if sliderGroupInput <= sliderInfo{2}
            set(structure.slider, 'min', sliderGroupInput)
        % Ist der Eingabewert zwischen dem aktuellen Wert und dem Maximum,
        % dann übernehme Eingabe als Minimum und als aktuellen Wert
        elseif sliderGroupInput < sliderInfo{3}
            set(structure.slider, 'val', sliderGroupInput, 'min', sliderGroupInput)
            set(structure.editvalue, 'string', sliderGroupInput)
        % Ist der Eingabewert kleiner gleich dem Maximun, so nehme den
        % alten Minimalwert
        else
            set(handles, 'string', sliderInfo{1})
        end
    % Werteingabe
    case structure.editvalue
        % Eingabewert zwischen Maximum und Minimum, dann setze Wert
        if sliderGroupInput >= sliderInfo{1} && sliderGroupInput <= sliderInfo{3}
            set(structure.slider, 'value', sliderGroupInput)
        % Liegt der Eingabewert außerhalb des zulässigen Bereichs, so
        % nehme den alten Wert
        else
            set(handles, 'string', sliderInfo{2})
        end
    % Maximalwerteingabe
    case structure.editmaximum
        % Eingabe ist größer gleich dem aktuellen Wert, dann übernehme
        % Eingabe
        if sliderGroupInput >= sliderInfo{2}
            set(structure.slider, 'max', sliderGroupInput)
        % Ist der Eingabewert zwischen dem aktuellen Wert und dem Minimum,
        % dann übernehme Eingabe als Maximum und als aktuellen Wert
        elseif sliderGroupInput > sliderInfo{1}
            set(structure.slider, 'val', sliderGroupInput, 'max', sliderGroupInput)
            set(structure.editvalue, 'string', sliderGroupInput)
        % Ist der Eingabewert kleiner gleich dem Minimun, so nehme den
        % alten Maximalwert
        else
            set(handles, 'string', sliderInfo{3})
        end
    % Sliderwerteingabe
    case structure.slider
        % Wert über Sliderauswahl setzen
        set(structure.editvalue, 'string', sliderInfo{2})
    otherwise
        % Sollte eigentlich nicht aufgerufen werden
        display('Callbackfunktion der Slidergruppe wurde fehlerhaft aufgerufen!');
end
 


Zur Information, die Editfelder heißen editvalue, editmaximum und editminimum und der Slider heißt slider. Ich hab in den Objekteigenschaften bei jedem der 4 Objekte jeweils die Funktion "SliderGroup_Callback(varargin)" als Callback angegeben.

Jetzt wurde ich gern das so machen, da ich mehrere von den Objektgruppen habe eine eigene Funktion haben, der ich die Namen der Objekte übergebe. Denn aktuell ist es ja so, dass ich in allen Objekten die jeweilige Callback angeben muss und und in der Funktion muss ich ja auch die Objekttags anpassen. Ich hätte das gern n bisschen programmtechnisch schöner...

Kann mir da wer weiterhelfen? Versteht ihr mein Prob? Ich hab noch die komplette datei hochgeladen. Man muss dazusagen, ich hab den GUI Guide genutzt um das ganze zu erstellen. Für so ein kleines Proggy wäre es sicherlich auch anders möglich. Aber normalerweise hab ich GUIs die n wenig größer sind. Drum nehm ich da die komfortable Guide-Variante Wink

Vielen Dank schonmal für eure Antworten

Grüße Georg

Slider_no_function.rar
 Beschreibung:
Slider (no function)

Download
 Dateiname:  Slider_no_function.rar
 Dateigröße:  6.81 KB
 Heruntergeladen:  435 mal
Private Nachricht senden Benutzer-Profile anzeigen


georgbauer
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2009, 16:47     Titel:
  Antworten mit Zitat      
Habs hinbekommen =)

Habe die Funktion so gemacht, dass ich die Namen der beteiligten Objekte der Funtion mitübergebe und dann mit set und get und
Code:
eval(strcat('structure.', slider_tag))
auf die Objektdaten zugreife.

An alle die sich evtl. den Kopf zerbrochen haben. Vielen Dank Wink

Grüße
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.