Richedit-eigenschaften
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:41, insgesamt 1-mal geändert.
~ DELETE ~
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Richedit-eigenschaften
Danke für die Tips, ich werde es später ausprobieren.
C&P ist bei uns im Chat vollkommen unwichtig. Wir wollen Doppelkopf spielen und nebenbei etwas quatschen.
Wenn man die Textausrichtung/Wordwrap allerdings besser mit Scintilla hinbekommt, so wäre das natürlich ein schlagendes Argument
C&P ist bei uns im Chat vollkommen unwichtig. Wir wollen Doppelkopf spielen und nebenbei etwas quatschen.
Wenn man die Textausrichtung/Wordwrap allerdings besser mit Scintilla hinbekommt, so wäre das natürlich ein schlagendes Argument

Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Richedit-eigenschaften
Auch nach aktivem Suchen finde ich keine geeignete Hilfe über Scintilla bzw. dessen Handhabung.
Die ScintillaSendMessage-Befehle sind hier nicht dokumentiert und anscheinend funktionieren sie auch nicht wirklich.
Ich schaffe es tatsächlich nicht,in einem Scintilla-Gadget einzelne Zeilen andersfarbig darzustellen.
Die ScintillaSendMessage-Befehle sind hier nicht dokumentiert und anscheinend funktionieren sie auch nicht wirklich.
Ich schaffe es tatsächlich nicht,in einem Scintilla-Gadget einzelne Zeilen andersfarbig darzustellen.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Richedit-eigenschaften
http://www.scintilla.org/
http://www.scintilla.org/ScintillaDoc.html
und natürlich das oder die Foren, z.B.:
http://www.purebasic.fr/german/viewtopic.php?t=19580
Ich glaube aber nicht, das Du dort so fündig wirst.
http://www.scintilla.org/ScintillaDoc.html
und natürlich das oder die Foren, z.B.:
http://www.purebasic.fr/german/viewtopic.php?t=19580
Ich glaube aber nicht, das Du dort so fündig wirst.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Richedit-eigenschaften
MIt GFA-Basic füge ich einen farbigen Text einer Richedit so hinzu:
Auch nach intensiven Suchen finde ich nichts gleichwertiges in den, nunja, kann man das wirklich Beschreibungen nennen, der Scintilla-Seiten.
Kann mir jemand ein begreifbares Beispiel geben?
Code: Alles auswählen
newText="Dies ist eine farbige Zeile"
farbe=RGB(0,255,0)
i = Len(lobbychatEdi.Text)
lobbychatEdi.SelStart = i
lobbychatEdi.SelLength = Len(newText)
lobbychatEdi.SelColor = farbe
lobbychatEdi.SelText = newText
Kann mir jemand ein begreifbares Beispiel geben?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Richedit-eigenschaften
Habe mal schnell dieses Beispiel von freak etwas abgeändert.stevie1401 hat geschrieben:Kann mir jemand ein begreifbares Beispiel geben?
Code: Alles auswählen
Procedure SciColorLine(gadget, line, style)
ScintillaSendMessage(gadget, #SCI_STARTSTYLING, ScintillaSendMessage(gadget,#SCI_POSITIONFROMLINE,line), $FF)
ScintillaSendMessage(gadget, #SCI_SETSTYLING, ScintillaSendMessage(gadget,#SCI_LINELENGTH,line), style)
EndProcedure
If OpenWindow(0, 0, 0, 400, 500, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 380, 480, 0)
; set text
*Buffer = AllocateMemory(1000)
PokeS(*Buffer, "Zeile 1" + Chr(10) + "Zeile 2" + Chr(10) + "Zeile 3" + Chr(10) + "Zeile 4" + Chr(10), -1, #PB_Ascii)
ScintillaSendMessage(0, #SCI_SETTEXT, 0, *Buffer)
; normaler text style (style 0)
PokeS(*Buffer, "Lucida Console", -1, #PB_Ascii)
ScintillaSendMessage(0, #SCI_STYLESETFONT, 0, *Buffer)
ScintillaSendMessage(0, #SCI_STYLESETSIZE, 0, 14)
; Style 1 erstellen, gruen
ScintillaSendMessage(0, #SCI_STYLESETFONT, 1, *Buffer)
ScintillaSendMessage(0, #SCI_STYLESETSIZE, 1, 14)
ScintillaSendMessage(0, #SCI_STYLESETFORE, 1, RGB(0,255,0))
; Style 2 erstellen, rot
ScintillaSendMessage(0, #SCI_STYLESETFONT, 2, *Buffer)
ScintillaSendMessage(0, #SCI_STYLESETSIZE, 2, 14)
ScintillaSendMessage(0, #SCI_STYLESETFORE, 2, RGB(255,0,0))
; Style 3 erstellen, blau
ScintillaSendMessage(0, #SCI_STYLESETFONT, 3, *Buffer)
ScintillaSendMessage(0, #SCI_STYLESETSIZE, 3, 14)
ScintillaSendMessage(0, #SCI_STYLESETFORE, 3, RGB(0,0,255))
; Styles für Zeilen setzen
SciColorLine(0,0,1)
SciColorLine(0,1,2)
SciColorLine(0,2,3)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Hier noch ein anderes Beispiel von mir.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Richedit-eigenschaften
Leider verstehe ich auch nach mehrmaligen sinnbefreiten Ausprobieren die Syntax nicht.
Kannst du bitte mal schnell es so umändern, dass jede neue Zeile eine zufällige Farbe bekommt?
Ich verstehe Scintilla nicht einmal ansatzweise, weil es leider keine Beschreibung für die einzelnen Befehle gibt.
Kannst du bitte mal schnell es so umändern, dass jede neue Zeile eine zufällige Farbe bekommt?
Ich verstehe Scintilla nicht einmal ansatzweise, weil es leider keine Beschreibung für die einzelnen Befehle gibt.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Richedit-eigenschaften
Scintilla arbeitet mit Styles. Es gibt 256 (0-255) Styles, und für jeden Style kann man Eigenschaften setzen:
Vordergrundfarbe, Hintergrundfarbe, Font, Fontgröße, Unterstreichung an/aus, Schrägschrift an/aus, Fettschrift an/aus, usw.
Da es nur 256 Styles gibt, kann man also nur 256 verschiedene Farben haben.
Du brauchst nur 3 Farben, und genau das macht der obige Code: 3 Farben für 3 Styles setzen. Danach kann man
bestimmten Textteilen diese definierten Styles zuweisen.
In früheren Versionen hatte man 32 Styles (0-31) zur Verfügung. Die anderen Bits wurden für andere Sachen benutzt.
Ich habe es jetzt mal nur mit 32 Styles gemacht. Eventuell geht es bei PB 5.3x mit 256 Styles, da dort (glaube ich)
ein Update von Scintilla dabei war.
Die Dokumentation für Scintilla ist, wie ts-soft schon sagte, auf http://www.scintilla.org/ScintillaDoc.html
Das ist die komplette Dokumentation für die aktuellste Scintilla-Version, allerdings ist sie für die Programmiersprache C.
Alles ziemlich kompliziert, aber dafür recht mächtiges (freies) Editor-Gadget.
Vordergrundfarbe, Hintergrundfarbe, Font, Fontgröße, Unterstreichung an/aus, Schrägschrift an/aus, Fettschrift an/aus, usw.
Da es nur 256 Styles gibt, kann man also nur 256 verschiedene Farben haben.
Du brauchst nur 3 Farben, und genau das macht der obige Code: 3 Farben für 3 Styles setzen. Danach kann man
bestimmten Textteilen diese definierten Styles zuweisen.
In früheren Versionen hatte man 32 Styles (0-31) zur Verfügung. Die anderen Bits wurden für andere Sachen benutzt.
Ich habe es jetzt mal nur mit 32 Styles gemacht. Eventuell geht es bei PB 5.3x mit 256 Styles, da dort (glaube ich)
ein Update von Scintilla dabei war.
Code: Alles auswählen
Procedure SciText(text.s)
Static *Buffer
If Not *Buffer
*Buffer = AllocateMemory(1024 * 10)
EndIf
PokeS(*Buffer, text, -1, #PB_Ascii)
ProcedureReturn *Buffer
EndProcedure
Procedure SciColorLine(gadget, line, style)
ScintillaSendMessage(gadget, #SCI_STARTSTYLING, ScintillaSendMessage(gadget,#SCI_POSITIONFROMLINE,line), $FFFF)
ScintillaSendMessage(gadget, #SCI_SETSTYLING, ScintillaSendMessage(gadget,#SCI_LINELENGTH,line), style)
EndProcedure
Procedure SciAddLineWithStyle(gadget, text$, style)
text$ + Chr(10)
ScintillaSendMessage(gadget, #SCI_SETSEL,-1,-1)
line = ScintillaSendMessage(gadget, #SCI_LINEFROMPOSITION, ScintillaSendMessage(gadget,#SCI_GETCURRENTPOS))
ScintillaSendMessage(gadget, #SCI_APPENDTEXT, Len(text$),SciText(text$))
SciColorLine(gadget, line, style)
EndProcedure
RandomSeed(1111)
If OpenWindow(0, 0, 0, 800, 600, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 780, 580, 0)
; Init und Standardfont setzen
ScintillaSendMessage(0, #SCI_STYLERESETDEFAULT)
ScintillaSendMessage(0, #SCI_STYLESETFONT,#STYLE_DEFAULT, SciText("Arial"))
ScintillaSendMessage(0, #SCI_STYLESETSIZE,#STYLE_DEFAULT, 24)
ScintillaSendMessage(0, #SCI_STYLECLEARALL)
; die styles initialisieren / Farben setzen
For style = 0 To 31
ScintillaSendMessage(0, #SCI_STYLESETFORE, style, RGB( Random(255), Random(255), Random(255) ) ) ; Vordergrundfarbe für den Style setzen
;ScintillaSendMessage(0, #SCI_STYLESETBACK, style, RGB( Random(255), Random(255), Random(255) ) ) ; Hintergrundfarbe für den Style setzen
Next
; Zeilen hinzufügen
For i = 0 To 31
SciAddLineWithStyle(0, "Eine neue Zeile..."+Str(i), Random(31))
Next
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Das ist die komplette Dokumentation für die aktuellste Scintilla-Version, allerdings ist sie für die Programmiersprache C.
Alles ziemlich kompliziert, aber dafür recht mächtiges (freies) Editor-Gadget.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Richedit-eigenschaften
Danke für deine Hilfe.
Ich habe die Nacht über versucht das alles zu verstehen und folgendes ist dabei herausgekommen:
Ich bekomme allerdings nach der 31. Farbe (Style) Fehler.
Ich habe die Nacht über versucht das alles zu verstehen und folgendes ist dabei herausgekommen:
Code: Alles auswählen
EnableExplicit
Global Dim ScintillaRememberColorString.s(3,500)
Global Dim ScintillaRememberColorCount(3)
Declare CheckScintillaColor(GadgetNo,aColor)
Declare ScintillaAddColoredLine(ScintillaNo,aText.s,aColor)
Define l,i,txtLen,startpos,r,g,b,col,ScNo,ColStyle,nlen
Define text.s,scin1txt.s,ScintillaNo
ScNo=1
If OpenWindow(0, 0, 0, 600, 600, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(1, 10, 10, 250, 400, #Null)
ScintillaSendMessage(ScNo, #SCI_SETWRAPMODE, #True)
For i=1 To 200
col=RGB(Random(200,1),Random(200,1),Random(200,1))
ScintillaAddColoredLine(1,"Das ist eine längere Zeile, um Wprapmode und die Zeile zu testen.Dies ist übrigens Zeile: "+Str(i),col)
Next i
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Procedure ScintillaAddColoredLine(ScintillaNo,aText.s,aColor)
Protected ColStyle,startpos,txtlen,i
Protected.s text
text=aText+Chr(10)
ColStyle=CheckScintillaColor(ScintillaNo,aColor)
startpos=ScintillaSendMessage(ScintillaNo,#SCI_GETLENGTH) -1
txtlen = Len(text)
ScintillaSendMessage(ScintillaNo, #SCI_APPENDTEXT, txtlen, @Text)
ScintillaSendMessage(ScintillaNo,#SCI_STARTSTYLING,startpos,255)
ScintillaSendMessage(ScintillaNo,#SCI_SETSTYLING,txtlen,ColStyle)
EndProcedure
Procedure CheckScintillaColor(GadgetNo,aColor)
Protected i,foundColor,StyleNumber
For i=1 To ScintillaRememberColorCount(GadgetNo)
If ScintillaRememberColorString(GadgetNo,i)=Str(aColor) ;Die Farbe gibt es schon im ScintillaGadget
foundColor=aColor
StyleNumber=i
EndIf
Next i
If foundColor=0
ScintillaRememberColorCount(GadgetNo)+1
StyleNumber=ScintillaRememberColorCount(GadgetNo)
ScintillaRememberColorString(GadgetNo,StyleNumber)=Str(aColor)
ScintillaSendMessage(GadgetNo, #SCI_STYLESETFORE, StyleNumber, aColor)
EndIf
ProcedureReturn StyleNumber
EndProcedure
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Richedit-eigenschaften
Das ist bei mir auch so, mit PB 5.2x LTS. Benutzt Du schon PB 5.31?stevie1401 hat geschrieben:Ich bekomme allerdings nach der 31. Farbe (Style) Fehler.
Da Du eh nur 3 Farben brauchst, reichen doch 32 (0-31) aus.
Das aktuellste Scintilla scheint da etwas geändert zu haben, so dass man
nun 256 Styles zur Verfügung hat.
Allerdings weiss ich nicht ob das wirklich aktuellste Scintilla in PB 5.31 integriert ist.
Wenn nicht, musst Du wohl mit den 32 Farben leben. Ich bekomme immer Unterstreichungen
wenn ich mehr als 32 Styles verwende. Auf dem Mac kommen dann auch noch Display-Fehler
hinzu, so dass man nach dem scrollen nach oben dauernd Graue Linien sieht, die erst verschwinden
wenn man rechts/links scrollt.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck