VSLIDER - Wert zuweisen

praetor

Mitglied
Registriert
24.10.04
Beiträge
2.157
Ort
Berlin
Trophäen
{**!!!}**!!!!! !!!!! !!
Hallo. ich steh irgendwie auf dem Schlauch, kann mir ein Skriptverhalten einfach nicht erklären:
Code:
'FFSubmenu=Test
'FFName=Problem

'** Start Dialog Drehen **
FF_AddDialog "Drehen",94,113
FF_AddControl "Drehen","vslide1","VSLIDER",8,3,18,102
FF_AddControl "Drehen","45","BUTTON",53,3,10,10
'** End Dialog Drehen **

Call Main

Sub Main
	do
		Taste = FF_ShowDialog ("Drehen")
		Select Case Taste
			Case "45"
				Winkel1 = CInt(45)
				Msgbox Winkel1
				FF_SetControl "Drehen", "vslide1", Winkel1
				Msgbox FF_GetControl ("Drehen", "vslide1")
			Case "CANCEL"
				FF_CloseDialog "Drehen"			
				exit sub
		End Select
	Loop
End Sub
Nach Druck auf den Button "45" wird dem Slider "vslide1" der Wert 45 zugewiesen. In der nächsten Zeile wird der der Wert sofort wieder abgefragt. Plötzlich beträgt er 210 (also 255 - 45). Aber wieso ??????
Übrigens, weist man den Wert außerhalb der Do-Loop-Schleife zu, ändert er sich nicht.
Hat da jemand eine Idee?
 
Zuletzt bearbeitet:
AW: VSLIDER - Wert zuweisen

Plötzlich beträgt er 210 (also 255 - 45). Aber wieso ??????

Gut dass Du das fragst, sonst hätte ich das irgendwann gemacht.
Meine Vermutung: 1. Zuweisung korrekt, 2. Zuweisung ist nicht vorgesehen, es findet irgendwie ein Überlauf (o.Ä.) statt, der den Wert wieder wie oben berechnet abzieht. Ist bei H-Slider genauso.

Den Dialog neu aufbauen würde das Problem beheben, aber schöner wäre es auch ohne Neubau. :'(

VG
Walter
 
AW: VSLIDER - Wert zuweisen

Hallo Andreas,

hast Du nach FF_SetControl FF_RefreshDialog schon mal probiert?
 
AW: VSLIDER - Wert zuweisen

Hallo Andreas,
Du musst eingeben
Code:
FF_SetControl "Drehen", "vslide1", 255 - Winkel1

Warum das so ist, kann sicher nur Joachim erklären.
 
AW: VSLIDER - Wert zuweisen

Du musst eingeben ...
Hallo Harald,
ja, das ist mir auch aufgegangen nachdem Walter bestätigt hat, dass ich keinem Denkfehler aufgesessen bin. Aber anscheinend gilt das nur unter bestimmten Bedingungen, vielleicht nur, wenn der Dialog gerade angezeigt wird |)

Warum das so ist, kann sicher nur Joachim erklären.
Würde mich brennend interessieren |). Ich halt's schlicht für einen
bug.png
 
AW: VSLIDER - Wert zuweisen

Aber anscheinend gilt das nur unter bestimmten Bedingungen, vielleicht nur, wenn der Dialog gerade angezeigt wird |)

Das glaube ich nicht. Ich kann mich erinnern, dass bei Einführung des V-Sliders die Einstellung von 0 - 255 von oben nach unten erfolgte. Nach dem Hinweis von mir, dass man eigentlich erwartet, dass 0 unten und 255 oben ist, hat Joachim das für die Einstellung geändert. Die Notwendigkeit (255- Wert) einzustellen, wird also ein Relikt aus der Entstehungszeit sein.
 
AW: VSLIDER - Wert zuweisen

Das glaube ich nicht.
Ich schon. Wenn man die Zuweisung außerhalb der Schleife vornimmt, bleibt der Wert erhalten (s. schon das Ausgangsposting).

Code:
'FFSubmenu=Test
'FFName=Problem

