« Script trigger for mo… | Home | 18 years of FileMaker… »

Tips and tricks for Scintilla Control

Over the last weeks, we improved our example project and helped a lot of customers with using our ScintillaControlMBS (and DesktopScintillaControlMBS) control. Let us show you a few tips, we gave to them:

How to avoid loosing focus with contextual menus?

You can use your own contextual menus with Scintilla. But some customers had the problem, that focus was lost. If you have that problem, you can simply add a call to GrabFocus method to the ConstructContextualMenu and make sure the focus is set back to the control. The focus can be lost, if the right click brings focus to another control or the window.

Autocomplete not working for unicode characters?

One client noticed, that auto complete in our example didn't work for accented characters. But that one was easily fixed by switching to string functions working on bytes. The accented characters in UTF-8 are multiple bytes and the character functions didn't pick up the right completion. We fixed the example and if needed, you can just copy the code from StartAutoComplete method to update your copy. Now it works fine with ú í á æ þ ö é ð and ý.

Can we wrap long lines instead of scrolling?

If you like to wrap lines, you can change the WrapMode property. You have four choices: kWrapNone for no wrapping, kWrapWord to wrap on word or style boundaries, kWrapWhiteSpace to wrap on white space or kWrapChar to wrap after any character.

Can the control have a border on Windows to look more like TextArea?

We added the HasBorder property in the v22.4 plugin, so you can turn it on. Please do that either in the IDE or in the Prepare event, so it is done before the control is created. Once created, you can't change the border status.

Can I change the color for selected text?

Yes, you can do that with changing the selection fore and back color. For example by using the user's highlight color and then putting in white text color:

c.SetSelBackColor(True, Color.HighlightColor)
c.SetSelForeColor(True, Color.White)

How to disable the context menu?

If you like to make your own or have none, you can tell Scintilla to not show one:

c.UsePopup(kPopUpNever)

Alternatively you can use kPopUpText to only show the menu, when clicking on text.

How to use system font for texts?

Before you define derived styles, you may want to change the common style and put in the system font name:

Dim style As ScintillaStyleMBS = c.Style(ScintillaStyleMBS.kStylesCommonDefault)
// Set font to be system font
style.Font = SystemInformationMBS.SystemFont

Why do I get text with extra NULL byte?

Please update the plugin. Earlier versions had a few bugs, where text properties had either extra NULL bytes or missed a character. That was due the fact that C strings have a NULL byte to mark the end. And the documentation was not always clear which property reports the length with or without the NULL byte.

How do I get a file dropped on the control?

Please check the URIDropped event, which should report the file URL for the file.
Since Scintilla captures the drop, the Drop event from Xojo will not work.

Can we do search and replace with the control?

Yes, please review the newer example project, which shows how to show a search window. Scintilla can perform the search for you in the text and optionally use regular expressions.

What languages can be handled by syntax coloring?

SciTE currently is able to syntax style these languages (* denotes support for folding):
  • Abaqus*
  • Ada
  • ANS.1 MIB definition files*
  • APDL
  • Assembler (NASM, MASM)
  • Asymptote*
  • AutoIt*
  • Avenue*
  • Batch files (MS-DOS)
  • Baan*
  • Bash*
  • BlitzBasic*
  • Bullant*
  • C/C++/C#*
  • Clarion*
  • cmake*
  • COBOL
  • Coffeescript
  • conf (Apache)*
  • CSound*
  • CSS*
  • D
  • diff files*
  • E-Script*
  • Eiffel*
  • Erlang*
  • Flagship (Clipper / XBase)*
  • Flash (ActionScript)*
  • Fortran*
  • Forth*
  • GAP*
  • Gettext
  • Go*
  • Haskell
  • HTML*
  • HTML with embedded JavaScript, VBScript, PHP and ASP*
  • Gui4Cli*
  • IDL - both MSIDL and XPIDL*
  • INI, properties* and similar
  • InnoSetup*
  • Intel HEX*
  • Java*
  • JavaScript*
  • JSON and JSON-LD
  • KiXtart
  • LISP*
  • LOT*
  • Lout*
  • Lua*
  • Make
  • Matlab*
  • Maxima*
  • Metapost*
  • MMIXAL
  • MSSQL
  • Modula 3
  • Nimrod
  • nnCron
  • NSIS*
  • Objective C
  • Objective Caml*
  • Opal
  • Octave*
  • Pascal/Delphi*
  • Perl, most of it except for some ambiguous cases*
  • PL/M*
  • Progress*
  • PostScript*
  • POV-Ray*
  • PowerBasic*
  • PowerShell*
  • PowerPro
  • PureBasic*
  • Python*
  • R*
  • Rebol*
  • Registry
  • Ruby*
  • Rust
  • Scheme*
  • scriptol*
  • SORCUS Installation
  • Specman E*
  • Spice
  • Smalltalk
  • SQL and PLSQL
  • S-Record
  • Swift
  • TADS3*
  • TeX and LaTeX
  • Tcl/Tk*
  • Vala*
  • VB and VBScript*
  • Verilog*
  • VHDL*
  • XML*
  • YAML*
If you need help to translate one of them from SciTE to Xojo, please let us know.

How can I show my own content over the Scintilla Control?

Since the control draws itself and you like to avoid overdrawing it, we suggest to look into OverlayMBS class for content on top. Please note that you may need to yourself move the overlay with the parent window.

Can I make the control read only?

Yes, we added a ReadOnly property for this. Any changes to the text will be rejected.

Can we do auto indent?

Yes, the example got that added later.
Check the example for the CharacterAdded event, where we detect returns and then add tabs for the next line to match the last line.

How to scroll vertically in code?

Please set the FirstVisibleLine property.

See also
Please do not hesitate to contact us with your questions.
09 10 22 - 12:17