|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Accueil → WINDEV 2024 → Equivalent de Word dans Windev - TXtextControl - patch Windev pour faire fonctionner le correcteur |
Equivalent de Word dans Windev - TXtextControl - patch Windev pour faire fonctionner le correcteur |
Débuté par Christophe Navarro, 08 oct. 2013 15:29 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 89 messages Popularité : +4 (4 votes) |
|
Posté le 08 octobre 2013 - 15:29 |
Bonjour à tous, j'utilise dans un projet l'activeX TextControl en association avec l'assemblage .Net TxSpellChecking.
Ces éléments permettent d'intégrer dans un projet Windev (ou autre environnement) un éditeur de texte compatible 100% Word avec de nombreuses fonctionnalités et tout ca sans avoir besoin que Word soit installé sur la machine.
Aprés de nombreux obstacles rencontrés j'ai fini par arriver à faire fonctionner le tout, en effet un petit manque dans Windev empechait l'utilisation du correcteur orthographique (speelchecking), PCsoft a rapidemment émis un patch correctif pour corriger ce manque (merci à eux) que vous pouvez télécharger ici version 18 63c mini nécessaire) : http://stg.webdev.info/Telechargement_Support_WEB/FR/telec_ST.awp… Ce correctif sera inclus dans la version 19 de Windev.
J'ai donc décidé de partager mon expérience afin d'aider ceux qui essayent d'utiliser ce composant, je n'ai pas encore fini d'explorer toutes ses possibilités donc les compléments d'information et autres critiques sont les bienvenues.
1 - L'éditeur de texte
a - les controles activeX
Au nombre de 5 : la barre de controle, le corps du document, la barre de statut, les règles horizontale et verticale
il faut commencer par relier les objets entre eux, les 2 barres et les 2 règles sont associés au corps en indiquant leur n° handle au corps, voici mon code d'initialisation :
ax_corps>>buttonbarhandle=ax_bar>>hwnd ax_corps>>statusbarhandle=ax_status>>hwnd ax_corps>>rulerhandle=ax_regleH>>hwnd ax_corps>>verticalrulerhandle=ax_regleV>>hwnd ax_regleV>>direction=1
b - les fonctions de base (ouvrir un document Word, l'enregistrer, l'imprimer)
Pour ouvrir un document Word il existe plusieurs options a passer à la fonction Load() décrite dans la doc, dans le code ci-dessous j'ouvre un document contenant des champs de fusion au format Word, avant d'executer la fonction Load() il faut paramétrer certains attributs afin de rendre 'compatible' les champs de fusion Word avec les fonctions publipostage du composant :
fic est chaîne
SI ficdoc="" ALORS fic="*.docx" SINON fic=fExtraitChemin(ficdoc,fFichier+fExtension) FIN
ficdoc = fSélecteur("", fic, "Sélectionnez un fichier...", "Tous les fichiers (*.*)" + TAB + "*.*" + RC + "Document Word" + TAB + "*.docx" + RC + "Document Word 97-2003" + TAB + "*.doc", "*.docx", fselExiste)
SI ficdoc<>"" ALORS ax_corps>>enablespellchecking=0 ax_corps>>LoadSaveAttribute(15) = True ax_corps>>LoadSaveAttribute(17) = "MERGEFIELD" + Caract(9) + "PRINTDATE" SI ax_corps>>load(ficdoc,-1,13)=0 ALORS ficdoc="" Erreur("Problème à l'ouverture du fichier") SINON MaFenêtre..Titre+=" - "+ficdoc FIN
ax_corps>>enablespellchecking=1 FIN
Pour enregistrer le document qu'on vient de modifier ou créer, rien de spécial, fonction Save() :
fic,rep est chaîne
SI ficdoc="" ALORS fic="nomdoc.docx" ficdoc = fSélecteur(rep, fic, "Sélectionnez l'emplacement et le nom du fichier à enregistrer...", "Tous les fichiers (*.*)" + TAB + "*.*" + RC + "Document Word" + TAB + "*.docx" + RC + "Document Word 97-2003" + TAB + "*.doc", "*.docx", fselCrée + fselExiste) FIN
SI ficdoc<>"" ALORS SI ax_corps>>save(ficdoc,-1,13)=0 ALORS Erreur("Problème à l'enregistrement du fichier") FIN FIN
Pour imprimer :
SI iAperçu ALORS ax_corps>>PrintDevice=Handle(Image1) ax_corps>>PrintPage(1)
SINON SI ficdoc="" ALORS AX_enreg_doc() FIN SI ficdoc<>"" ALORS ax_corps>>printdialog(ficdoc) FIN
c - Autres fonctionnalités
vous pouvez modifier tout l'environnement, personnaliser la barre de controle, ouvrir des boites de dialogues (voir la doc), voici qq ex :
ax_corps>>viewmode=2 ax_bar>>poszoom=0 ax_bar>>posgrowfont=1004 ax_bar>>posshrinkfont=1005 ax_bar>>posshrinkfont=5
Pour changer la langue des menus :
ax_corps>>language=49 ax_corps>>language=33
d - Astuce
Pour ne pas passer par l'installateur de TX pour activer l'activeX sur vos postes clients vous pouvez simplement copier les Dll Tx19xxx.dll et lancer la commande RegSvr32.exe pour déclarer l'ocx à Windows :
repexe est chaîne=ComplèteRep(fRepExe()) LanceAppli(ComplèteRep(SysRep(srSystème))+"regsvr32.exe "+Caract(34)+repexe+"tx4ole19.ocx"+Caract(34)+" /s")
2 - Le correcteur orthographique
Pour activer le correcteur orthographique la ca se complique un peu, celui-ci n'est pas intégré à l'activeX et il faut intégrer un assemblage .Net pour y arriver. il faut commencer par télécharger et installer le .net TX Spell Checking : http://www.textcontrol.com/en_US/products/spelldotnet/overview/
Puis ensuite télécharger ce qu'ils appellent le 'wrapper' (nommé AxTxSpell) pour relier notre activeX à l'assemblage .Net : http://www.textcontrol.com/en_US/blog/archive/20121121/
Ce fichier compressé n'est pas un programme installable, c'est un code source (fichier AxTXSpell.vbproj) écrit en VB qu'il faut Builder depuis visual studio (vous pouvez télécharger la version express gratuitement).
Une fois buildé vous obtiendrez un fichier AxTXSpell.dll qu'il faudra copier à coté de votre exe. c'est cette classe qui sera intégrée dans votre projet Windev et permettra de piloter le .Net.
Téléchargez l'aide (fichier AxTXSpell.chm) qui est bien faite et qui pourra vous aidez (notament pour le déploiement sur les postes clients dans la partie Distributing your applications). Avant d'intégrer la dll au projet il vous faudra d'abord déclarer à Windows la dll avec la commande RegAsm.exe :
repexe est chaîne=ComplèteRep(fRepExe()) LanceAppli("C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe "+Caract(34)+repexe+"AxTXSpell.dll"+Caract(34))
Pour implémenter ce correcteur :
Tout d'abord assurez vous que celui-ci soit activé avec la propriété ax_corps>>enablespellchecking=1 (a mettre dans votre code d'initialisation)
Puis dans votre projet Windev, intégrer le 'wrapper' AxTxSpell.dll en allant dans le menu atelier - .Net - Liste des assemblages .Net, cliquez sur 'Parcourir...' et sélectionnez la dll. Déclarer ensuite la classe dans votre code d'initialisation :
clSpellCheck est un AxTXSpell.AxTXSpellChecker
Pour relier l'activeX au correcteur et que la correction se fasse à chaque modification du texte, il faut utiliser l'événement 'SpellCheckText' de l'ActiveX, dans votre code d'initialisation indiquez ceci :
ActiveXEvénement("SpellEvent",ax_corps,"SpellCheckText")
Voici le code de ma procédure Windev SpellEvent :
Procedure SpellEvent(Text,tbpos)
TBiw est un tableau de AxTXSpell.IncorrectWord()
v,i,nbsugg est un entier c est chaîne sugg est chaîne
clSpellCheck.Check(Text) tbpos<-clSpellCheck.MisspelledWordPositions
TBiw=clSpellCheck.IncorrectWords
Libellé4=""
SI TBiw<>Null ALORS POUR v=1 _A_ Dimension(TBiw) SI TBiw[v]<>Null ALORS
SI Libellé4<>"" ALORS Libellé4+=" " c=TBiw[v].text Libellé4+=c FIN FIN FIN
v=0 SI tbpos<>Null ALORS Libellé4+=RC POUR TOUT i DE tbpos v++ SI Modulo(v,2)=0 ALORS Libellé4+="-" SINON SI v>1 ALORS Libellé4+=" " FIN Libellé4+=i FIN SINON Libellé4="" FIN
Libérer TBiw
le 1er paramètre de cette procédure est prérempli par l'activeX avec le texte du document. le 2ème paramètre est un tableau de classes incorrectWords qu'il faut renseigner pour le retourner à l'activeX. la propriété MisspelledWordPositions du wrapper fournit ce tableau, il y a juste à l'affecter directement au 2eme paramètre de la procédure. Ce tableau contient en faite les positions début et fin de chaque mots mal orthographiés et provoque leur soulignement en rouge une fois passé à l'activeX. C'est ce passage de paramètre qui n'était pas possible avec Windev avant que je demande à PCsoft un correctif (à faire sinon vous n'aurez pas le soulignement en rouge), vous pouvez le télécharger ici : http://stg.webdev.info/Telechargement_Support_WEB/FR/telec_ST.awp…
Pour avoir des suggestions de mots on peut utiliser les méthodes CreateSuggestions() et get_getSuggestions(). Cette petite procédure retourne une liste de suggestions (3 maxi) dans un tableau de chaines :
Procedure recup_suggestions(texte_a_analyser) TBsugg est un tableau de chaîne clSpellCheck.CreateSuggestions(texte_a_analyser,3) nbsugg=clSpellCheck.Suggestions SI nbsugg>0 ALORS TBsugg=clSpellCheck.get_getSuggestions() RENVOYER TBsugg SINON RENVOYER null FIN
on pourrait ajouter ces suggestions dans un menu contextuel en cliquant sur un mot par ex mais je n'ai pas encore planché sur la cas, je ne sais pas si on peut modifier le menu contextuel de l'activeX, si qq'un a une expérience sur ce sujet elle sera la bienvenue !
3 - Les dictionnaires
Par défaut le dictionnaire Anglais est utilisé par le correcteur, il est possible d'en ajouter d'autres, ce sont de simples fichiers au format OpenOffice. Le dictionnaire francais s'appelle fr.aff, vous pouvez télécharger tout les dicos ici : http://www.textcontrol.com/en_US/downloads/dictionaries/ Voici le code pour activer un nouveau dictionnaire (le correcteur va chercher le dico dans le sous répertoire 'Dictionaries' de votre appli) :
cldictionaryFR est un AxTXSpell.OpenOfficeDictionary(ComplèteRep(fRepExe())+"Dictionaries\fr.aff") clSpellCheck.AddOpenOfficeDictionary(cldictionaryFR) cldictionaryFR.IsSpellCheckingEnabled=1 cldictionaryFR.IsGetSuggestionsEnabled=1
4 - le publipostage
pour l'instant je teste les diverses fonctions de manipulation des champs de fusion avec ce genre d'instructions :
ax_corps>>FieldInsert("") i=ax_corps>>FieldCurrent ax_corps>>Fielddata(i)="prenom" ax_corps>>FieldEditAttr[i]=0x10 ax_corps>>fieldtext="chris" ax_corps>>FieldChangeable=1 ca me créé bien un champ sur fond gris affiché 'chris', le curseur de la souris change en survol... je continue mes tests dans le but de pouvoir faire une fusion dans un nouveau document (je sais déjà qu'il faut utiliser un 2eme activeX textcontrol avec la méthode ax_2emeCorps>>LoadFromMemory(ax_corps>>SaveToMemory(13,1),13,1)
si vous avez des conseils, n'hésitez pas... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 89 messages Popularité : +4 (4 votes) |
|
Posté le 19 février 2014 - 01:15 |
Je fais un petit ajout à mon précédent post, je cherchai comment faire un apercu avant impression avec TxTextControl et finalement c'est assez simple : il faut récupérer le handle du device context d'un champ image et l'indiquer à la propriété Ax_corps>>PrintDevice (à la place du hdc de l'imprimante).
Cet exemple affiche l'apercu de la 1ère page avec un zoom à 25% :
Ax_corps>>PrintDevice=API("user32.dll","GetDC",Handle(Image1)) ax_corps>>PrintZoom=25 ax_corps>>printpage(1)
Muni de ces fonctions il devient facile de créer une fenetre affichant un apercu avant impression (par ex pour visualiser la fusion d'un publipostage) |
| |
| |
| | | |
|
| | |
| |
Posté le 19 février 2014 - 10:24 |
Bonjour Chris,
merci pour le partage car ce sujet est très intéressant. Est-il possible d'avoir un projet pour voir en application ce fameux module ?
dans tout les cas félicitation pour tes recherches. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 89 messages Popularité : +4 (4 votes) |
|
Posté le 19 février 2014 - 15:03 |
Bonjour Cedric,merci, je ne peux pas extraire ma fenetre de mon projet pour en faire un projet autonome (trop de liens...), désolé, mais j'essaierai de prendre le temps de le faire car c'est plus parlant avec un exemple concret c'est sur. Il va falloir que tu prennes un petit moment pour télécharger et installer TxTextControl version ActiveX mais ensuite l'implémentation dans Windev est trés simple si tu suis mes instructions. Ce qui est plus long c'est de 'brancher' le correcteur orthographique à cause du wrapper qu'il faut builder avec VisualBasic si tu ne l'as pas déjà.
Bon dev |
| |
| |
| | | |
|
| | |
| |
Posté le 21 février 2014 - 02:08 |
c'est un sujet qui m'intéresse j'essaierai de prendre un peu de temps pour me lancer dedans car l'idée de m'affranchir de word me plaît beaucoup. Dans tous les cas si tu peux mettre à dispo un projet minimaliste je suis preneur.
Bon dev. |
| |
| |
| | | |
|
| | |
| |
Posté le 11 mars 2014 - 11:53 |
Bonjour,
J'utilise TXTCONTROL depuis des années mais je bute souvent sur les mêmes problèmes, à savoir :
- l'enregistrement : regsrv32.exe a besoin de droits administrateur sur le pc, un utilisateur classique ne peut y arriver, je me trompe? - je n'arrive pas à générer une table des matières...
Bon dev à tous,
Albert Lemoine |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2014 - 16:59 |
Bonjour,
Déjà, merci pour toutes ces informations, cela m'a bien aidé!
Je me permets juste quelques remarques : - je n'arrive pas à faire fonctionner l'activeX avec les docX, j'ai donc du repasser au format doc pour que cela fonctionne. - j'avais systématiquement une erreur avec le dictionnaire français, pour corriger ça, il m'a fallu transformer la variable TBiw en tableau dynamique : TBiw est un tableau dynamique de AxTXSpell.IncorrectWord()
Et pour compléter sur le publipostage, vous pouvez récupérer les champs existants en faisant une boucle :
i = AX_corps>>fieldnext(0,0) TANTQUE i > 0 AX_corps>>Fieldcurrent = i i = AX_corps>>fieldnext(i,0) FIN Il suffit ensuite de traiter la valeur de AX_corps>>fieldtext pour alimenter facilement le document.
Par contre, je bute sur 3 points, peut-être pourriez-vous éclairer ma lanterne ? 1 - Est-il possible de modifier le menu contextuel de l'activeX (pour les suggestions de correction) ? Vous disiez ne pas avoir encore planché sur le sujet dans le premier post, peut-être avez-vous pu avancer depuis ? 2 - Je souhaiterai récupérer un publipostage créé sous word. Pour l'instant, je récupère bien le document ainsi que les différents champs, mais pas la requête qui va avec. Auriez-vous une idée ? 3 - Je n'arrive pas à faire fonctionner le code pour l'aperçu avant impression : Vous avez appelé la méthode Automation 'printpage'. En tentant d'invoquer la méthode <printpage> ou de lire la propriété <printpage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 800A4E2A : Impossible d'imprimer la page.' En tentant d'invoquer la méthode <printpage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 800A4E2A : Impossible d'imprimer la page.' En tentant de lire la propriété <printpage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 8002000E, Nombre de paramètres incorrect' En tentant d'écrire la propriété <printpage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80020005, Type incorrect pour le paramètre -1627651' |
| |
| |
| | | |
|
| | |
| |
Posté le 12 septembre 2014 - 14:45 |
Utilisant Tx Text Control depuis quelques années, je viens de migrer une application en Windev 19 - 64 bits et je constate que cette version de Windev n'affiche plus l'activeX Txt Text Control dans la combo listant les ActiveX.
Quand j'ouvre la même application en Windev 19 - 32 bits pas de souci, tout fonctionne comme auparavant.
Quelqu'un a t'il remarqué ce phénomène ? Est ce un bug ? |
| |
| |
| | | |
|
| | |
| |
Posté le 12 septembre 2014 - 17:26 |
Bonjour Greg
le principe de base s'applique ici aussi... Si 64 bits, alors il faut du 64 bits POUR TOUT, y compris l'activeX.
32 bits et 64 bits sont fachés, ils ne se parlent pas
D'ailleurs, c'est bien indiqué sur le site de txtControl : http://www.textcontrol.com/en_US/support/documentation/dotnet/n_intro_3264bit.htm
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
NOUVEAU: WXShowroom.com est disponible : Montrez vos projets ! Plus d'information sur http://fabriceharari.com
On 9/12/2014 6:45 AM, Greg wrote:
Utilisant Tx Text Control depuis quelques années, je viens de migrer une application en Windev 19 - 64 bits et je constate que cette version de Windev n'affiche plus l'activeX Txt Text Control dans la combo listant les ActiveX.
Quand j'ouvre la même application en Windev 19 - 32 bits pas de souci, tout fonctionne comme auparavant.
Quelqu'un a t'il remarqué ce phénomène ? Est ce un bug ? |
| |
| |
| | | |
|
| | |
| |
Posté le 05 juin 2015 - 15:04 |
Bonjour,
Le correctif, permettant d'avoir le soulignement en rouge, a-t-il bien été appliqué à la version 19 ?
Parce que je rencontre le même problème et en faisant mes recherches, je tombe sur le thread... |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|