Seite 1 von 1

Problem mit SpinGadGet

Verfasst: 19.06.2005 10:40
von Jürgen
Hallo,

ich habe folgendes Problem, vielleicht kann mir jemand helfen:

ich habe ein SpinGadget() erstellt.
über WaitWindowEvent() warte ich bis das entsprechende Ereignis eintritt.
wenn ich den "Spinzähler" betätige und das Event eintritt mache ich folgendes:

Sp3.l = GetGadgetState(#Spin_2)

..... hier weiterverarbeitung von Sp3 .....

SetGadgetText(#Spin_2,RSet(Str(Sp3),4,"0")) ; um sp3 4 stellig anzuzeigen


Nun stört mich folgendes:

Im Spinfenster erscheint ein blinkender Cursor und (ich vermute aus diesem Grund) es wird immer
wieder ein Spin-Ereignis erkannt und WaitWindowEvent() wird immer wieder ausgelöst.

Wie könnte ich das Problem beheben?

Vielen Dank für Eure Hilfen und alles Gute von Jürgen....

Verfasst: 19.06.2005 10:43
von Batze
Hast du mal in der Hilfe geschaut?

Code: Alles auswählen

If OpenWindow(0,0,0,140,70,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"SpinGadget") And CreateGadgetList(WindowID(0))
  SpinGadget     (0,20,20,100,25,0,1000)
  SetGadgetState (0,5) : SetGadgetText(0,"5")   ; Anfangswert festlegen
  Repeat
    Event = WaitWindowEvent()
    If EventGadgetID() = 0
      SetGadgetText(0,Str(GetGadgetState(0)))
      WindowEvent()      ; absolut notwendig, um Endlos-Schleifen zu vermeiden
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Verfasst: 19.06.2005 10:43
von Green Snake
poste doch mal ein stück von deinem source, wir (ich) können uns das nur schwer vorstellen :allright:

Verfasst: 19.06.2005 10:55
von Jürgen
Vielen Dank Batze für die Antwort.
Für Green Snake noch ein Auszug aus dem Code

Code: Alles auswählen

 Repeat
        
            Event3 = WaitWindowEvent()      ; warte bis ein Ereignis eintritt
 
            If Event3 = #PB_EventGadget            
                GadgetID3 = EventGadgetID()      ; GadgetID mit der Ereignisvariablen laden
                 
                Select GadgetID3
                       
                        Case #Button_11            ; Taste Beenden gedrückt ?
                            quit1.w = 1
                            
                          
                         Case     #Spin_2     
                              Sp3.l = GetGadgetState(#Spin_2)
                                                         
 
                    EndSelect
 
            
      Until quit1 = 1

Ich habe wohl das WindowEvent() vergessen, klar....
Aber wenn nun noch der Cursor in dem Fenster wegzubekommen wäre...?

Vielen Dank für die Hilfen

Verfasst: 19.06.2005 11:21
von Green Snake
mist, der oben war ein paar sekunden schneller :cry: :lol:

Verfasst: 19.06.2005 11:28
von Jürgen
@ Green Snake

Aber gegen den Cursor hat "DER" (Batze) noch nichts geschrieben, da kannst Du noch der Schnellste sein..... :allright: :)

Verfasst: 19.06.2005 11:42
von Green Snake
ich glabe das sit standart.
aber was ist so schlimm daran? wenn ein cursor davor steht? /:->
ich denke mann kannn den nur mit mehr oder weniger aufwändigen befehlen "wegzaubern" :lol:
hm...wenn das dir so wichtig ist....ich werde mal suchen.

ps. codearchiev schon durchsucht? :allright:

Verfasst: 19.06.2005 14:31
von Jürgen
Hallo Green Snake,

tja, ist ne schwierige Sache, werde mal noch etwas im Codearchiv suchen, vielleicht finde ich etwas.

Mit dem vorgeschlagenen Code geht es auch nicht!

auch finde ich in der Hilfe zu WaitWindowEvent() bzw. WindowEvent() keinen Hinweis das
WindowEvent() so wichtig wäre.

Wenn ich das Beispielprogramm von Batzke aufrufe funktioniert zwar alles aber mit CallDebugger
kann man schnell feststellen, dass der blinkende Cursor auch ein WindowEvent() erzeugt.
mit Debug event sieht man das im Fenster. Sowie sich im Fenster was ändert, z.b. der Mauszeiger wird
auf dem Fenster bewegt oder eben der Cursor blinkt, ergibt sich ein WindowEvent() !!!

ich habe in meiner Huptschleife 3 SpinGadget() und wähle sie mit Select aus (neben anderen
Gadgets) aber Wenn in einem Spingadget der Cursor blinkt, wird das eben jedesmal als
Event gewertet. Da hilft auch kein Befehl WindowEvent()
Jetzt habe ich ein zusätzliches Spingadget eingerichtet was ich eigentlich nicht benötige,
jedesmal Wenn nun ein entsprechends Spingadget Event auftritt führe ich die Befehle aus und
greife dann auf das zus. Spingadget zurück. Da es dafür keine Case Auswahl werden dann auch
nicht die Befehle für das zuletzt angesprochene Spingadget dauernd ausgeführt.
aber vielleicht geht es auch einfacher.... ??

alles Gute und viel Spass mit PureBasic wünscht Jürgen...

Verfasst: 19.06.2005 18:17
von Jürgen
Bin jetzt auf folgendem Wege....:

Code: Alles auswählen


  If OpenWindow(0,0,0,270,215,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"") And CreateGadgetList(WindowID(0)) 
    
    
    StringGadget(0,10,30,50,20,"111") 
    ButtonGadget(1,65,22,15,15,"+")
    ButtonGadget(2,65,42,15,15,"-")
    
    Repeat 
        
        Event3 = WaitWindowEvent()             ; warte bis ein Ereignis eintritt
        
        If Event3 = #PB_EventGadget            
            GadgetID3 = EventGadgetID()      ; GadgetID mit der Ereignisvariablen laden
            
            Select GadgetID3
                Case 1
                    a.s = GetGadgetText(0)
                    b.l = Val(a)
                    b = b + 1
                    SetGadgetText(0,Str(b))
                    
                Case 2
                    
                    a.s = GetGadgetText(0)
                    b.l = Val(a)
                    b = b - 1
                    SetGadgetText(0,Str(b))
                    
            EndSelect
           
        EndIf
        
        
    Until Event3 = #PB_Event_CloseWindow  Or b > 140
    
EndIf 


vielleicht hat auch jemand ne bessere Idee....

Alles Gute von Jürgen...

Verfasst: 30.07.2005 22:33
von sharkpeter
Hallo Jürgen,

hatte/habe ein ähnliches Problem, schau doch mal hier:
http://www.winbahn.de/Programme/PureBas ... Example.pb

vielleicht hilft es dir.

Gruß Jens