PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Utilisation de l'assemblage Scintilla
Utilisation de l'assemblage Scintilla
Débuté par hpascal, 21 mai 2020 15:28 - 6 réponses
Membre enregistré
282 messages
Popularité : +8 (8 votes)
Posté le 21 mai 2020 - 15:28
Bonjour

Je fais des essais avec l'assemblage DotNet Scintilla trouvé ici : https://github.com/jacobslusser/ScintillaNET
Je suis parti de l'exemple fourni par Jurassic Pork dans ce post :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/212635-net-dotnetdelegue-scintillanet-214474/read.awp…
Merci à lui

Pour moi le but est d'afficher et manipuler du code SQL

Ça fonctionne plutôt pas mal
Le seul problème que j'ai est la détection de la modification dans le champ DotNet

J'utilise ce code pour intercepter l'évènement de modification :
// Ne fait rien :
DOTNET_Scintilla.add_TextChanged(DotNetDélégué(_TextChange, "System.EventHandler"))


Ça ne plante pas mais ça n'a aucun effet !

J'utilise d'autres évènements qui fonctionnent très bien :
// Fonctionne :
DOTNET_Scintilla.add_KeyDown(DotNetDélégué(_KeyDown, "System.Windows.Forms.KeyEventHandler"))
DOTNET_Scintilla.add_MouseDown(DotNetDélégué(_MouseDown, "System.Windows.Forms.MouseEventHandler"))
DOTNET_Scintilla.add_GotFocus(DotNetDélégué(_GotFocus, "System.EventHandler"))
DOTNET_Scintilla.add_SizeChanged(DotNetDélégué(_SizeChanged, "System.EventHandler"))


Je dois louper quelque chose ...
Auriez-vous une idée ?

--
Pascal H. http://phapps.e-monsite.com
Membre enregistré
745 messages
Popularité : +13 (13 votes)
Posté le 22 mai 2020 - 17:56
hello,
non tu ne loupes rien, il y a pas mal d'événements de ScintillaNet qui ne fonctionnent pas dans windev. J'ai essayé l'événement TextChanged avec une textbox dans Windev, cela fonctionne.

--
Ami calmant, J.P
Membre enregistré
282 messages
Popularité : +8 (8 votes)
Posté le 22 mai 2020 - 19:35
Salut Jurassic Pork
Merci de ta réponse

J'ai regardé un peu dans les sources de l'assemblage. Visiblement TextChanged est un évènement hérité et donc pas directement implémenté par l'assemblage.
Comme d'autres d'ailleurs. Ceci certains évenéments implémentés ne fonctionnent pas non plus, comme ZoomChanged.

Bon j'arrive à faire à peu près ce que je veux. Avec KeyDown et KeyPress je gère l'état modifié, j'intercepte les raccourcis que j'utilisais etc.
Seul CTRL S mi pose problème car ça génère un device control 3, affiché "DC3" dans le champ. Je suis obligé de nettoyer quand j'intercepte ça (idem pour CTRL F ou CTRL H)





Cet assemblage n'est plus maintenu il me semble, c'est dommage ...
Pas le temps de me mettre à dotnet :-(

--
Pascal H. http://phapps.e-monsite.com
Membre enregistré
745 messages
Popularité : +13 (13 votes)
Posté le 23 mai 2020 - 00:45
hello,
sinon en équivalent, il y a aussi le contrôle dotnet FastColoredTextBox disponible ici :
https://github.com/PavelTorgashov/FastColoredTextBox
Voici un exemple d'utilisation pour coloration syntaxique de texte html :
FCTB.Language = Language.HTML
FCTB.Text = fChargeTexte("M:\test\example.html")
FCTB.add_TextChanged(DotNetDélégué("TexteChangé","EventHandler"))


avec la procédure TexteChangé :
PROCEDURE TexteChangé(sender,args est un TextChangedEventArgs)
Trace("Texte Changé : " + args.ChangedRange.Text )






--
Ami calmant, J.P
Membre enregistré
745 messages
Popularité : +13 (13 votes)
Posté le 23 mai 2020 - 00:54
oops le code:wl m'a changé une ligne il y a une erreur dans le add_TextChanged , c'est :

FCTB.add_TextChanged(DotNetDélégué("TexteChangé","EventHandler<FastColoredTextBoxNS.TextChangedEventArgs>"))

--
Ami calmant, J.P
Membre enregistré
282 messages
Popularité : +8 (8 votes)
Posté le 23 mai 2020 - 12:06
Super, merci pour l'info
Je vais essayer et comparer avec Scintilla
Je ferai un retour après mes essais
Bon week-end

--
Pascal H. http://phapps.e-monsite.com
Membre enregistré
282 messages
Popularité : +8 (8 votes)
Posté le 29 mai 2020 - 11:43
Un petit retour sur l'utilisation de FastColoredTextBox
https://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting-2
https://github.com/PavelTorgashov/FastColoredTextBox

Ça fonctionne plutôt pas mal
Bon il y a plein de choses que je ne sais pas encore faire mais ça viendra ... Il faut trouver la bonne syntaxe

Voici quelques exemples d'utilisation avec un champ que j'ai nommé DOTNET_FCTB :

DOTNET_FCTB.Language = Language.SQL

// police par défaut
clDefaultFont est System.Drawing.Font("Consolas", 9)
DOTNET_FCTB.Font = clDefaultFont

// Zoom à 90%
DOTNET_FCTB.Zoom = 90 // ou .set_Zoom(90)

// ajout automatique du caractère de fermeture
DOTNET_FCTB.AutoCompleteBracketsList= "()[]{}"

DOTNET_FCTB.AllowDrop = Vrai
DOTNET_FCTB.BackColor = Color.White
DOTNET_FCTB.CurrentLineColor = Color.LightBlue // Couleur ligne en cours
DOTNET_FCTB.SelectionColor = Color.FromArgb(153,201,239) // Couleur sélection
DOTNET_FCTB.ShowLineNumbers = Vrai // Affichage des N° de ligne
DOTNET_FCTB.UpperCase() // Passe la sélection en majuscules

// Quelques événements :
DOTNET_FCTB.add_KeyDown(DotNetDélégué(_KeyDown, "System.Windows.Forms.KeyEventHandler"))
DOTNET_FCTB.add_MouseDown(DotNetDélégué(_MouseDown, "System.Windows.Forms.MouseEventHandler"))
DOTNET_FCTB.add_TextChanged(DotNetDélégué(_TextChanged,"EventHandler"))
DOTNET_FCTB.add_ZoomChanged(DotNetDélégué(_ZoomChanged,"EventHandler"))

// Alimentation
DOTNET_FCTB.Text = "SELECT * FROM MaTable"
// ou
DOTNET_FCTB.OpenFile("c:\temp\exemple.sql", Encoding.UTF8)


PROCÉDURE _MouseDown(sender , pclArgs est MouseEventArgs)
clBouton est System.Windows.Forms.MouseButtons
clBouton <- pclArgs.get_Button()

SI clBouton = MouseButtons.Right ALORS
// Ouverture d'une menu contextuel perso
OuvreMenuContextuel(MENU_FCTB)
FIN

PROCÉDURE _TextChanged(sender , args est un TextChangedEventArgs )
Trace("Texte modifié : " + args.ChangedRange.Text )


--
Pascal H. http://phapps.e-monsite.com