Hilfe! Anfängerproblem mit Buttongadget

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Hilfe! Anfängerproblem mit Buttongadget

Beitrag 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!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Hilfe! Anfängerproblem mit Buttongadget

Beitrag 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....
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Hilfe! Anfängerproblem mit Buttongadget

Beitrag 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!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten