Seite 1 von 1

Hilfe! Anfängerproblem mit Buttongadget

Verfasst: 23.04.2019 21:09
von bin_neu_hier
Hallo Leute,

habe folgendes Problem: Möchte mir einen eigenen Messagerequester schreiben, der a) eine größere Schrift hat und b) selbstbenannte Buttons hat.

Habe folgenden Code soweit zusammengeschustert:

Code: Alles auswählen

Enumeration  
  #window_one
  #window_two
  #fontnum  
EndEnumeration

Procedure AlertWindow(headline$,message$, button1$, button2$, button3$)
  DisableWindow(#window_one, #True)
  ; Hauptfenster inaktiv
  
  If OpenWindow(#window_two, 0, 0, 400, 250, "", #PB_Window_WindowCentered, WindowID(#window_one))
    ww = WindowWidth(#window_two)
    wh = WindowHeight(#window_two)
    
    SetWindowColor(#window_two, RGB(255,255,255)) 
    
    x = TextGadget(#PB_Any, 10, 0, ww-20, wh-80,"")
    SetGadgetColor(x, #PB_Gadget_FrontColor, RGB(0,0,0))
    SetGadgetColor(x, #PB_Gadget_BackColor, RGB(255,255,255))
    SetGadgetText (x, headline$ +Chr(13)+Chr(10)+Chr(13)+Chr(10)+ message$)
    
    x = ButtonGadget(#PB_Any, 10, 210, 200, 20, button1$)
    ;dieser Button macht Probleme
   
    
   Delay (5000)
   ;nur damit man sieht, dass man nichts sieht ...
    
   CloseWindow(#window_two)
   EndIf
   DisableWindow(#window_one, #False)
EndProcedure
 
If OpenWindow(#window_one, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If LoadFont(#fontnum, "Arial", 11) : SetGadgetFont(#PB_Default, FontID(#fontnum)) : EndIf
  
  b1 = ButtonGadget(#PB_Any, 10, 30, 200, 30, "AlertWindow")
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow: Break
      Case #PB_Event_Gadget
        If EventGadget() = b1
          AlertWindow("Titelzeile", "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.", "b1","b2","b3")
        EndIf
    EndSelect
  ForEver
EndIf
Kurz erklärt: Irgendwann im Programmablauf soll dieser Dialog erscheinen, das eigentliche Prog soll dann inaktiv sein, bis der Dialog beantwortet ist. Problem: der Button

Code: Alles auswählen

 x = ButtonGadget(#PB_Any, 10, 210, 200, 20, button1$)
will sich nicht zeigen. Eigentlich sollen da noch 2 weitere Buttons gezeigt werden, aber wenn's schon mit dem ersten nicht klappen will ...

Außerdem noch zwei Fragen:
a) Gehe ich recht in der Annahme, dass ich mich um Gadgets eines geschlossenen Fensters nicht mehr kümmern muss oder müssten die noch irgendwie eliminiert werden (Stichwort Gadgetlist ...) ?
b) wie müsste die Eventschleife nur für dieses Fenster gestrickt sein?

Jetzt schon besten Dank für Eure Zeit!

Re: Hilfe! Anfängerproblem mit Buttongadget

Verfasst: 23.04.2019 22:21
von Bisonte
Der Button macht keine Probleme ;) Dein Programm erstellt ihn, und schliesst 5 Sek. später das Fenster.

Damit der Button auch gezeigt wird, muss man dem Fenster auch Gelegenheit geben ihn zu Zeichnen.
Es befindet sich aber keine Eventverarbeitung an der Stelle...
Ein einfaches :

Code: Alles auswählen

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_Gadget
    If EventGadget() = x
      Break
    EndIf
  EndIf
  
  If Event = #PB_Event_CloseWindow
    If EventWindow() = #window_two
      Break
    EndIf
  EndIf
  
ForEver
anstelle des Delay (5000) und es sollte sich was zeigen....

Re: Hilfe! Anfängerproblem mit Buttongadget

Verfasst: 24.04.2019 06:33
von bin_neu_hier
Hallo Bisonte und herzlichen Dank!

Ich bin davon ausgegangen, dass der Button vor dem Delay angezeigt werden muss, das war mein Denkfehler. Jetzt läuft's wie geschmiert, dank Dir!