Hallo,
ich hoffe eine triviale Frage.
wie kann ich meinem True/False Knopf beibringen das er nachdme er gedrückt wurde IMMER wieder in seinen Ursprungs-Status bzw Optik zurückspringt ?
Im Moment ist es so, dass ich einen Knopf drücke, die Aktion getätigt wird, aber der Knopf dann quasi bis zum nächsten Kontakt als gedrückt visualisiert wird.
Mit freundlichen Grüßen
fidel
Rechtsklick->Mechanikal Action->Latch When Released
Hallo eugen,
exakt diese Einstellung habe ich bereits.
jedoch ist noch dem drücken trotz gleicher Farbfahl bei aktiv/passiv immer noch minimal zu sehen, dass der Knopf zuvor gedrückt wurde.
gruss
fidel
' schrieb:Rechtsklick->Mechanikal Action->Latch When Released
<div align="left">Nachtrag zu Eugens Beitrag:
Damit Latch when Released funktioniert, darf man keine lokale Variable des Buttons anlegen! Ansonsten geht die Einstellung wieder automatisch auf Switch...
MfG, Jens</div>
' schrieb:<div align="left">Nachtrag zu Eugens Beitrag:
Damit Latch when Released funktioniert, darf man keine lokale Variable des Buttons anlegen! Ansonsten geht die Einstellung wieder automatisch auf Switch...
MfG, Jens</div>
Das ist nicht ganz richtig, bei Booleans mit Latch kann man gar keine lokale Variabelen anlegen, das Programm lässt sich dann nicht mehr ausführen.
Zu dem Darstellungsproblem:
LV ändert die Darstellung erst wenn das Control im Diagram abgefragt wird. Wie häufig liesst Du das Control den ein? Eine Änderung wird man ja immer sehen, man braucht ja eine Rückmeldung das der Button gedruckt wurde. Du kannst allerdings noch bei dem Property Colors(4) alles auf einer Farbe setzen um die dunkle Grautöne beim umschalten auszublenden.
Gruß
VDB
Also es gibt 2 Möglichkeiten, daß der Knopf von selbst wieder herausspringt:
1.) Latch-Verhalten: Der Knopf springt heraus, wenn er vom Programm abgefragt wurde, was sicherstellt, daß die Aktion auch ausgeführt wird. Zu Bevorzugen ist "Latch beim loslassen". Denn wenn Du "Latch beim Drücken" auswählst, dann funktioniert das zwar auch, aber wenn der Schalter bereits in der gleichen Millisekunde abgefragt wird, in der er gedrückt würde, dann denkt der Bediener: "Dieser Scheißknopp lässt sich ja gar nicht drücken" (oder so was in der Art).
2.) "Bis zum Loslassen schalten" Funktioniert genau wie ein Klingelknopf und ist vermutlich das was Du willst. Ist aber nicht sehr zu empfehlen, denn falls der Schalter während des Drücken noch nicht abgefragt wurde, dann passiert überhaupt nichts, und wenn er zu lange gedrückt wurde, dann wird er u.U. mehrfach als "true" abgefragt, was auch fatale Folgen haben kann.
Was man auch noch beachten sollte für eine Latch-Funktion, ist, dass im Blockdiagramm das Control vom Schalter INNERHALB der Endlosschleife liegen muss. Irgendwo, aber drin.
Weil sonst springt der Zustand nicht zurück, da der Schalter einmal abgearbeitet wurde und fertig.
' schrieb:Was man auch noch beachten sollte für eine Latch-Funktion, ist, dass im Blockdiagramm das Control vom Schalter INNERHALB der Endlosschleife liegen muss. Irgendwo, aber drin.
Weil sonst springt der Zustand nicht zurück, da der Schalter einmal abgearbeitet wurde und fertig.
<div align="left">Da kann ich Dir nur bedingt zustimmen. Der Schalter springt doch nach der ersten Abfrage bereits zurück. Und wenn er außerhalb von einer Endlosschleife liegt, dann springt er nicht nur nicht zurück, sondern er hat überhaupt Null Wirkung, da er von Programm nicht abgefragt wird. (Ja, man könnte den Schalter außerhalb der Schleife platzieren und innerhalb der Schleife über lokale Variablen abfragen - dann macht Deine Warnung einen Sinn, aber wozu sollte man das so machen?)
Du hast aber ganz und gar recht, wenn es um Ereignisstrukturen geht - und sicherlich meintest Du das. Dort hat man das Problem, daß das Ereignis bei der Bedienung eintritt, der Schalter also funktioniert, ohne daß der Schalter dazu abgefragt werden muß. Es besteht dann die Möglichkeit, daß man den Schalter, der ja gar keinen Anschluß mehr braucht, irgendwo weit weg von Tatort platziert. Das funktioniert dann zwar immer noch, aber der Schalter setzt sich nicht mehr von selbst zurück - dazu ist eine Abfrage erforderlich. Um das zu erreichen, sollte er in dem betreffenden Ereigniscase platziert sein, oder wenigstens in der Schleife mit der Ereignisstruktur.</div>
' schrieb:Ja, man könnte den Schalter außerhalb der Schleife platzieren und innerhalb der Schleife über lokale Variablen abfragen - dann macht Deine Warnung einen Sinn, aber wozu sollte man das so machen?
Ich hatte diesen Fehler in meiner Anfängerzeit häufiger gemacht, weil ich die Controls in einem ersten Frame immer initialisiert hatte und dann nur mit lokalen Variablen in der Endlosschleife gearbeitet habe.
Bis ich auch mal einen Button hatte, der ums Verrecken nicht wieder zurückspringen wollte.
Seither programmiere ich das anders und es funktioniert auch.
Aus diesem Grund wollte ich es lieber mal erwähnt haben, da erfahrene Programmierer an solche Dinge oft gar nicht mehr denken, weil man sowas ja eh nicht tut.