Färben einzelner Zeichen im Editorgadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Färben einzelner Zeichen im Editorgadget

Beitrag von Criss »

Hi zusammen,

ich habe im Codearchiv, die Proceduren:

Code: Alles auswählen

Procedure Editor_Select(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)    
  sel.CHARRANGE 
  sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1 
  
  If LineEnd = -1 
    LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1 
  EndIf 
  sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0) 
  
  If CharEnd = -1 
    sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0) 
  Else 
    sel\cpMax + CharEnd - 1 
  EndIf 
  SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel) 
EndProcedure 

; Set the Text color for the Selection 
; in RGB format 
Procedure Editor_Color(Gadget, Color.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_COLOR 
  format\crTextColor = Color 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 


; Set Format of the Selection. This can be a combination of 
; the following values: 
; #CFM_BOLD 
; #CFM_ITALIC 
; #CFM_UNDERLINE 
; #CFM_STRIKEOUT 
Procedure Editor_Format(Gadget, Flags.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE
  format\dwEffects = Flags 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure
in meinem Pogramm verwendet. Und zwar soll dort in einem Editorgadget einzelne Zeichen eingefärbt werden! Das funktioniert auch wunderbar, nur das Problem ist bei mehreren Zeilen läuft die Einfärbung von oben nach unten und scrollt dabei mit, was sehr ärgerlich ist, da ich ja beim Textbearbeiten im Editorgadget, die Textposition beibehalten möchte, also dort wo ich mich aktuell befinde!

Nun, weiss ich nicht mehr weiter, habe schon einiges probiert, und das Forum durchgesucht!

Gibt es noch andere Färbungsmöglichkeiten, oder Winapi-Befehle die ich
verwenden könnte?

Danke schonmal zum voraus!
Zuletzt geändert von Criss am 08.12.2004 17:58, insgesamt 1-mal geändert.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

du könntest die RichEditGadget benutzten, die Library dazu gibts auf pureare.net
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Relativ neu ist auch noch die SyntaxHighlighting UserLib (gedacht für das EditorGadget), gibts auch auf PureArea.net :D
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Beitrag von Criss »

@orange-blue:

Super Idee, das mit der Richeditlibrary! Habe es gleich mal probiert, und es hat funktioniert! Hatte zuerst meine zweifel! Besten Dank!
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

orange-blue hat geschrieben:du könntest die RichEditGadget benutzten, die Library dazu gibts auf pureare.net
Aja stimmt, hatte ich vergessen!
Besten Dank!
Immer wieder gerne :)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Andre hat geschrieben:Relativ neu ist auch noch die SyntaxHighlighting UserLib (gedacht für das EditorGadget), gibts auch auf PureArea.net :D
Jap, hab ich gemacht:
http://www.purearea.net/pb/showcase/sho ... =20&sort=1
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten