Seite 1 von 1

Gadgets verwenden

Verfasst: 22.10.2005 17:37
von PB42
Hallo,

ich übe heute zum ersten Mal den Einsatz von Gadgets. Mein Code sieht bisher so aus:

Code: Alles auswählen

OpenWindow(0,300,300,500,250,#PB_Window_SystemMenu|#PB_Window_screencentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"") And CreateGadgetList(WindowID(0))

arial=LoadFont(#PB_any, "Arial", 15, #PB_Font_Highquality)

x = Random(10) + 1
y = Random(10) + 1

z = x + y

StringGadget(1,180,80,50,30,"")
ButtonGadget(2,240,80,50,30,"OK")
SetGadgetState(1,2)
ActivateGadget(1)

StartDrawing(WindowOutput())
FrontColor(0,0,200)
DrawingMode(1)
Locate(50,10)
DrawingFont(UseFont(arial))
DrawText("")

Locate(50, 80)
DrawText(Str(x) + "   +   " + Str(y) + "   = ")
StopDrawing()

Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_EventCloseWindow
Das Ergebnis der Rechenaufgabe soll eingetragen und hinterher auf richtig oder falsch geprüft werden. Wie erreiche ich nun, daß die eingegebene Lösung mit OK weiterverarbeitet wird? Wenn mir das einmal gezeigt wird, müßte ich das hoffentlich verstanden haben. Danke!

PB42

Verfasst: 22.10.2005 17:50
von Kiffi
ändere mal die Repeat-Schleife wie folgt ab:

Code: Alles auswählen

Repeat
  
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
  
  Select EventID
    
    Case #PB_Event_Gadget
      
      Select GadgetID
        
        Case 2 ; Dein OK-Button
          
          If Val(GetGadgetText(1))=x+y
            MessageRequester("", "Richtisch!")
          Else
            MessageRequester("", "Möööp!")
          EndIf
          
      EndSelect
      
  EndSelect
  
Until EventID = #PB_EventCloseWindow
Grüße ... Kiffi

Verfasst: 22.10.2005 17:59
von PB42
Das klappt! :) Auf sowas wie

Code: Alles auswählen

Case #PB_Event_Gadget 
wäre ich nie gekommen, weil ich bisher immer davon ausging, daß Case nur mit Zahlen belegt wird, also Case 1, Case 2 usw. Ohne Forum könnte ich PB voll einpacken. Vielen Dank Kiffi!

PB42

Verfasst: 22.10.2005 18:13
von ts-soft
Case funktioniert mit allen Werten, mit denen Du z.B. auch bei If vergleichen kannst, also auch mit Strings

Case "ja"

Verfasst: 22.10.2005 19:37
von Kiffi
Hallo PB42,

hier noch'n kleiner Hinweis: Verwende für die Gadgets, die Du in Deinem
Projekt einsetzt, aussagekräftige Konstantennamen.

Am wenigsten Probleme gibt es, wenn Du eine Enumeration dafür
verwendest

Code: Alles auswählen

Enumeration
  #frmMain
  #txtEingabe
  #cmdOK
EndEnumeration
Die Enumeration sorgt dafür, dass die darin stehenden Konstanten
automatisch durchnumeriert werden.

Somit würde dann Dein Code wie folgt aussehen:

Code: Alles auswählen

Enumeration
  #frmMain
  #txtEingabe
  #cmdOK
EndEnumeration

OpenWindow(#frmMain,300,300,500,250,#PB_Window_SystemMenu|#PB_Window_screencentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"") And CreateGadgetList(WindowID(#frmMain))

arial=LoadFont(#PB_any, "Arial", 15, #PB_Font_Highquality)

x = Random(10) + 1
y = Random(10) + 1

z = x + y

StringGadget(#txtEingabe,180,80,50,30,"")
ButtonGadget(#cmdOK,240,80,50,30,"OK")

StartDrawing(WindowOutput())
FrontColor(0,0,200)
DrawingMode(1)
Locate(50,10)
DrawingFont(UseFont(arial))
DrawText("")

Locate(50, 80)
DrawText(Str(x) + "   +   " + Str(y) + "   = ")
StopDrawing()

Repeat
 
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
 
  Select EventID
   
    Case #PB_Event_Gadget
     
      Select GadgetID
       
        Case #cmdOK ; Dein OK-Button
         
          If Val(GetGadgetText(#txtEingabe))=x+y
            MessageRequester("", "Richtisch!")
          Else
            MessageRequester("", "Möööp!")
          EndIf
         
      EndSelect
     
  EndSelect
 
Until EventID = #PB_EventCloseWindow
Du siehst: Dadurch wird das Programmieren ein wenig übersichtlicher.
Gerade wenn Du viele Gadgets verwendest, wirst Du ansonsten
irgendwann nicht mehr durchblicken, was Gadget 32 oder Gadget 89 ist.

Nur so'n kleiner Tipp...

Grüße ... Kiffi

Verfasst: 22.10.2005 20:11
von PB42
Auch interessant, Danke, aber ehe ich mit mehr Gadgets arbeite, stellen sich mir erstmal ganz viele andere Fragen.

1) Z.B. steht unten in der Schleife

Code: Alles auswählen

Until EventID = #PB_Eventclosewindow
aber wenn man die Schleife mit Eingaben wie

Code: Alles auswählen

IF EventID = #PB_key_F1
bereichern will, klappt das Null.

PB42

Verfasst: 23.10.2005 01:09
von Kiffi
PB42 hat geschrieben:aber wenn man die Schleife mit Eingaben wie

Code: Alles auswählen

IF EventID = #PB_key_F1
bereichern will, klappt das Null.
das ist verständlich, denn wenn man mal in die Online-Hilfe schaut, dann
gibt's nur folgende Ereignisse, auf die (Wait)WindowEvent reagiert:
#PB_Event_Menu : ein Menü wurde ausgewählt
#PB_Event_Gadget : ein Gadget wurde gedrückt
#PB_Event_CloseWindow : das Schließgadget vom Fenster wurde gedrückt
#PB_Event_Repaint : der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen)
#PB_Event_SizeWindow : das Fenster wurde in der Größe verändert
#PB_Event_MoveWindow : das Fenster wurde verschoben
#PB_Event_ActivateWindow : das Fenster wurde aktiviert (hat den Fokus erhalten)
Um Tastaturabfragen zu machen, gehst Du wie folgt vor:

Code: Alles auswählen

Enumeration
  ...
  #mnu_F1
EndEnumeration
 
OpenWindow(...

AddKeyboardShortcut(#frmMain, #PB_Shortcut_F1, #mnu_F1)

Repeat
  
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
  MenuID = MenuID()

  Select Case EventID
    
    Case #PB_Event_Menu
      
      Select MenuID
        
        Case #mnu_F1
          
          ; Here we are!
          
      EndSelect
      
  EndSelect
  
Until ...
Alles weitere findest Du hierzu in der Online-Hilfe.

//Edit:

sorry, Du kannst natürlich auch die Ereignisse "Taste gedrückt"
(#WM_KEYDOWN) und "Taste losgelassen" (#WM_KEYUP) abfragen. Das
sähe dann so aus:

Code: Alles auswählen

Repeat
  
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
  
  Select EventID
    
    Case #WM_KEYUP
      
      Select EventwParam()
        
        Case #VK_F1
          
          ; Here we are
          
      EndSelect
    
    Case #PB_Event_Gadget

      ...

Grüße ... Kiffi

Verfasst: 23.10.2005 02:27
von PB42
Mit event_Menu habe ich mich bisher noch gar nicht beschäftigt, aber trotzdem natürlich vielen Dank für Deine umfangreiche Mühe. Ich probiere das morgen mal aus.

PB42