Seite 1 von 2
Scintilla Anfängerfrage
Verfasst: 08.04.2011 23:42
von Syntacks_Error
Edit: Grmps, hat sich erledigt, die zweite 0 muß weg.
Ich mache offenbar etwas grundlegendes falsch. In diesem gering erweiterten Beispiel aus der PB-Hilfe
Code: Alles auswählen
If OpenWindow(0, 0, 0, 320, 190, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 300, 170, #Null)
;Damit soll eigentlich ein Zeilenumbruch erfolgen, tut aber nicht
ScintillaSendMessage(0,#SCI_SETWRAPMODE,0,#SC_WRAP_WORD)
; Output set to red color
ScintillaSendMessage(0, #SCI_STYLESETFORE, 0, RGB(255, 0, 0))
; Set the initial text to the ScintillaGadget
ScintillaSendMessage(0, #SCI_SETTEXT, 0, @"Das ist ein besonders langer und interessanter Text...")
; Adding a second line of text with linebreak before
Text$ = Chr(10) + "Second line"
ScintillaSendMessage(0, #SCI_APPENDTEXT, Len(Text$), @Text$)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
versuche ich mit
ScintillaSendMessage(0,#SCI_SETWRAPMODE,0,#SC_WRAP_WORD)
einen Zeilenumbruch herbeizuführen, geht aber nicht. Was ist falsch?
__________________________________________________
Tags geändert
Quote>Code
09.04.2011
RSBasic
Re: Scintilla Anfängerfrage
Verfasst: 09.04.2011 00:06
von ts-soft
Code: Alles auswählen
If OpenWindow(0, 0, 0, 320, 190, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 300, 170, #Null)
;Damit soll eigentlich ein Zeilenumbruch erfolgen, tut aber nicht
;ScintillaSendMessage(0,#SCI_SETWRAPMODE,0,#SC_WRAP_WORD)
ScintillaSendMessage(0, #SCI_SETWRAPMODE, #True)
; Output set to red color
ScintillaSendMessage(0, #SCI_STYLESETFORE, 0, RGB(255, 0, 0))
; Set the initial text to the ScintillaGadget
ScintillaSendMessage(0, #SCI_SETTEXT, 0, @"Das ist ein besonders langer und interessanter Text...")
; Adding a second line of text with linebreak before
Text$ = Chr(10) + "Second line"
ScintillaSendMessage(0, #SCI_APPENDTEXT, Len(Text$), @Text$)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Wobei anzumerken ist, in den Aufgaben, für die Scintilla das geeignete Tool ist, ist der WrapMode eher
suboptional.
Re: Scintilla Anfängerfrage
Verfasst: 09.04.2011 11:48
von Syntacks_Error
Ich komme mit demScintillazeuch nicht klar, die Dokumentation ist für einen einfachen Freizeitprogrammierer vom Lande irgendwie nicht ganz optimal ... Brauche zum Glück nur ganz wenige Funktionen, eigentlich nur noch Schriftart, Schriftgröße und Schriftqualität (Das mit dem Wrappen wird schon gehen, da geht es um ganz kurze Texte), das klappt aber alles nicht:
Code: Alles auswählen
If OpenWindow(0, 0, 0, 320, 190, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; So etwas soll herauskommen:
;PB: font = LoadFont(#PB_Any,"Tahomina",9,#PB_Font_HighQuality)
If InitScintilla()
ScintillaGadget(0, 10, 10, 300, 170, #Null)
;SCI_STYLESETFONT(int styleNumber, const char *fontName)
; Was ist denn die styleNumber?
font$ = "Tahomina"
ScintillaSendMessage(0, #SCI_STYLESETFONT,1,@font$); Geht nicht
;Das sollte doch wohl die Textgröße sein, ändert aber nur den Zeilenabstand?
;SCI_STYLESETSIZE(int styleNumber, int sizeInPoints);
ScintillaSendMessage(0,#SCI_STYLESETSIZE,1, 30)
;#SCI_SETFONTQUALITY(int fontQuality)
ScintillaSendMessage(0, #SCI_SETFONTQUALITY, #SC_EFF_QUALITY_LCD_OPTIMIZED);
; Ergibt einen Konstante nicht gefunden-Fehler!
;Ab hier geht's
ScintillaSendMessage(0,#SCI_SETWRAPMODE,#SC_WRAP_WORD,1); geht auch
ScintillaSendMessage(0, #SCI_STYLESETFORE, 0, RGB(0,0,255)); geht auch
ScintillaSendMessage(0, #SCI_SETTEXT, 0, @"Das ist ein besonders langer und interessanter Text...")
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Wäre dankbar, wenn die Zeilen mit Font, Textgröße und Qualität auch noch korrigiert werden könnten.
Re: Scintilla Anfängerfrage
Verfasst: 10.04.2011 08:21
von edel
Du hast in Scintilla verschiedene Styles. 0 ist Standard, also gleich der erste den du bearbeiten solltest.
Code: Alles auswählen
#SC_EFF_QUALITY_DEFAULT = 0
#SC_EFF_QUALITY_NON_ANTIALIASED = 1
#SC_EFF_QUALITY_ANTIALIASED = 2
#SC_EFF_QUALITY_LCD_OPTIMIZED = 3
#SCI_SETFONTQUALITY = 2611
#SCI_GETFONTQUALITY = 2612
If OpenWindow(0, 0, 0, 320, 190, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 300, 170, #Null)
ScintillaSendMessage(0, #SCI_STYLESETFONT, 0, @"Courier New")
ScintillaSendMessage(0,#SCI_STYLESETSIZE,0, 20)
ScintillaSendMessage(0, #SCI_SETFONTQUALITY, #SC_EFF_QUALITY_LCD_OPTIMIZED)
ScintillaSendMessage(0,#SCI_SETWRAPMODE,#SC_WRAP_WORD, 0)
ScintillaSendMessage(0, #SCI_STYLESETFORE, 0, RGB(0,0,255))
ScintillaSendMessage(0, #SCI_SETTEXT, 0, @"Das ist ein besonders langer und interessanter Text...")
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Scintilla Anfängerfrage
Verfasst: 10.04.2011 15:22
von Syntacks_Error
Vielen dank allerseits, das bringt mich schon weiter. Und wie das so ist, hätte ich da eigentlich doch noch ein paar Fragen

Aber, da gibt es ein Problem: Das läßt sich nicht compilieren. Also das geht schon, aber dann ist das Scintilla-Gadget einfach weg? So auch beim Beispiel aus der Hilfe. Muß man da dem Compiler noch etws angeben? Wenn es gar nicht geht, wäre alle Mühe natürlich vergebens.
Re: Scintilla Anfängerfrage
Verfasst: 10.04.2011 18:18
von edel
Das Programm benoetigt die Scintilla.dll, findest du im Compiler-Ordner.
Re: Scintilla Anfängerfrage
Verfasst: 11.04.2011 17:45
von Syntacks_Error
Ah ja. Wäre vielleicht eine Überlegung, das mit der DLL in der Hilfe zu erwähnen.
Ich habe noch Probleme mit im wesentlichen zwei Punkt:
Text hervorheben geht immerhin, aber immer nur an einer Stelle. Für mehrere Hervorhebungen gibt es offenbar SCI_SETMULTIPLESELECTION mit der Konstante 2563, wenn ich nicht irre, das bewirkt aber nichts. Im Abschnitt Multiple Selection and Virtual Space der Dokumentation steht noch einiges zu SCI_ADDSELECTION(int caret, int anchor) pp., aber das bezieht sich wohl auf Cursorpositionen? Klappt aber auch nicht. Wie geht es richtig?
Merkwürdig ist auch SCI_SETREADONLY, wenn man das auf true setzt, verschwindet der ganze Text, anstatt nur uneditierbar zu werden?
Code: Alles auswählen
If OpenWindow(0, 0, 0, 320, 200, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If InitScintilla()
ScintillaGadget(0, 10, 10, 300, 280, #Null)
; Farben zwischen aktueller Position und Anchor
ForeGround = $00|$00<<8|$ff<<16
BackGround = $ff|$ff<<8|$ff<<16
ScintillaSendMessage(0,#SCI_SETSELFORE,#True,ForeGround); Textfarbe Blau
ScintillaSendMessage(0,#SCI_SETSELBACK ,#True,BackGround); Hintergrund Weiß
ScintillaSendMessage(0,#SCI_SETREADONLY,#False) ; #true läßt gesamten Text verschwinden?
#SCI_SETMULTIPLESELECTION = 2563 ; Konstante in PB nicht definiert
ScintillaSendMessage(0,#SCI_SETMULTIPLESELECTION,#True); Bewirkt leider nichts
; Output set To red color
ScintillaSendMessage(0, #SCI_STYLESETFORE, 0, RGB(255, 0, 0))
; Set the initial text To the ScintillaGadget
text$ = "This is a simple ScintillaGadget with text..." + Chr(10) + Chr(10)
len = Len(text$)
pos = len
ScintillaSendMessage(0,#SCI_SETTEXT, 0, @text$)
ScintillaSendMessage(0,#SCI_SETCURRENTPOS,0)
ScintillaSendMessage(0,#SCI_SETANCHOR,10) ; => 10 Anfangsbuchstaben blau, klappt nur, wenn die unten zweite Textzeile gesperrt wird und umgekehrt
; Adding a second line of text with linebreak before
Text$ = Chr(10) + "Second line"
len = Len(text$)
ScintillaSendMessage(0,#SCI_APPENDTEXT, Len, @Text$)
ScintillaSendMessage(0,#SCI_SETCURRENTPOS,pos)
ScintillaSendMessage(0,#SCI_SETANCHOR,pos + 10) ; => 10 Anfangsbuchstaben blau
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Hoffel die Geduld nicht überzustrapazieren.
Re: Scintilla Anfängerfrage
Verfasst: 11.04.2011 17:51
von ts-soft
Syntacks_Error hat geschrieben:Merkwürdig ist auch SCI_SETREADONLY, wenn man das auf true setzt, verschwindet der ganze Text, anstatt nur uneditierbar zu werden?
Mit SetReadOnly wird Scintilla nicht nur uneditierbar, sondern es kann auch programmtechnisch kein
Text hinzugefügt werden! Es ist also komplett für Text gesperrt.
Re: Scintilla Anfängerfrage
Verfasst: 11.04.2011 19:49
von edel
Was genau moechtest du eigentlich?
Re: Scintilla Anfängerfrage
Verfasst: 11.04.2011 20:31
von Syntacks_Error
Vornehm ausgedrückt wäre das wohl ein "text retrieval" Progamm, das zahllose kleine Dateien (Die fleißige Mitarbeiter in Unmengen anlegen) nach Stichworten durchsucht. Index und Suche arbeiten immerhin mit einer Wortstammfunktion (Funktioniert aber bislang nur bei Substantiven ganz gut, die Deutsche Konjugation ist ein Graus) und mit einer automatischen Bewertungsfunktion (Gutes kommt nach vorne, theoretisch zumindest), deren Ergebnis durch die Nutzer auch überschrieben werden kann. Das ganze natürlich, wie sich das heute gehört, im Netzwerk. - Das habe ich schon als reine PB-Lösung, funktionert sogar besser als gedacht, nur die Darstellung der Suchergebnisse ist etwas unbefriedigend: Keine veränderliche Zeilenbreite, Ausgabe nur je eines Treffers, den nächsten gibt es erst nach einem Click, Schriftqualität nicht berauschend, obwohl als Grafik geschrieben. Dachte mir, daß da eine Ausgabe mit Scintilla ohne großen Aufwand (Öhm) wesentlich flexibler ist. - Beim Hervorheben geht es darum, daß einmal so eine Art Kategorie und dann die Suchwörter markiert werden, um die Ausgabe ein bißchen zu strukturieren. - Enhalten ist auch eine Komponente zur Bewertung der Datensätze (Die wird dann bei der Reihenfolge der Ausgabe berücksichtigt), ich habe aber bisher keine Vorstellung, wie ich die bei Scintilla überhaupt zuordnen kann, wenn mehrere in einem Scrollbereich erscheinen ...