Verfasst am: 08.05.2015, 09:20
Titel: Hochzählen beim gedrückten Button
Hallo Zusammen,
ich würde gerne in GUI eine funktion schreiben, dass wenn der Button gedrückt bleibt ein zähler startet zu zählen solange bis ich es wieder loslasse. Ich dachte mit ButtonDownFcn wäre es zu realisieren aber damit bekomme ich es nicht hin.
Ich habe auch ein Beispiel gefunden, was aber auch nicht das macht was ich will
% --------------- 8< ------------------------------- function myCallback(ObjH, EventData, Command)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
global i
ifisempty(overobj('uicontrol')) switch Command
case 'up'
set(ButtonH, 'Value', 0);
a = 'stop'
% STOP THE RECORDING... case 'down'
set(ButtonH, 'Value', 1);
% START THE RECORDING...
a = 'start'
Ich will, dass wenn case 'down' erfühlt ist der zähler anfängt zu zählen. aber er läuft nur einmal durch und gibt in dem Fall nur einmal a = 'start' aus.
Das zweite Problem bei dem Beispiel ist, dass sobald man im GUI-Fenster die Maus betätigt die Funktion ausgeführt wird. Das soll auch nicht passieren.
Ist es in MATLAB sowas überhaupt möglich?
Verfasst am: 09.05.2015, 23:23
Titel: Re: Hochzählen beim gedrückten Button
Hallo f_gast,
In welcher Geschwindigkeit soll der der Zähler denn hochgezählt werden? Der Gedanke bringt einen weiter zum TIMER. Wenn die WindowButtonDownFcn den Timer startet, kann die WindowButtonUpFcn ihn wieder stoppen.
welches system. meinst du deinen rechner? je nach schrittweite kannst du da rechnt schnell an die grenzen von double stoßen. da sollte man sich schon gedanken machen. es ist ja nicht sinnvonn das es so schnell hochzählt das einmal clicken und gedrückt halten identisch sind.
_________________
Eine pro sekunde wurde mir ausreichen. Ausserdem ich habe eine min und max wert von -170 bis 170. Das heisst mit dem werte bereich werde ich kein problem haben. Aber du hast recht er soll nicht all so schnell hochzählen.
Es ist ja keine übliche zähler bzw. Timer. Der Wert beschreibt die aktuelle zb. X komponente eines Roboterarms, dh. die position des Armes wird während die taste gedrückt ist auch mit aktualisiert und an dem Roboter weitergegeben. Daher bin mir nicht sicher, ob ein Timer hier ganz zutrifft.
Der Timer kann mit bestimmter Frequenz einen Wert erhöhen und andere Funktionen aufrufen. Wenn der Button gedrückt wird, wird der Timer gestartet und ändert die Werte wie gewünscht. Und das Loslassen der Taste stoppt den Timer wieder.
das Problem bei mir ist, dass der Programm erst nach dem Losslasse der TAste in die Pushbutton-Callback Funktion einspringt. Beim ButtonDownFcn spring er zwar sofort rein aber es passiert mit der rechten Masutaste.
Gibt es eine möglichkeit es mit der linken Tasten hinzubekommen?
Das ist nicht ganz einfach.
Du kannst den eigentlichen Button auf "Enable" = "inactive" setzen und die WindowsButtonDownFcn der Figure so programmieren, dass sie prüft, ob der Klick über dem geüwnschten Button stattgefunden hat.
Wie man einen Timer programmiert erfährt man mit "doc timer".
Danke dir. Das mit enable habe ich auch hinbekommen. Aber ich wusste nicht, dass man eine zustandabfrage mit der windowsButtonDownFcn realisieren kann bzw. in den fall kann.
Werde ich gleich ausprobieren.
Lg
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.