'** Start Dialog Drehen **
FF_AddDialog "Drehen",94,113
FF_AddControl "Drehen","vslide1","VSLIDER",8,3,18,102
FF_AddControl "Drehen","45","BUTTON",53,3,10,10
'** End Dialog Drehen **

Call Main

Sub Main
Winkel1 = CInt(45)
Msgbox Winkel1
FF_SetControl "Drehen", "vslide1", Winkel1
	do
		Taste = FF_ShowDialog ("Drehen")
		Select Case Taste
			Case "45"
				Msgbox FF_GetControl ("Drehen", "vslide1")
			Case "CANCEL"
				FF_CloseDialog "Drehen"			
				exit sub
		End Select
	Loop
End Sub
 
AW: VSLIDER - Wert zuweisen

Du hast recht Andreas. Ich bin sehr verblüfft |)
Ich hätte es ausprobieren sollen.
 
AW: VSLIDER - Wert zuweisen

Ich habe deinen letztes Scriptsel mal ausprobiert.
Wo ist denn da das Problem?

In der Schleife ausgeführt wird er auf 210 (255-45) gesetzt.
Vor der Schleife ausgeführt wird er auf 45 (und nicht 210!) gesetzt.

Man kann nun 45 oder 210 streiten, aber gesetzt wird er auch von ausserhalb der Scheife.
 
AW: VSLIDER - Wert zuweisen

Das Problem ist einfach, dass man beim Erstellen des Scriptes aufpassen muß, ob der Wert das erste Mal oder zum wiederholten Mal zugewiesen wird und die Werte unterschiedlich berechnen. Das geht zwar, ist aber nicht glücklich gelöst und verwirrt den Anfänger wie mich.

VG
Walter
 
AW: VSLIDER - Wert zuweisen

Wo ist denn da das Problem?
... aber gesetzt wird er auch von außerhalb der Schleife.
Das Problem ist, dass
  1. sich Befehle von Programmiersprachen im Allgemeinen immer gleich und vorhersehbar verhalten. Dieser tut das nicht.
  2. diese konkrete Besonderheit absolut nicht dokumentiert ist, was m.E. auch logisch ist - it's a bug not a feature
  3. der motivierte Hobbyskripter mit so was nicht rechnet und ewig lang nach Fehlern in den eigenen Gedankengängen sucht. Er wird dann vielleicht frustriert aufgeben ...
Ich versteh nicht, was so schlimm an der Feststellung sein soll, dass sich hier bei der Implementierung ein Fehler eingeschlichen haben könnte.
 
AW: VSLIDER - Wert zuweisen

Diese Gedankenverrenkung bestreite ich ja gar nicht. Im Gegenteil da bin ich deiner Meinung.
Ich hatte dich nur so verstanden das das Setzen des Sliders ausserhalb der Schleife wirkungslos sei.
Also ein weiter Fehler, zusätzlich zum 255-x/ X Problem.
 
AW: VSLIDER - Wert zuweisen

.....wobei ich mir nicht sicher bin, dass Joachim das noch gerade rücken sollte. Schließlich gibts es ja bereits einige Scripte, die diese Problematik berücksichtigen. Die würden dann nach einer Korrektur nur noch fehlerhaft laufen.

Dokumentieren sollte man die nötige Vorgehensweise bei der Scripterstellung aber auf jendem Fall.
 
AW: VSLIDER - Wert zuweisen

Ich hatte dich nur so verstanden das das Setzen des Sliders ausserhalb der Schleife wirkungslos sei.
Alles klar Heinz, ich hätte mich vielleicht auch noch eindeutiger ausdrücken können.

.....wobei ich mir nicht sicher bin, dass Joachim das noch gerade rücken sollte. Schließlich gibts es ja bereits einige Scripte, die diese Problematik berücksichtigen.
Stimmt, hatte ich mir auch schon überlegt. Die alten Skripte laufen dann nicht mehr mit dem aktuellen FF. In neue Skripte müsste man eine Versionsweiche einbauen - auch nicht besser.
Joachim sollte jedoch eindeutig klarstellen, in welchen Situationen das eine oder andere Verhalten zu erwarten ist.
 
Zurück
Oben