Problem mit SpinGadGet

Anfängerfragen zum Programmieren mit PureBasic.
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Problem mit SpinGadGet

Beitrag 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....
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

poste doch mal ein stück von deinem source, wir (ich) können uns das nur schwer vorstellen :allright:
-.-"
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag 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
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

mist, der oben war ein paar sekunden schneller :cry: :lol:
-.-"
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag von Jürgen »

@ Green Snake

Aber gegen den Cursor hat "DER" (Batze) noch nichts geschrieben, da kannst Du noch der Schnellste sein..... :allright: :)
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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:
-.-"
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag 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...
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag 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...
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag 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
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Antworten