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

tiefergehendes Callbackverständnis

 

apn ftw
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.09.10
Wohnort: Kassel / Wolfsburg
Version: R2008b
     Beitrag Verfasst am: 29.09.2010, 10:38     Titel: tiefergehendes Callbackverständnis
  Antworten mit Zitat      
Hallo Leute!

folgender Code
Code:

for i=1:5                                                      
    f.paramText(i)=uicontrol('Units','pixels',...
                             'Style','checkbox',...
                             'String',feldnamen{i},...
                             'Tag',['Checkbox',feldnamen{i}],...
                             'Position',[10 700-(i-1)*19 130 18],...
                             'Value',1);
   
end

erstellt mir 5 Checkboxen
mit
Code:

for i=1:5
    set(f.paramText(i),'Callback',{@chkBoxChange,f,struktur});
end
 

setze ich den Callback.
soweit so gut.

Meine Callbackfunktion sieht nun so aus, dass sie die Standardeingänge, so wie f und struktur bekommt.
Nun habe ich festgestellt, dass das f genauso an die Funktion übergeben wird, wie es an der Stelle aussieht, an der auch der set-Befehl im Code steht. Macht ja auch Sinn. Der Callback löscht jetzt einen bestimmten Wert aus f (ein struct) und schreibt einen Neuen rein.
Wenn ich den Callback jetz aber ein zweites mal ausführe, weiß er ja nicht, dass was passiert ist mit dem f und schreit bei dem delete-Befehl rum, das ginge ginge ja gar nicht, was ich da vor hab Smile

Frage 1: wie krieg ich ihn dazu, das neue f zu übernehmen?

ich hatte überlegt, das mit nem assignin zu machen, aber weiß nicht genau wie. oder eben mit nem zusätzlichen Output für den Callback à la
Code:

Frage 2: wie komm ich an den Output nun ran, denn es gibt ja keinen eigentlichen Funktionsaufruf? Wo ist das f hin, im Matlab-Nirvana? oder muss ich ihm in dem set-Befehl doch noch einen Output beibringen?

Hoffe ihr wisst mehr als ich, und seid bereit, Euer Wissen zu teilen

Gruß, apn
_________________

dödeldödeldödeldöpdöp dödeldöpdöp dödel döp döp döp
are you okay, you're okay, you're okay, annie?
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: 29.09.2010, 11:33     Titel: Re: tiefergehendes Callbackverständnis
  Antworten mit Zitat      
Hallo apn ftw,

Code:

%for i=1:5
%   set(f.paramText(i),'Callback',{@chkBoxChange,f,struktur});
%end
% Einfacher:
set(f.paramText(1:5), 'Callback', {@chkBoxChange,f,struktur});
 


Zitat:
Der Callback löscht jetzt einen bestimmten Wert aus f (ein struct) und schreibt einen Neuen rein.

Dann kannst Du den Struct nicht als Input übergeben. Eine andere Idee wäre z.B.:
Code:

FigH = figure;
% Erzeuge f.
setappdata(FigH, 'f', f);

set(f.paramText(1:5), 'Callback', {@chkBoxChange, struktur});
...

function chkBoxChange(ObjH, EventData, struktur)
  FigH = ancestor(ObjH, 'figure');  % Oder GCBF
  f = getappdata(FigH, 'f');
  f.neuesFeld = rand(10);
  setappdata(FigH, 'f', f);
return;
 

Ausserdem könntest Du f noch als UserData im Figure-Object speichern. Das kommt fast auf's selbe raus.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.09.10
Wohnort: Kassel / Wolfsburg
Version: R2008b
     Beitrag Verfasst am: 29.09.2010, 12:44     Titel: Re: tiefergehendes Callbackverständnis
  Antworten mit Zitat      
Hiho
Jan S hat Folgendes geschrieben:

Dann kannst Du den Struct nicht als Input übergeben.

sorry, aber doch Smile. der Teil funktioniert schon so wie er soll, die Callbacks funktioniert an sich schon mal, und es haben auch alle 5 Butons die selbe Callbackfunktion.
Zitat:
Ausserdem könntest Du f noch als UserData im Figure-Object speichern


wie geht das? und merkt der sich das geänderte f, wenn ich den Callback dann nochmal aufrufe?

Schon mal danke für die Antwort Wink

Gruß, apn
_________________

dödeldödeldödeldöpdöp dödeldöpdöp dödel döp döp döp
are you okay, you're okay, you're okay, annie?
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: 29.09.2010, 17:20     Titel: Re: tiefergehendes Callbackverständnis
  Antworten mit Zitat      
Hallo apn ftw,
Zitat:
Jan S hat Folgendes geschrieben:

Dann kannst Du den Struct nicht als Input übergeben.
sorry, aber doch :). der Teil funktioniert schon so wie er soll, die Callbacks funktioniert an sich schon mal, und es haben auch alle 5 Butons die selbe Callbackfunktion.

Wenn Du "{@chkBoxChange,f,struktur}" als Callback verwendest, wird f bei jedem Callback-Aufruf identisch sein und Du kannst f dann nicht für folgende Callback-Aufrufe ändern.
Wenn Du aber sagst, dass Du f gerne ändern möchtest, kannst Du es offensichtlich nicht statisch in die Callbacks packen.

Zitat:
Ausserdem könntest Du f noch als UserData im Figure-Object speichern

Ich habe es mit SETAPPDATA bereits gezeigt: Man schreibt einmal f in eine Variable, die im GUI gespeichert ist. Dann holt sich jeder Callback diese Variable von der Figure, ändert sie und schreibt sie wieder zurück.
Das geht entweder mit SETAPPDATA(FigH, 'f', f) oder mit set(FigH, 'UserData', f).

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.09.10
Wohnort: Kassel / Wolfsburg
Version: R2008b
     Beitrag Verfasst am: 30.09.2010, 07:58     Titel:
  Antworten mit Zitat      
habs jetzt ganz originell gemacht:
den Wert von f, der geändert wird, wird beim erstellen (ist ein handle) in das UserData-Feld des ersten Buttons geschrieben

[/code]set(f.paramText(1),'UserData',spider_handle);
Code:


Quasi eine globale Variable draus gemacht. Ist das das was Du meinstest, Jan?

Danke auf jeden Fall für deine Mühe

Gruß, apn

_________________

dödeldödeldödeldöpdöp dödeldöpdöp dödel döp döp döp
are you okay, you're okay, you're okay, annie?
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: 30.09.2010, 20:00     Titel:
  Antworten mit Zitat      
Hallo apn ftw,

Zitat:

Code:
set(f.paramText(1),'UserData',spider_handle);

Quasi eine globale Variable draus gemacht. Ist das das was Du meinstest, Jan?

Nein! Ich meine: ja! Du hast eben gerade keine "globale" Variable daraus gemacht, sondern eine lokale. Sie ist sogar sehr genau lokalisiert und das auch an einem Platz, wo man sie auch suchen würde. Daten, die ein Benutzer-Programm bei der Ausfürhrung eines Button-Callbacks braucht --- das ist praktisch die wörtliche Übersetzungen von:
Code:
set(ButtonHandle, 'UserData', X)


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.09.10
Wohnort: Kassel / Wolfsburg
Version: R2008b
     Beitrag Verfasst am: 04.10.2010, 07:08     Titel:
  Antworten mit Zitat      
das gleiche gemeint, aber nicht gewusst Smile

Danke trotzdem auf jeden Fall!
_________________

dödeldödeldödeldöpdöp dödeldöpdöp dödel döp döp döp
are you okay, you're okay, you're okay, annie?
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 - 2025 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.