|
coloration syntaxique Scintillanet/scintilla |
Débuté par Renier Florent, 07 déc. 2017 16:10 - 4 réponses |
| |
| | | |
|
| |
Posté le 07 décembre 2017 - 16:10 |
Bonjour,
Je souhaite utiliser un champ de saisie avec une coloration syntaxique. J'ai cherché assez longtemps et les versions qui fonctionnent de scintillanet avec windev et comment le faire fonctionner. je partage donc mon expérience. Au final quand on sait c'est très simple .
je suis en windev 22, je veux utilisé le composant scintillanet v2.5.2
lien de téléchargement : http://download-codeplex.sec.s-msft.com/Download/Release…
Il faut copier les dll : scintillanet.dll et SciLexer.dll dans le répertoire de l'éxécutable. J'ai ajouté dans les assemblages .NET du projet la dll : scintillanet.dll j'ai créé une fenêtre vierge dans laquelle j'ai placé un champ de type ".NET 2.0 (winform)" de windev , portant le nom : DOTNET_scintilla Dans les propriétés générales du champ, il faut affecter la classe : Scintillanet.scintilla
Pour modifier le type de syntaxe du champ text :
DOTNET_scintilla.ConfigurationManager.Language="html"
Pour ajouter du text par programmation :
DOTNET_scintilla.text="épilogue"
Voila c'est très simple, mais j'ai un problème, avec les accents ! et je ne m'en sort pas. je sais que c'est une histoire de conversion utf8, unicode, ansi
Mon problème est simple quand j'affecte "épilogue", l'accent est remplacé par d'autre caractère, dû à un problème de conversion.
Le composant scintillanet, contient des propriétés qui permet de paramétrer l'encodage du champ text, par exemple
DOTNET_scintilla.Encoding=Encoding.UTF8
De base le champs est paramétré avec Encoding.ASCII
j'ai utilisé des chaines unicode de windev, voici le code du bouton "set text" de mon exemple
MonBufferUnicode est une chaîne UNICODE = AnsiVersUnicode("épilogue",alphabetUTF8)
SAI_SansNom1+=[CR]+"Paramétrage initial du composant scintilla"+CR SAI_SansNom1+=[CR]+"DOTNET_scintilla.Encoding.CodePage= "+DOTNET_scintilla.Encoding.CodePage SAI_SansNom1+=[CR]+"DOTNET_scintilla.Encoding.EncodingName = "+DOTNET_scintilla.Encoding.EncodingName
SAI_SansNom1+=CR+CR+"Passage à l'encodage : utf8" DOTNET_scintilla.Encoding=Encoding.UTF8
DOTNET_scintilla.AppendText(MonBufferUnicode ) SAI_SansNom1+=[CR]+"DOTNET_scintilla.Encoding.CodePage= "+DOTNET_scintilla.Encoding.CodePage SAI_SansNom1+=[CR]+"DOTNET_scintilla.Encoding.EncodingName = "+DOTNET_scintilla.Encoding.EncodingName
DOTNET_scintilla.AppendText(CR+"épilogue" ) DOTNET_scintilla.AppendText(UTF8VersChaîne(CR+"épilogue") )
j'ai pas réussi à afficher correctement le mot "épilogue" dans le champ text.
Si quelqu'un à la solution, et je sais qu'elle est simple, je suis preneur. J'ai pu voir sur le forum, des images de fenêtre embarquant ce composant, donc je sais que ça marche... |
| |
| |
| | | |
|
| | |
| |
Posté le 07 décembre 2017 - 18:00 |
j'ai trouvé une autre solution, en passant par l'api
pour récupérer le texte:
SCI_GETTEXT est un entier=2182 SCI_GETTEXTLENGTH est un entier=2183
bufText est un Buffer
nDocumentLength is int = SendMessage( DOTNET_scintilla.Handle, SCI_GETTEXTLENGTH, 0, 0 ) bufText = Complete(bufText, nDocumentLength) SendMessage( DOTNET_scintilla.Handle, SCI_GETTEXT, nDocumentLength + 1, &bufText ) sTr est une chaîne = bufText[[1 TO nDocumentLength]]
SAI_SansNom1+=[CR]+sTr
pour ajouter du texte:
SCI_APPENDTEXT est un entier = 2282 bufText est un Buffer = "éponge" SendMessage( DOTNET_scintilla.Handle, SCI_APPENDTEXT, Length(bufText), &bufText )
mais si vous avez la réponse avec la méthode native du composant appenText() je suis preneur |
| |
| |
| | | |
|
| | |
| |
Posté le 10 mai 2018 - 18:54 |
Hello,
merci pour le partage, le lien vers les dll est mort, tu aurais les fichiers par hasard ?
Excellente journée
Olivier |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 11 mai 2018 - 07:26 |
| |
| |
| | | |
|
| | |
| |
Posté le 11 mai 2018 - 18:20 |
| |
| |
| | | |
|
| | | | |
| | |
|