Gadgets unter Windows

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
langinagel
Beiträge: 30
Registriert: 03.08.2005 21:06
Computerausstattung: AMD-Krücke 8GB / Lubuntu 18.04
core i3 / 4GB / 1TB / Ubuntu 16.04
und noch paar alte Schinken
Wohnort: Germ-any
Kontaktdaten:

Re: Gadgets unter Windows

Beitrag von langinagel »

Servus,
ich denke, ich bin schon selbst drüber gestolpert:

1.

Code: Alles auswählen

  
  Check_Input(   #WindowTest_String_sTest)
  Check_Input(   #WindowTest_String_fFloat)
  Check_Input(   #WindowTest_String_tStringtest)
Wenn die initiale Überprüfung vor der Repeat-Schleife steht, wird keine Zeit verbraucht.
2.

Code: Alles auswählen

        Case     #WindowTest_String_sTest,   #WindowTest_String_fFloat ,  #WindowTest_String_tStringtest
          If EventType() = #PB_EventType_Change
            Check_Input(EventGadget())
          EndIf
Diese Abfrage ist sicherlich simpler und selektiver als alle nochmal nacheinander aufzurufen.

Übrigens funktioniert es nun auch mit Delay() innerhalb der Schleife und mit getrennten Proceduren.

Und die .w, .l etc. behalte ich bei. Enableexplicit zeigt mir immer wieder die kleinen unnötigen Schlampereien.

Aber: nach wie vor vielen Dank HeXOR!! :bounce:
Wenn man sich von der funktionierenden Seite aus nähert, geht es um einiges leichter! Danke dafür!

Viele Grüße
LN

PS: Der gesamte Code nochmal.

Code: Alles auswählen

Enumeration  3
  #Font_5
EndEnumeration

Global wFontHeight.w

Procedure.w FontLaden()            ; 
  If  LoadFont(#Font_5,  "Arial"  ,  12)
  Else
    Debug "Font 5 nicht geladen"
  EndIf
EndProcedure

Enumeration 950
  #NichtsGeschehen       
  #AbbruchOhneUebernahme 
  #EndeMitDatenuebernahme
  #BestehendeDatenAuslesen
  #InputGUI_OK
  #InputGUI_Cancel
  
EndEnumeration

Procedure.w CheckContent(Content.s)
  Protected result.w = 0
  If Len(Content) < 3 Or Trim(Content) = ""
    result = 5
  EndIf
  ProcedureReturn result
EndProcedure

Procedure Check_Input(GadgetNo.w)
  Protected CheckContent.s
  CheckContent = GetGadgetText(GadgetNo)
  If CheckContent(CheckContent) > 1
    SetGadgetColor(GadgetNo, #PB_Gadget_BackColor,RGB(255,0,0))
  Else
    SetGadgetColor(GadgetNo, #PB_Gadget_BackColor,RGB(255,255,255))
  EndIf
EndProcedure

Procedure FillKramComboBox(GadgetNo.w)
  AddGadgetItem(GadgetNo, -1 , "einerseits" )
  AddGadgetItem(GadgetNo, -1 , "andererseits" )
  AddGadgetItem(GadgetNo, -1 , "dannwieder" )
EndProcedure

Enumeration FormWindow
  #WindowTest
EndEnumeration

Enumeration FormGadget
  #WindowTest_Text_wTest1
  #WindowTest_Text_sTest
  #WindowTest_Text_fFloat
  #WindowTest_Text_tStringtest
  #WindowTest_Button_Ok
  #WindowTest_Button_Cancel
  #WindowTest_Button_FontPlus
  #WindowTest_Button_FontMinus
  
  #WindowTest_Combo_wTest1
  #WindowTest_String_sTest
  #WindowTest_String_fFloat
  #WindowTest_String_tStringtest
EndEnumeration

Procedure OpenWindowTest(x = 0, y = 0, width = 700, height = 500)
  OpenWindow(  #WindowTest, x, y, width, height,"Zeuges"  , #PB_Window_SystemMenu|  #PB_Window_SizeGadget  )
  StickyWindow(  #WindowTest, #True) 
  
  ButtonGadget(  #WindowTest_Button_Ok, 580, 260, 100, 40, "OK")
  ButtonGadget(  #WindowTest_Button_Cancel, 450, 260, 100, 40, "Cancel")
  
  TextGadget(  #WindowTest_Text_wTest1, 20, 20, 160, 40, "Auswahl" )
  TextGadget(  #WindowTest_Text_sTest, 20, 80, 160, 40, "Text" )
  TextGadget(  #WindowTest_Text_fFloat, 20, 140, 160, 40, "Float" )
  TextGadget(  #WindowTest_Text_tStringtest, 20, 200, 160, 40, "LangText" )
  ComboBoxGadget(  #WindowTest_Combo_wTest1, 240, 20, 440, 40 )
  StringGadget(  #WindowTest_String_sTest, 240, 80, 440, 40, "")
  StringGadget(  #WindowTest_String_fFloat, 240, 140, 440, 40, "")
  EditorGadget(  #WindowTest_String_tStringtest, 240, 200, 440, 40);, "")
  
EndProcedure


Procedure FontSetzen(wInput.w)
  SetGadgetFont(   #WindowTest_Combo_wTest1, FontID(wInput))
  SetGadgetFont(   #WindowTest_Text_wTest1, FontID(wInput))
  SetGadgetFont(   #WindowTest_String_sTest, FontID(wInput))
  SetGadgetFont(   #WindowTest_Text_sTest, FontID(wInput))
  SetGadgetFont(   #WindowTest_String_fFloat, FontID(wInput))
  SetGadgetFont(   #WindowTest_Text_fFloat, FontID(wInput))
  SetGadgetFont(   #WindowTest_String_tStringtest, FontID(wInput))
  SetGadgetFont(   #WindowTest_Text_tStringtest, FontID(wInput))
EndProcedure


Procedure.w WindowTest_Event()
  Protected result.w = 0
  Protected event.w
  
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      result =  #AbbruchOhneUebernahme
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #WindowTest_String_sTest, #WindowTest_String_fFloat, #WindowTest_String_tStringtest
          If EventType() = #PB_EventType_Change
            Check_Input(EventGadget())
          EndIf
        Case #WindowTest_Button_Cancel, #WindowTest_Button_Ok
          result =  #AbbruchOhneUebernahme
          
      EndSelect
      
  EndSelect
  ProcedureReturn result
EndProcedure 

Procedure.w STRG_MaskeTest()
  Shared wFontHeight 
  wFontHeight = #Font_5
  Protected switch.w 
  OpenWindowTest(0)
  FillKramComboBox(  #WindowTest_Combo_wTest1)
  FontSetzen(wFontHeight)
  ;   SetGadgetText( #WindowTest_String_sTest, "Dideldum")
  ;   SetGadgetText( #WindowTest_String_fFloat, "1.453")
  ;   SetGadgetText( #WindowTest_String_tStringtest, "BlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaDideldum")
  
  
  Check_Input(   #WindowTest_String_sTest)
  Check_Input(   #WindowTest_String_fFloat)
  Check_Input(   #WindowTest_String_tStringtest)
  
  
  Repeat
    switch = WindowTest_Event()
    Delay (10)
  Until switch =  #EndeMitDatenuebernahme Or  switch =   #AbbruchOhneUebernahme 
  CloseWindow(#WindowTest)
  ProcedureReturn switch 
EndProcedure 

; los gehts

Fontladen()

STRG_MaskeTest( )
https://www.doerpsoft.org

Boost. Work. Efficiency.

AMD-Krücke mit Lubuntu-18.04 / iCore7 mit Win10-64
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Gadgets unter Windows

Beitrag von mk-soft »

Bitte das Delay raus. Sonst werden die vielen Events nicht schnell genug vom System verarbeitet und es kann zur Meldung kommen "Anwendung reagiert nicht mehr"

Darum kümmert sich schon WaitWindowEvent das nicht keine Leistung verloren geht.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten