Problem mit SetGadgetColor beim EditorGadget

Anfängerfragen zum Programmieren mit PureBasic.
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Problem mit SetGadgetColor beim EditorGadget

Beitrag von Andi »

Ich möchte bei einem Editor-Gadget die Frontcolor ändern, sobald das erste Zeichen ein "#" ist. Aber der folgende Code funktioniert nicht. Ich kriege nicht raus, wo der Fehler liegt. Vielleicht habt ihr eine Idee? Hier ist der Code:

Code: Alles auswählen

#window = 0
#eg = 0

OpenWindow(#window, 100, 100, 200, 150, "Editor-Gadget", #PB_Window_SystemMenu)
EditorGadget(#eg, 20, 20, 130, 80, #PB_Editor_WordWrap) 
SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Blue) 

Repeat
   
   Select WaitWindowEvent()
         
      Case #PB_Event_CloseWindow
         Break 
         
       Case #PB_Event_Gadget         
         If EventGadget() = #eg
            If EventType() = #PB_EventType_Change
               If Left(Trim(GetGadgetText(#eg)), 1) = "#"
                  SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Red) 
               Else
                  SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Blue) 
               EndIf   
            EndIf   
         EndIf     
         
    EndSelect     
   
ForEver   
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem mit SetGadgetColor beim EditorGadget

Beitrag von Kiffi »

SetGadgetColor() löst anscheinend ein #PB_EventType_Change aus, weswegen Dein Code in einer Endlosschleife hängt.

Nachfolgend ein Code, der prüft, ob sich der Textinhalt des EditorGadgets verändert hat und dann erst ein SetGadgetColor() ausführt:

Code: Alles auswählen

#window = 0
#eg = 0

OpenWindow(#window, 100, 100, 200, 150, "Editor-Gadget", #PB_Window_SystemMenu)
EditorGadget(#eg, 20, 20, 130, 80, #PB_Editor_WordWrap) 
SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Blue) 

Define oldText.s

Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      
      Break 
      
    Case #PB_Event_Gadget
      
      If EventGadget() = #eg
        
        If EventType() = #PB_EventType_Change
          
          If oldText <> GetGadgetText(#eg)
            
            oldText = GetGadgetText(#eg)
            
            If Left(Trim(GetGadgetText(#eg)), 1) = "#"
              SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Red) 
            Else
              SetGadgetColor(#eg, #PB_Gadget_FrontColor, #Blue) 
            EndIf   
            
          EndIf

        EndIf   
        
      EndIf
      
  EndSelect     
  
ForEver
Grüße ... Peter
a²+b²=mc²
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Re: Problem mit SetGadgetColor beim EditorGadget

Beitrag von Andi »

Vielen Dank, Kiffi, dass Du das Problem mit der Endlosschleife erkannt hast und eine entsprechende Lösung gefunden hast! Hat mir sehr geholfen! - Kann man das als Bug bezeichnen, dass SetGadgetColor bei einem EditorGadget ein #PB_EventType_Change-Ereignis auslöst?
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem mit SetGadgetColor beim EditorGadget

Beitrag von NicTheQuick »

Ich würde es nicht als Bug bezeichnen. Man muss es eben nur wissen. Denn plausibel ist das Event meiner Meinung nach schon. "Die Farbe ändert sich" -> "#PB_EventType_Change".
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem mit SetGadgetColor beim EditorGadget

Beitrag von Kiffi »

Andi hat geschrieben:Kann man das als Bug bezeichnen, dass SetGadgetColor bei einem EditorGadget ein #PB_EventType_Change-Ereignis auslöst?
wenn man die Doku liest, dann würde ich sagen: Ja.
PB-Hilfe hat geschrieben: #PB_EventType_Change : der Text wurde durch den Anwender geändert.
Grüße ... Peter

// EDIT: Außerdem sollte aus dem Programmcode heraus generell kein Change-Event gefeuert werden:
Fred hat geschrieben:No, program set value shouldn't fire a change event [...]
Nachzulesen hier: http://www.purebasic.fr/german/viewtopi ... 20&t=26925
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem mit SetGadgetColor beim EditorGadget

Beitrag von NicTheQuick »

Oh, okay. Cool. Dann sollte man es melden, ja.
Antworten