Verfasst am: 15.10.2009, 23:01
Titel: Callbacks von mehreren Objekten zusammenfassen
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
An alle die sich evtl. den Kopf zerbrochen haben. Vielen Dank
Grüße
Einstellungen und Berechtigungen
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
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.