Programm reagiert sporadisch auf Mausklicke

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:shock:

hab ich jetzt irgendwelche ironietags übersehen?

...willst mich wohl auffe schippe nehmen, wa?

-------------------------------------------------------------------

hab ma rumgedaddelt:

Code: Alles auswählen

; OptionGadgets 
; 22.04.2006 
; PB 3.94 
;- Variablen 
Global bool.b 
Global Ereignis 
Global titel$, text$ 
Dim IconFlag(2)
IconFlag(1) = #MB_ICONQUESTION
IconFlag(2) = #MB_ICONINFORMATION

;- Prozeduren 
Procedure Fensteraufbau() 
If OpenWindow(0,0,0,200,135,#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"Meldungsfälscher") 
  If CreateGadgetList(WindowID(0)) 
     StringGadget(0,0,0,200,20,"Titel") 
     StringGadget(1,0,20,200,20,"Text") 
     ButtonGadget(2,0,45,25,20,"Ok") 
     OptionGadget(3,0,65,100,20,"Frage-Symbol") 
     OptionGadget(4,0,85,100,20,"Info-Symbol") 
     OptionGadget(5,0,105,100,20,"Kein Symbol") 
     SetGadgetState(5,1)
  bool = 1 
  EndIf 
EndIf 
EndProcedure 

Procedure Ereignis() 
If bool = 1 
UseWindow(0) 
  Repeat 
  Ereignis = WaitWindowEvent() 
  titel$ = GetGadgetText(0) 
  text$ = GetGadgetText(1) 
  Icon = GetGadgetState(3) + 2*GetGadgetState(4)
    Select Ereignis 
      Case #PB_Event_Gadget 
        If EventGadgetID() = 2 
           MessageRequester(titel$,text$,IconFlag(Icon)) 
        EndIf 
    EndSelect 
  Until Ereignis = #PB_Event_CloseWindow 
  End 
EndIf 
EndProcedure 

Procedure Main() 
Fensteraufbau() 
Ereignis() 
EndProcedure 

;- Code 
Main() 
...hoffentlich hilft es auch...
erklärung hierzu:

Code: Alles auswählen

Dim IconFlag(2)
IconFlag(1) = #MB_ICONQUESTION
IconFlag(2) = #MB_ICONINFORMATION
hier lege ich die beiden constanten für die Icons in einem array ab.
IconFlag(0) bleibt auf 0

Code: Alles auswählen

     OptionGadget(3,0,65,100,20,"Frage-Symbol") 
     OptionGadget(4,0,85,100,20,"Info-Symbol") 
     OptionGadget(5,0,105,100,20,"Kein Symbol") 
     SetGadgetState(5,1)
das dritte brauche ich zum deaktivieren der andern, das wird auch gleich aktiviert...

Code: Alles auswählen

  Icon = GetGadgetState(3) + 2*GetGadgetState(4)
hier erzeuge ich ein 2Bit-Flag aus den zuständen der OptionGadgets.
GetGadgetState liefert 1 zurück für ein aktiviertes Gadget.
somit ist Icon 0 für keins, 1 für Frage, 2 für Info

Code: Alles auswählen

        If EventGadgetID() = 2 
           MessageRequester(titel$,text$,IconFlag(Icon)) 
        EndIf 
hier wird dann der Requester aufgerufen mit den entsprechenden Icon.

hope that helped...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von PureBaser »

Nein das Lob war ernst gemeint - nicht unbedingt auf diese Problematik sondern allgemein bezogen. Ich staune doch sehr wieviel Ihr hier wisst. Und vor allem eure ständige Hilfsbereitschaft!

Problem ist gelöst danke!!!!!!!!!! =)

Jetzt wo die Schule (in Berlin jedenfalls) wieder anfängt, werd ich mit dem Programmieren wieder etwas zurückschrauben und mich daher wieder erstma' zurückziehn!

DANKE AN ALLE !!

:iamwithstupid:
PB4 & WinXP_SP2
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von PureBaser »

EDIT: Mach doch noch ein bissel weiter, weil sonst die Hälfte umsonst wäre...

Bis auf

Code: Alles auswählen

Icon = GetGadgetState(3) + 2*GetGadgetState(4)
komme ich ganz gut mit. Aber der Code sieht voll komisch aus. Die 2* stehen wohl für die 2 Bytes (= 4 Kombinationsmöglichkeiten). Da GetGadgetState(3) schon ausgewählt ist ist der Wert "1" und GetGadgetState(4) ist NICHT ausgewählt also der Wert "0" --> Icon = 1?
So versteh ich das jedenfalls
PB4 & WinXP_SP2
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nein, der wert errechnet sich gemäß dem, welchen zu stand sie gerade haben.
du kannst schließlich während diese schleife durchlaufen wird
bzw. während sie im WaitWindowEvent() hängt,
die zustände der optiongedgets ändern.

defaultmäßig habe ich das Gadget Nr.5 angewählt, das für kein Icon.
das fließt auch nicht in die berechnung mit ein.
für den Fall, das man "Frage" aufwählt, stimmt deine schlussfolgerung:
Icon erhält den wert 1.
Für den Fall, das man "Info" auswählt,
währe jetzt der State von Gadget 4 auf 1, das wird mit 2 multipliziert,
und "Icon" erhält den wert 2.
das 2* sorgt dafür, das sich die werte nicht überschneiden.
da sich option-gadgets immer gegenseitig ausschließen,
kann man das auch für noch mehr anwenden.
dementsprechend dann mit 3*, 4* usw.
damit kann man dann easy auf ein array zugreifen,
wie hier wo die eigentlichen konstanten drin rückgespeichert sind.

...hoffe das war jetzt klarer. is schon ein brocken, ich weiß.. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBaser
Beiträge: 180
Registriert: 08.09.2004 21:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von PureBaser »

Aber Brocken kapiert! Jetzt bin ich restlos glücklich! :D
PB4 & WinXP_SP2
Antworten