Seite 1 von 1

Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 12:16
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   

Re: Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 12:38
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

Re: Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 13:15
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?

Re: Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 13:40
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".

Re: Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 13:44
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

Re: Problem mit SetGadgetColor beim EditorGadget

Verfasst: 03.12.2014 14:04
von NicTheQuick
Oh, okay. Cool. Dann sollte man es melden, ja.