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

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
TheCube
Beiträge: 150
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

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

Beitrag 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
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

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

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
TheCube
Beiträge: 150
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

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

Beitrag 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.
Antworten