Kurzfristige Änderungen eines SpinGG übergehen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Kurzfristige Änderungen eines SpinGG übergehen

Beitrag von dibro »

Hallöchen,
ich hab schon wieder ein Problemchen.
Ich hab ein Prog in dem man mit einem SpinGG verschiedene Werte einstellen kann. Einige davon sind unzulässig. Dann soll der MsGReq erscheinen. soweit alles klar. Aber wenn der Anwender schnell über die unzulässigen Werte hinweg"Spint", soll nichts passieren, damit man nicht dauernd ok klicken muss.

Ich hab das Prob mal in ein Beispiel vereinfachtes Beispiel gefasst.
Hab auch schon mal was mit 'nem Thread versucht, hat aber nicht geklappt.

Code: Alles auswählen

;
Procedure Test() 

a = Val(GetGadgetText(5))
b = Val(GetGadgetText(6))
c = GetGadgetState(1)
b = a/c
d = b * c
SetGadgetText(7,Str(d))
If d <> a
  MessageRequester("", "ungeeignete Kombination")
EndIf
EndProcedure

 
  
If OpenWindow(0, 60, 30, 60,200,"")
  If CreateGadgetList(WindowID(0))
    TextGadget  (0, 5,  10, 25,20,"c= ")
    SpinGadget  (1, 40, 10, 25,20,1,50,#PB_Spin_Numeric)
    TextGadget  (2, 5,  80, 25,20,"a=")
    TextGadget  (3, 5,  110,25,20,"b=")
    TextGadget  (4, 5,  140,25,20,"Res.")
    StringGadget(5, 40, 80, 35,20,"50")
    StringGadget(6, 40, 110,35,20,"5")
    StringGadget(7, 40, 140,35,20,"50")
    SetGadgetState(1,1)
  EndIf 

EndIf    
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select  EventGadget()
        Case 1
          Test()
      EndSelect
    EndIf
  Until   EventID = #PB_Event_CloseWindow
End 
Wer kann mir da helfen?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Zugegeben ich kapier nicht ganz was du willst.
Kannst du das bitte nochmal genau erklären? :D
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Kurzfristige Änderungen eines SpinGG übergehen

Beitrag von Kiffi »

Code: Alles auswählen

MessageRequester("", "ungeeignete Kombination")
ich würde aus Gründen der Anwenderfreundlichkeit keinen
MessageRequester aufploppen lassen, sondern unter dem SpinGadget ein
kleines TextGadget in roter Farbe positionieren, das dann sichtbar wird, wenn
eine ungeeignete Kombination ausgewählt wurde. Zusätzlich würde ich dann
einen evtl. vorhandenen OK- oder Übernehmen-Button disablen.

Grüße ... Kiffi
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

grundsätzlich hat kiffi da recht, kein MSG-req wenn nicht unbedingt nötig.

zusätzlich könntest du das einstellen von ungültigen werten generell verhindern,
wenn du ein Array anlegst, das die gültigen werte enthält, und nur durch diese spinnen lässt.
natürlich müsstest du dann im falle einer tastatureingabe den nächsten möglichen gültigen wert ermitteln und anzeigen,
damit wärst du aber besser, als die werteeingabe im standard-color-requester von MS,
wo du die anweichenden werte bei direkteingabe von farbe/intensität/helligkeit erst bei erneutem aufruf angezeigt bekommst...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Der Vorschlag von Kiffi wäre eine Lösung.
Allerdings hatte ich mir zunächst was mit 'nem Thread vorgestellt, in dem ein Timer läuft und der MsGReq erst nach dieser Zeit erscheint, wenn der Spin auf der Stellung stehen geblieben ist.
Das mit einem Array mit vordefiniereten Werten lässt sich nicht verwenden, da da noch ein paar andere Größen mitspielen, ist etwas komplexer als das Beispiel. Werde wohl die Lösung mit dem Warntext machen, der beim Überspinnen ja dann wieder verschwindet.
Danke. :allright:
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hallo dibro,

also das mit dem eigene Thread nur für den Timer ist ein bischen wie mit Kanonen auf Spatzen zu schießen.

So eine Timergeschichte lässt sich auch einfach so lösen:

Code: Alles auswählen

Global OutOfRange, DelayTimer

Procedure Test() 

a = Val(GetGadgetText(5)) 
b = Val(GetGadgetText(6)) 
c = GetGadgetState(1) 
b = a/c 
d = b * c 
SetGadgetText(7,Str(d)) 
If d <> a 
	If Not OutOfRange : DelayTimer = ElapsedMilliseconds()+1000 : EndIf
	OutOfRange = 1
Else
	OutOfRange = 0
EndIf 
EndProcedure 

  
  
If OpenWindow(0, 60, 30, 60,200,"") 
  If CreateGadgetList(WindowID(0)) 
    TextGadget  (0, 5,  10, 25,20,"c= ") 
    SpinGadget  (1, 40, 10, 25,20,1,50,#PB_Spin_Numeric) 
    TextGadget  (2, 5,  80, 25,20,"a=") 
    TextGadget  (3, 5,  110,25,20,"b=") 
    TextGadget  (4, 5,  140,25,20,"Res.") 
    StringGadget(5, 40, 80, 35,20,"50") 
    StringGadget(6, 40, 110,35,20,"5") 
    StringGadget(7, 40, 140,35,20,"50") 
    SetGadgetState(1,1) 
  EndIf 

EndIf    
  Repeat 
    EventID = WindowEvent() 
    If EventID = #PB_Event_Gadget 
      Select  EventGadget() 
        Case 1 
          Test() 
      EndSelect 
    EndIf
    If OutOfRange And ElapsedMilliseconds() > DelayTimer
		 MessageRequester("", "ungeeignete Kombination")
		 OutOfRange = 0
    EndIf
    Delay(10)
  Until   EventID = #PB_Event_CloseWindow 
End 
Generell würde ich aber auch zu der Lösung von Kiffi tendieren, da der User hierdurch eine direktere, unterbrechungsfreie und dadurch auch intuitivere Rückmeldung bekommt.

Grüße, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Danke PureLust
Ich hab in der Zwischenzeit die Lösung von Kiffi auch schon implementiert.
Bin ich als Anfänger nicht von alleine drauf gekommen. Man denkt ja manchmal zu kompliziert um die Ecke.
Deinen Vorschlag habe ich mir direkt mal kopiert. man weiß ja nie, wann man so etwas braucht. :allright:
Gruß aus Solingen, PB 6.0 Win 10 Pro
Antworten