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

Edit-Feld Wert auslesen und Farbe ändern

 

tutui
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2011, 09:29     Titel: Edit-Feld Wert auslesen und Farbe ändern
  Antworten mit Zitat      
Hallo,

ich möchte aus einem edit-Feld einen Wert auslesen und je nach Wert die Hintergrundfarbe des Feldes ändern.

Ich habe folgendes versucht, aber irgend klappt es nicht.


Code:
% --- Executes during object creation, after setting all properties.
function curState_CreateFcn(hObject, eventdata, handles)
% hObject    handle to curState (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

y=str2num(get(handles.curState,'string'));

if y < 200 set(hObject,'BackgroundColor','red');
end


weiß jmd was hier nicht stimmt oder fehlt etwas?
Private Nachricht senden Benutzer-Profile anzeigen


Micha85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2011, 10:16     Titel:
  Antworten mit Zitat      
Hi,

probiers mal so, denke das ist das Problem:
Code:

y = str2num(get(hObject,'string'));
 


Ansonsten bitte immer die Fehlermeldung posten, dann kann besser geholfen werden.
Grüße
Micha
 
tutui
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2011, 10:21     Titel:
  Antworten mit Zitat      
hui!
danke für die schnelle antwort Very Happy

leider funktioniert es noch immer nicht.

Ein direkte Fehlermeldung gibt es gar nicht. Das ganze wird an sich richtig ausgeführt, nur ändert sich die Farbe des Feldes nicht.
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: 13.09.2011, 10:33     Titel:
  Antworten mit Zitat      
Hallo tutui,

Benutze den Debugger. Setze einen Breakpoint auf die Zeile "if y < 200" und schau Dir an, warum die Farbe nicht gesetzt wird.
Genau für solche Zwecke wurde der Debugger geschaffen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2011, 10:33     Titel:
  Antworten mit Zitat      
also entweder ich bin zu doof (was durchaus sein kann, da ich das programm erst vor kurzem kennengelernt habe^^) oder es gibt dort keinen fehler.

ich habe an der stelle y<200 einen breakpoint gesetzt und die matlab-datei durchlaufen lassen. es wird mir aber kein fehler für diese zeile angezeigt bzw. für die damit im zusammenhang stehenden zeilen.
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: 14.09.2011, 10:56     Titel:
  Antworten mit Zitat      
Hallo tutui,

Du hattest ja auch nicht behauptet, dass dort ein Fehler ist. Viel mehr geht es darum, was dort geschieht und wieso die Farbe nicht geändert wird.
Wird "set(hObject,'BackgroundColor','red')" aufgerufen und ist hObject der richtige Handle? Wird die Farbe vielleicht später noch einmal zurückgeändert?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2011, 11:20     Titel:
  Antworten mit Zitat      
ich denke schon, dass hObject der richtige handle ist. zumindest funktioniert es bei anderen befehlen auch.
sorry, wenn ich auf dem schlauch stehe. ich wurde mit dem programm ins kalte wasser geworfen.
woran sehe ich, ob er ausgeführt wird? Embarassed

was mich wundert, aber vlt ist es auch normal, wenn ich bei

Code:
% --- Executes during object creation, after setting all properties.
function curState_CreateFcn(hObject, eventdata, handles)
% hObject    handle to curState (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


die farbe ändere geschieht auch nichts.
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: 14.09.2011, 16:39     Titel:
  Antworten mit Zitat      
Hallo tutui,

Wird die Funktion denn überhaupt aufgerufen? Das setzen eine Breakpoints oder ein einfacher DISP-befehl könnten das sehr schnell klären.
Den Debugger einzusetzen, um Bugs zu finden, ist im Allgemeinen extrem effizient. Dafür ist er ja in MATLAB integriert...

Ist "isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))" denn wahr oder falsch?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 14.09.2011, 18:40     Titel:
  Antworten mit Zitat      
Ist das Absicht, dass dein Vorhaben in der CreateFcn steht? Normalerweise sollten solche Sachen doch in einer Callback-Funktion stehen. Ganz offensichtlich wird deine Funktion nämlich nur beim starten aufgerufen, dort steht noch nichts im Edit-Feld.
Private Nachricht senden Benutzer-Profile anzeigen
 
tutui
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2011, 10:44     Titel:
  Antworten mit Zitat      
das hatte ich auch festgestellt und ins callback geschrieben ^^ ohne erfolg.

ich verstehe es nicht, wenn ich die farbe direkt im inspector ändere, dann ist die farbe zwar in der gui selbst geändert, aber sobald ich sie durchlaufen lasse, wechselt die farbe wieder auf weiß. selbst wenn ich die zeile

if
ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

entferne.

ich hatte an der stelle y<200 einen breakpoint gesetzt.

gestern hielt er dort an (also der grüne pfeil erscheint) und jetzt nicht mehr.
wenn ein fehler vorliegt müsste mir bei dem K>> etwas angezeigt werden, oder?
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: 15.09.2011, 10:59     Titel:
  Antworten mit Zitat      
Hallo tutui,

Wenn ein Syntax-Fehler vorliegen würde, würde Matlab mit einer Fehlermeldung stoppen. Wenn Du aber einen Fehler in der programm-Logik hast, macht das programm einfach nur nicht das, was Du erwartest.

Du kannst den Debugger benutzen um Zeile für Zeile durch Deinen Code zu gehen und so herausfinden, in welcher Zeile die Farben anders gesetzt werden, als Du es wünschst. Das würde nur wenige Minuten dauern und wäre viel effizienter, als hier im Forum zu spekulieren. Irgendwo wird im Programm etwas ausgeführt, was Du anders geplant hast. Du musst also nur diese Stelle finden und ändern.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2011, 11:05     Titel:
  Antworten mit Zitat      
^^ ja, das ist richtig. um ehrlich zu sein, habe ich im netz geschaut, wie ich den debugger genau verwende. dort wurde mir halt nur das mit dem grünen pfeil und dem K>> genannt.

kannst du mir vlt kurz sagen, wie ich den debugger in matlab verwende??
in simulink selbst ist das ja alles kein problem, nur von matlab habe ich keine ahnung Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
tutui
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2011, 11:42     Titel:
  Antworten mit Zitat      
also, ich habe es noch einmal versucht.
er hält bei der folgenden zeile für die str2num funktion an:

Code:
function [STR2NUM_VaR,ok] = protected_conversion(STR2NUM_StR)
% Try to convert the string into a number.  If this fails, return [] and ok=0
% Protects variables in STR2NUM from "variables" in s.

try
    STR2NUM_VaR = eval(STR2NUM_StR);
    ok = true;
catch exception %#ok
    STR2NUM_VaR = [];
    ok = false;
end


der fehler lautet:

Caught-error breakpoint was hit in str2num>protected_conversion at line 80. The error was:

Error using ==> string
Not enough input arguments.

Warning: string is obsolete and will be
discontinued.
Use char instead.

wen ich die "step out" schritte wiederhole, gelange ich zu meiner datei, welche einen event listener auf den simulinkblock setzt, der ausgelesen werden soll.

die datei lautet so:

Code:
function varargout = updategui(varargin)

%create a run time object that can return the value of the gain block's
%output and then put the value in a string.
rto = get_param('HerzfrequenzFehlerPfad2/Num','RuntimeObject');
str = num2str(rto.OutputPort(1).Data);

%get a handle to the GUI's 'current state' window
statestxt = findobj('Tag','curState');

%update the gui
set(statestxt,'string',str);

str = str2num ('string');
if str < 200
    set(hObject,'BackgroundColor','red');
end    


er zeigt dann direkt auf
Code:
str = str2num ('string');


diese if bedingung hat er selbständig hinzugefügt, als ich sie in die matlab.datei geschrieben hatte. (dort verwende ich jedoch kein "str" sondern "y")
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: 15.09.2011, 14:50     Titel:
  Antworten mit Zitat      
Hallo tutui,

Zitat:
Code:
str = str2num ('string');

Was soll das denn bewirken? Matlab soll den String 'String' in eine Zahl umwandeln? Das sollte in der Tat ein Fehler sein.

Zitat:
diese if bedingung hat er selbständig hinzugefügt, als ich sie in die matlab.datei geschrieben hatte. (dort verwende ich jedoch kein "str" sondern "y")

Das verstehe ich nicht. Hat er (Matlab?) die Bedingung hinzugefügt, oder hast Du sie geschrieben. Wo verwendest Du y?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2011, 09:31     Titel:
  Antworten mit Zitat      
hi,

in der matlab-datei verwende ich "y" und in der updategui.m - datei (welche dem editfeld den ausgabewert des simulink-blocks zuweist) hat matlab, nachdem ich den die zeilen mit y=str2num... eingefügt hatte, die befehle str=str2num... und folgende selbstständig eingefügt.


wenn aber zuvor festgelegt wurde "set(statestxt,'string',str);"
warum sollte dann der befehl str2num('string') falsch sein?
ich dachte 'string' ist der wert des blocks gemeint, der ständig aktualisiert wird.
oder versteh ich das jetzt falsch??
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.