Seite 1 von 1

EditorGadget-Textfarbe setzen: PB5.11 ok aber PB5.60 nicht

Verfasst: 26.10.2017 15:44
von TheCube
Hallo,
ich habe hier eine Procedure SetColor() aus der Winapi-Library um im Editorgadget
vorhandenen Text beliebig einzufärben. Die funktioniert bei 5.11 und 5.60 gleich gut.

Ich habe aber eine andere Variation SetColorAlt() gerne genutzt, die einfach nur danach folgende
Textausgaben einfärbt. So gibts dann übersichtliche Listenausgaben sehr einfach ...
<1> Good
<2> Good

<3> Bad
<4> Good
...


Leider färbt SetColorAlt() auf PB5.60 nichts mehr ein. Auf PB5.11 lief es noch prima.
Der Unicode-Ascii Krams wird es ja wohl nicht schonwieder sein, oder ?

Code: Alles auswählen

EnableExplicit
Define EventID

Procedure SetColorAlt(Gadget, Color)  ; Färbt allen folgenden Textausgaben ein
  Protected format.CHARFORMAT2
  Protected sel.CHARRANGE
  Protected sel_saved.CHARRANGE
  
   format\cbSize      = SizeOf(CHARFORMAT2) 
   format\dwMask      = #CFM_COLOR 
   format\crTextColor = Color 
   SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 


Procedure SetColor(id,s,e,color)    ; Färbt vorhandenen Text ein von Startpos bis Endpos  --- WinAPI-Library ---
  Protected cf.charformat2\cbSize = SizeOf(charformat2)
  Protected sel.CHARRANGE
  
  SendMessage_(GadgetID(id),#EM_EXGETSEL,0,sel)
  cf\dwMask       = #CFM_COLOR
  cf\crTextColor  = color             
  SendMessage_(GadgetID(id),#EM_SETSEL,s,e)   
  SendMessage_(GadgetID(id),#EM_SETCHARFORMAT,#SCF_SELECTION,@cf)
  SendMessage_(GadgetID(id),#EM_SETSEL,sel\cpMin,sel\cpMax)
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,0)
  SetGadgetText(1,"PureBasicPureBasicPureBasicPureBasicPureBasicPureBasic"+Chr(13)+Chr(10)+"TestTest" )
  SetColor(1,13,27,$0000FF)
  AddGadgetItem (1, -1, "Neue Zeile ")
  AddGadgetItem (1, -1, "Noch ne neue Zeile ")
  SetColor(1,60,64,$FF0000) 
  
  SetColorAlt(1,$00FF00)                           ; Ab jetzt Text grün ausgeben
  AddGadgetItem (1, -1, "Letzte neue Zeile ")      ; grün
  AddGadgetItem (1, -1, "Allerletzte neue Zeile ") ; grün
  
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: EditorGadget-Textfarbe setzen: PB5.11 ok aber PB5.60 ni

Verfasst: 26.10.2017 20:18
von hjbremer
ein möglicher workaround

Code: Alles auswählen

Procedure AppendText(gadget, text$, color)
   Protected id = GadgetID(gadget)
   
   SetColorAlt(gadget, color) 

 ;ersetzt addgadgetitem
  SendMessage_ (id, #EM_SETSEL, -1, -1)      
  SendMessage_ (id, #EM_REPLACESEL, 0, #CR$ + text$)
   
EndProcedure
ist wohl ein kleiner Fehler in 5.60

Re: EditorGadget-Textfarbe setzen: PB5.11 ok aber PB5.60 ni

Verfasst: 26.10.2017 22:10
von TheCube
Schöne Lösung 8)
Bin ja immer froh wenn es nicht das eigene Unvermögen, sondern tatsächlich ein Bug oder
auch nur eine begründete Verhaltensänderung von PB ist.
Beim allerersten obersten Eintrag (nach Löschen des Editorgadget z.B.) funktioniert SetColorAlt() sogar noch,
nur in folgenden Zeilen eben nicht mehr, übrigens auch genauso bei 5.61.