PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Utilisation de l'assemblage Scintilla
Utilisation de l'assemblage Scintilla
Débuté par hpascal, 21 mai 2020 15:28 - 21 réponses
Membre enregistré
342 messages
Popularité : +30 (32 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é
962 messages
Popularité : +183 (185 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é
342 messages
Popularité : +30 (32 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é
962 messages
Popularité : +183 (185 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<FastColoredTextBoxNS.TextChangedEventArgs>"))


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






--
Ami calmant, J.P
Membre enregistré
962 messages
Popularité : +183 (185 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é
342 messages
Popularité : +30 (32 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é
342 messages
Popularité : +30 (32 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<FastColoredTextBoxNS.TextChangedEventArgs>"))
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)


Procedure _MouseDown(sender <utile>, 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

Procedure _TextChanged(sender <utile>, args est un TextChangedEventArgs <utile>)
Trace("Texte modifié : " + args.ChangedRange.Text )


--
Pascal H. http://phapps.e-monsite.com
Posté le 20 septembre 2020 - 13:57
Hello,

est-ce que par hasard tu as réussi a mettre en place le code WL avec cet assemblage ?
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 20 septembre 2020 - 15:31
Bonjour Olivier

Non désolé, j'utilise juste le paramètre fourni pour le SQL.
Côte personnalisation je n'ai pas du tout regardé.

Si tu trouves comment faire ça pourra intéresser du monde :-)
Il y a un projet exemple (C# et VB) livré avec, regarde de ce côté là.

Pascal

--
Pascal H. http://phapps.e-monsite.com
Posté le 09 novembre 2020 - 13:16
Bonjour,
je me permets de relancer le post :
- avez-vous réussi a mettre le WL dans le FastColoredTextBox ?
- pour Scintilla, les évènement "touche enfoncée" et "touche relachée" ne fonctionne pas, le code n'est pas exécuté.
Une idée du pourquoi ?

Merci d'avance et excellente journée
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 09 novembre 2020 - 15:15
Bonjour Olivier

Je n'ai pas essayé d'implémenter WL, je n'en ai pas le besoin pour l'instant (+ manque de temps)
Concernant les événements KeyDown et KeyPress ils fonctionnent très bien

Exemple pour KeyDown :
DOTNET_Scintilla.add_KeyDown(DotNetDélégué(_KeyDown, "System.Windows.Forms.KeyEventHandler"))

Procedure _KeyDown(pclParam1 est System.Object <utile>, pclParam2 est KeyEventArgs <utile>)
// https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.forms.keyeventhandler?view=netcore-3.1
// https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.forms.keyeventargs?view=netcore-3.1

clKeyCode est System.Windows.Forms.Keys
clKeyCode <- pclParam2.KeyCode

_Trace(clKeyCode.value__)


Par contre, d'autres évènements ne fonctionnent pas, d'où mon passage sur FastColoredTextBox.
FastColoredTextBox est fonctionnel tout de suite pour du SQL, c'est ce qu'il me fallait.

Mais le sujet m’intéresse et j'y reviendrais :-)

--
Pascal H. http://phapps.e-monsite.com
Posté le 10 novembre 2020 - 13:06
:merci:

Effectivement ... je passais bêtement par les fonctions internes du champ .net de Windev.

Je suppose que les actions sont interceptées avant par l'assemblage, avec ton exemple c'est parfait !!

Un grand merci !
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 10 novembre 2020 - 13:54
C'est Jurassic Pork qu'il faut remercier :-)

--
Pascal H. http://phapps.e-monsite.com
Posté le 11 novembre 2020 - 08:01
Bonjour
Je voudrais pouvoir utiliser FastColoredTextBox dans un projet
N'ayant jamais utilisé un champ ou composant externe avec WinDev , j'avoue être complètement perdu pour la mise en œuvre
Je ne sais pas par exemple ou mettre la dll et ce qu'il faudrait mettre en plus et comment l'intégrer dans un projet .

Je sais que c'est un peut gonflé de ma part et je m'en excuse sincèrement, mais auriez-vous un exemple de projet basic que je pourrais analyse pour voir comment cela fonctionne .

Encore mille excuses pour l'audace.
Bonne journée.
Membre enregistré
505 messages
Popularité : +18 (18 votes)
Posté le 11 novembre 2020 - 13:16
Bonjour Erick,

Une bonne idée serait de "remonter" les liens donnés dans le premier message de cette discussion.

Pour commencer :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/212635-net-dotnetdelegue-scintillanet-214474/read.awp

Cette discussion pointe elle-même sur une autre discussion qui est "pratique" pour la mise en œuvre, surtout le 1er message :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/212560-coloration-syntaxique-scintillanet-scintilla/read.awp

:)
Posté le 12 novembre 2020 - 15:18
Bonjour
Merci beaucoup pour la réponse , je viens de regarder et cela vas effectivement beaucoup m'aider
je vous souhaite une excellente journée .
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 13 novembre 2020 - 11:30
Je vais ajouter un petit projet avec un exemple pour les deux composants.
Je crois qu'on ne peut joindre un fichier ici, je passerai par le dépôt PCSOFT.

--
Pascal H. http://phapps.e-monsite.com
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 13 novembre 2020 - 12:20
Nouveau post publié avec un projet exemple

--
Pascal H. http://phapps.e-monsite.com
Posté le 02 décembre 2020 - 15:24
Merci Pascal pour cet exemple que j'ai utilisé immédiatement !

Dans mon cas, j'ai une liste de tables et, pour chacune, leurs colonnes que je souhaite pouvoir déplacer dans un ScintillaNet configuré pour SQL.

J'essaye maintenant d'implémenter du drag and drop mais malgré mes tâtonnement, je n'arrive pas à le faire fonctionner.

Quelqu'un a-t-il déjà joué avec cet événement ?
Posté le 10 décembre 2020 - 13:14
Hello,

Je butte sur le problème de l'interception des ctrl-s qui me font des entrées DC3comme expliqué plus par hpascal plus haut ... j'essaie de mettre en place certaine fonction ( comme le Ctrl.s ) , sans succès pour l'instant ...

A quel endroit vous filtrez ça ? j'ai essayé un peu tout ce que je connaissais ... sauf la solution je crois ... ;(
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 10 décembre 2020 - 20:02
Bonjour

C'est pour ce genre de choses que je suis passé à FastColoredTextBox qui fonctionne beaucoup mieux (pour mon usage en tout cas)

--
Pascal H. http://phapps.e-monsite.com
Posté le 28 janvier 2022 - 16:17
Bonjour
si quelqu'un arrive à faire fonctionner l'autocomplète ?

Merci d'avance