PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

TinyMCE pour WINDEV
Publié par dotnuts
dans la catégorie Outils
Nouveautés
1.0 AM:
Pour stations Windows 8, il est possible qu'il existe des problèmes de droits d'écritures sur le dossier de travail que vous choisissez. Dans ce cas, privilégiez le sous dossier "temp" du projet (exécutable). Celui qui dans lequel doit être déposé le dossier "tinymce" contenant les fichiers javascript.
Correction d'un bug lorsque l'on demande l'ouverture des paramètres de la fenêtre TinyMCE par la fonction "CFI_TinyMCE.OpenSettings()". Ce problème semblait avoir lieu uniquement lorsque l'on utilisait le composant dans une autre version que la 21 de WINDEV.
1.0 Al:
Compatibilité avec TinyMCE 4.7.4 et JQuery 1.12.4
Amélioration de l'affichage du code avec la méthode interne.
Correction du "file picker" pour importer un média dans la page, avec la méthode natif.
Correction d'un dysfonctionnement du dialogue, entre le composant et TinyMCE, lorsqu'il y a plusieurs fenêtres internes d'ouverte.
Récupération et restitution de toutes les propriétés, lors de l'ouverture d'un média dans la fenêtre des librairies, méthode interne.
Ajout des fonctionnalités de lecture et récupération d'une page (complète) internet. Analyse du code pour séparer le corps du code du reste, ainsi que les scripts, et importation des styles dans TinyMCE pour garantir l'affiche correcte de la page.
Ajout de la fonctionnalité pour fermer une page.
1.0 Ak:
Correction d'un dysfonctionnement lors de l'affectation d'un code contenant des images en base64. Après la version 4.4.3 de TinyMCE, lorsqu'on collait un code avec des images en base64, TinyMCE les transformaient avec une chaine json. Une modification à la version 1.0Aj a été apportée pour que les images en base64 soit créées physiquement, et affecter un chemin réel d'accès à l'image.
Dans certain traitement de vos programmes, vous avez besoin de contrôler la fermeture de la fenêtre (contenant une fenêtre interne TinyMCE). Lors de la fermeture de la fenêtre, le code de fermeture des fenêtres interne est faite avant le code de fermeture de la fenêtre elle-même, ce qui occasionne la fermeture de la fenêtre interne sans pour autant ferme votre fenêtre ( RepriseSaisie(MaFenêtre..nom) ). Il est possible maintenant de verrouiller la/les fenêtres interne TinyMCE par un simple appel à la fonction ( CFI_TINYMCE,SetCanCloseWindow(booléen) ).
Vous pouvez aussi personnaliser le message qui sera affiché, si la fenêtre interne de TinyMCE n'est pas déverrouillée, en appellant la méthode Tiny.SetEditorMessageWhenLocked("Message").
1.0 Aj:
Dorénavant, lors de l'affectation du code au TinyMCE, le composant modifie les chemins relatifs des sources qui y sont contenue, par le chemin réel (selon le répertoire définit pour les médias, par l'utilisateur), afin que l'affichage reste optimal.
1.0 Ai:
Correction d'un problème de compression du code javascript, lorsqu'on n'est pas en mode de test.
1.0 Ah:
Amélioration visuelle des sélections, pour la configuration du TinyMCE. Cela permet plus de place, pour les prochaines évolutions.
Ajout d'une procédure callback pour modifier l'image (en cours de modification), par un autre composant ou programme de votre choix.
Ajout d'une procédure callback pour imprimer la page avec votre propre méthode.
Ajout d'une méthode pour modifier le chemin relatif à tout moment.
Suppression de l'énumération dans la structure de configuration, pour le mode de fonctionnement de la sauvegarde. Le bouton "Enregistrer" apparaitra uniquement si le plugin "Sauver" est sélectionnée, et que la procédure callback de sauvegarde soit renseignée.
1.0 Ag:
Le composant se base sur les plugins installés dans les sous-répertoires, pour les lister/activer, et aussi pour construire ses propres menus.
Amélioration de la fenêtre des médias.
Activation des documents (pdf, flash) dans la fenêtre des médias.
Modification de l'apparence graphique des images, dans la fenêtre des médias.
Activation du modèle "InLite" et du mode "Inline" pour l'apparence du TinyMCE.
Le composant est compatible avec la version 4.6.4 de TinyMCE.
Il possible de définir un procédure callback pour la sauvegarde de la page.
Possible de créer ses propres modèles de codes, et code CSS, dans la fenêtre de configuration.
1.0 Af:
Le changement de dossier temporaire est opérationnel. L'appel à la fonction doit se faire dans le code d'initialisation du projet ou de la fenêtre qui contient la/les fenêtre interne TinyMCE.
Il n'est plus possible de faire du Drag&Drop depuis l'explorer sur TinyMCE.
Ajout du bouton d'upload, sur la boite de dialogue native, pour insérer une image.
Pour l'ajout d'un média, par le mode interne (Librairie des Médias), la fenêtre permet de visualiser dans différent onglet, les images, sons, et vidéos.
Correction du problème qui pouvait retourner une image noir, lors de ça modification par la librairie des médias.
1.0 Ae:
Il est possible de changer le dossier temporaire de travail du composant.
Pour les projets n'ayant pas de style défini, le composant créera un style par défaut, pour visualiser les messages d'erreur.
Si votre projet utilise le Français-Canadien, le composant téléchargera le fichier de la langue française.
1.0 Ad:
Amélioration de la communication avec TinyMCE.
L'ActiveX "WebBrowser" qui visualise le contenu TinyMCE, passe automatiquement sur le version en cours (installée) de votre navigateur IE/Edge.
Grâce au passage de votre version en cours de votre navigateur, le visuel du contenu, respecte mieux le standard qui vous voulez voir.
1.0 Ac :
Correction d'un bug sur la constructions des propriétés des éléments de paramétrage.
1.0 Ab :
Correction du problème sur l'interprétation code javascript (compressé) généré en mode exécutable.

Description
Ce composant WINDEV, vous permettra d'éditer vos pages web, grâce à TinyMCE dans vos applications WINDEV.
Il peut être utile d'avoir une application back-office en WINDEV pour gérer le contenu de vos pages web, ou tout simplement de créer une application qui à besoin d'avoir un contenu web, par exemple pour générer un email HTML. Ou bien simplement de remplacer le champ natif "Saisie en HTML", qui n'offre que de très faible possibilité dans la barre d'outils.

Ce composant permet de traduire toutes les images incluses dans le code, au format Base64. Ce qui permet une portabilité du code n'importe où.
Un grand nombre de fonctionnalité, comme "preview", "code", "image et média", "couleur", peuvent utiliser des fenêtres, internes au composant, afin d'avoir un meilleur rendu.
Ce composant n'est pas encore totalement finalisé, mais fonctionne correctement dans l'un de mes projets d'ERP, que j'utilise pour la création de modèle d'emailing.

Le fichier zip contient le composant, mais aussi un dossier "tinymce" avec le fichier de TinyMCE, ainsi que le fichier "jquery.js". Ces fichiers sont obligatoire pour le bon fonctionnement du composant. Le dossier "tinymce" doit obligatoirement se trouver dans le répertoire de votre exécutable.
Vous pouvez changer de version TinyMCE ou jQuery, mais le composant a été développé avec les versions incluses dans le fichier zip.

N'hésitez pas à me soumettre vos remarques ou suggestions, afin d'améliorer le produit.
http://www.dotnuts-development.com/produits/editeur-de-page-internet/
Illustrations, copies d'écran
none
none
Avis des utilisateurs
(Pour noter la ressource, cliquez sur Ecrire un avis)
J-M DES GROTTES
Ouf ça y est cela marche.
Problème avec un autre composant qui ouvrait des page html ....
J-M DES GROTTES
Même problème sur un projet tournant en 32 bits mais un PC windows 10 64 bits ....

Le plus étonnant est que le projet démo fonctionne !!!

Le projet est en ANSI mais cela n'empêche pas le chargement d'un composant UNICODE ......
Norbert
Bonjour,
merci pour ce composant, il correspond tout à fait à ce dont j'ai besoin.
Toutefois j'aimerais l'utiliser dans une application 64 bits et je n'y parviens pas, le composant TiyMCE signale toujours qu'un élément est absent. Est-ce possible ?
dotnuts
Bonjour,
Une nouvelle version a été mise en place.
Elle corrige un bug sur l'ouverture des paramètres d'une fenêtre TinyMCE.
Et le composant est compatible avec les versions 8 de Windows, il faut juste faire attention avec le dossier de travail, si celui-ci a les droits suffisant en écriture (voir Nouveautés sur la version 1.0 AM).
Vous pouvez également télécharger un projet test (version 23) pour voir le fonctionnement du composant.
https://www.dropbox.com/sh/i13c6ft9q4ei2la/AABebSYZM6iCp_8fLKmMLxWta?dl=0
Nicolas
Bonjour et merci pour ton composant.

Il tourne bien sur les machines en windows 10 par contre j'ai un petit soucis avec les postes en windows 8 qui affichent une zone de saisie windev "standard" vide à la place du composant.
Quelqu'un a t'il déjà eu ce problème ?

Merci d'avance pour ta réponse.
Nicolas
dotnuts
Bonjour DrakeQC,

Ravi que le composant fonctionne correctement pour toi.
Effectivement, j'ai dû procéder à quelque modification pour récupérer et réaffecter les propriétés non conventionnelles.
Il en est de même pour les images apparaissant comme non affichées (carré blanc avec une croix rouge). Il m'a fallut encore rusé pour que cela fonctionne entre la version native et la communication avec le composant.

Je pense que pour le moment, le composant est plus qu'opérationnel, même s'il reste encore des ajouts à faire.
Cordialement,
Luc
DrakeQC
Bonjour Luc,

J'ai mis à jour ma version la librairie des médias TinyMCE semble fonctionner à merveille. Un grand merci pour ça.

Pour le second problème effectivement il ne semble plus survenir peut-être avait-je oublier de mettre à jour mon composant.

Pour les propriétés il semblerait qu'elles conservent leur intégrité même après l'édition du média.

Merci pour la nouvelle version du composant.

Cordialement
Drake
dotnuts
Bonjour Drake,

Pour le premier problème "Librairie des médias -> TinyMCE", je l'avais également constaté. Mais malheureusement, bien que le code javascript utilisé pour visualiser la boîte de dialogue (native) des médias, provienne directement des recommandations de TinyMCE, le problème est toujours là. J'ignore pour le moment ce qui est possible de faire pour y remédier.

Pour le second problème "empty_3.png", il me semble que le problème avait été réglé. Il faudrait voir si tu travailles bien avec la dernière version 1.0Ak. Il faut savoir que le système natif de TinyMCE stock les médias dans des blobs. Et pour le moment, je n'ai pas trouvé de solution (code) pour récupérer les médias dans les blobs pour les transférer sous forme Base64 ou fichier.

Si tu préfères cette solution, car "plus permissive", serait-ce parce que après validation de l'édition d'un média, certaines propriétés disparaissent ? Dans ce cas, j'y pense depuis quelques temps, mais pour le moment le temps me manque.

Cordialement,
Luc
DrakeQC
Bonjour Luc

J'utilise beaucoup ton composant pour faire des modèles HTML pour envoi de mails.
Cependant j'ai remarqué un petit hic qui survient par moments.

Lorsque ma configuration est réglée sur: * librairie des medias -> Tiny Mce
Quand j'ajoute une image tout d'abord il me faut cliquer sur une première image la valider et l'éditeur ne l'ajoute pas (la conversion en base64 ne se fait pas le chemin de l'image reste vide...)
Ensuite, je refais la manipulation, je sélectionne une autre image et là le chemin change bien pour l'image en base 64.
Par la suite mon image reste affichée quelques secondes puis disparaît...
Je re clique sur le lien du média pour vérifier la source et la source est maintenant un chemin qui finit par .empty__3 Png"} qui mène vers le dossier dans lequel tinymce travaille sur mon poste.

Y as t'il un moyen de remédier au problème ?
Je n'ai pas ce genre de problème lors de l’utilisation de la librairie des médias en mode interne mais j'aime mieux l'autre configuration plus permissive.

Merci encore,
Cordialement
Drake
Julien
Bonjour,
Votre composant est tout à fait ce qu'il me fallait !
Cependant je ne parviens pas à le configurer correctement :
- quand je sélectionne une image à intégrer par exemple, son chemin n'apparaît aps que le champ "Source" de l'outil image ...
- je ne parviens pas à récupérer le contenu html avec les images en base64
- j'aimerai que le répertoire des média soit celui de mon site internet, sur un serveur donc ... je ne vois pas comment tinyMCE peu afficher le contenu d'un dossier spécifique de mon site web, il faut alors pouvoir uploader des images dans ce dossier
- sinon si j'utilise une image de mon pc j'aimerai qu'elle soit uploadée dans le dossier du site lors de l'enregistrment
Merci par avance pour votre aide précieuse et encore bravo, c'est top !
P.S. : si vous aviez un projet windev 22 pouvant servir de base ... ;-)
DrakeQC
Merci pour cette nouvelle version tout est fonctionnel!
Bonne continuation Luc.
Cordialement,
Drake
DrakeQC
Bonjour Luc,

Effectivement mon projet est en ANSI.

J'utilise maintenant les fonctions WD suivantes:
//Pour enregistrement depuis TinyMCE
id = fOuvre("cheminFichier",foUnicode+foCreation)
fEcrit(id,CFI_NomDuChamp.GetPage(*,vrai))
fFerme(id)
//Pour charger le contenu vers TinyMCE
CFI_NomDuChamp = fChargeTexte("cheminFichier",foUnicode)
Malgré ces changements mon problème persiste.

Il semblerait que j'ai trouvé d'où viens mon problème.
j'ai créé une seconde fenêtre interne de TinyMCE et l'affichage du même contenu html se fait correctement (images visibles et bien placées).
Je pense alors que mon problème vient de la configuration de TinyMCE.
En effet lorsque je désactive le plugin "Image" de TinyMCE (dans ma première fenêtre) et que je recharge mon contenu, l'affichage des images se fait correctement.
Cependant je perds la fonctionnalité d'ajout d'image que j'utilise beaucoup avec ce composant...
Aussi j'ai remarqué lorsque l'affichage n'est pas bon, TinyMCE modifie la source de mon image pour le chemin finissant par le dossier temp que TinyMCE utilise exemple: (...\temp\empty_3.png).
Mais, lorsque je navigue jusqu'au dossier aucune image (empty_3.png) n'est existante dans ce dossier.
Mon problème viendrait-il du fait que mes images pointent sur cette source inexistante ?

Nb: Ces images sont normalement stockées en base64 graces à la fonction de conversion de TinyMCE CFI_NomDuGetPage(*,vrai)

Cordialement,
Drake
dotnuts
Bonjour Drake,

J'ai pu reproduire ton problème, lors de l'affectation du code HTML dans le TinyMCE, contenant des images en Base64.
Dans la nouvelle version mise en place (1.0Ak), j'ai apporté une correction, déjà mise en place dans la version précédente (1.0Aj), qui remplaçait les chemins relatifs des sources.

Mais lorsque la source était une image en base64, le moteur natif de TinyMCE, les transformaient en une chaine étrange, contenant également une chaine jSON. Cela ce produit après la version 4.4.3 de TinyMCE.

Pour y remédier, dans cette dernière version (1.0Ak), les images en base64 sont physiquement recréées (dans le dossier temporaire définit par l'utilisateur), et c'est le chemin d'accès aux fichiers qui est remplacé dans le code.

J'y ai fait différent test, et tout semble bien fonctionner.
Cordialement,
Luc
dotnuts
Drake,

Le composant travail en Unicode, est-ce que ton projet, lui, est un Ansi ?
Si cela est le cas, il faut voir la différence dans les caractères de l'image en Base64, s'il n'ont pas été traduit.
Par exemple :
- Si tu utilises une variable chaîne ansi pour récupérer le contenue du tiny qui lui retourne le code en unicode.
- Si le fichier html, a été enregistré ( fSauveTexte() voir l'option du format d'enregistrement) en ansi, alors que le code était en unicode ( voir aussi fChargeTexte et son option de format).

Si toutes les images contenues dans le code, sont retournées en Base64, et seulement un certain nombre, mais pas toutes, ne sont plus visibles lors de son ré-affichage, c'est que le code Base64 de ces dernières sont corrompue, par le transfert ANSI -> UNICODE.
Cela ce produit très certainement lors de l'ouverture du fichier html pour l'affectation du contenue au TinyMCE:
Ce qui n'est pas le cas lorsque tu demandes l'ouverture directement dans le navigateur, car lui travail aussi bien au ansi qu'en unicode, et le changement est automatique.

Le composant lui, travail uniquement en unicode, et il ne peut pas savoir que le code fournit est en ansi, et encore mois savoir qu'une image est devenue non valide. Sinon il faudrait que je fasse, lors de la lecture du code pour trouver les images, les enregistrer pour les ré-affecter à une variable de type image, afin de savoir si elles sont toujours valides. Et là on perd en rapidité. Mais cela peut être une option, qui peut être activé à la demande. Faut voir.

Essaye de bien vérifier les conversions ANSI -> UNICODE, et vise-versa, afin d'éliminer les doutes.

Cordialement,
Luc
DrakeQC
Re Luc,

Oui je comprends bien la différence entre l'ouverture du fichier depuis le navigateur et l'affectation du code html depuis le fichier vers tinymce.
Cependant le fichier html dont je parle (qui s'affiche correctement dans le navigateur) est constitué uniquement d'image en base 64.
Ce code html est obtenu par la fonction de tinymce "CFI_NomDuChampFenêtreInterne.GetPage(*,Vrai)" que j'enregistre ensuite grace à la fonction sauvetexte() de WD.
On dirait que mon problème se trouve à la lecture d'un fichier html qui contient des images en base 64 finalement.

j'avais déjà essayé de pallier à mon problème d'affichage d'image en recopiant mes images associées au fichier html dans le dossier temporaire dans lequel tinymce travail mais sans succés pour ma part.
De plus, j'aime finalement mieux enregistrer mes images au format base 64 pour m'assurer que celle-ci ne soit pas mal affichées si j'envoi ce contenu dans un email par exemple.

Cordialement,
Drake
DrakeQC
Re Luc,

Non, je ne fais aucune autre affectation après celle-ci voici exactement ce que je fais:

sHTML est chaîne = fChargeTexte("cheminDuFichierHtml")
CFI_HTML = sHTML

J'exécute ce code dans l'événement de sélection d'une ligne d'un combo.

Merci à toi pour le support.
Cordialement,
Drake
dotnuts
Re-Bonjour Drake,

En re-lisant ton message précédent, je m'aperçois d'un truc.
Il ne faut pas confondre l'ouverture d'un fichier html (dans un navigateur) et l'affectation du contenue du dit fichier html, dans TinyMCE.
L'ouverture du fichier dans le navigateur, ce fait à l'emplacement du fichier. De ce faite, si l'accès aux sources (fichiers images, ...) est relatif à l'emplacement du fichier html, cela n'est pas du tout le cas avec TinyMCE. Le composant travail dans le répertoire temporaire (par défaut du composant, ou celui définit par l'utilisateur), de ce faite les chemins relatifs ne peuvent plus fonctionner (pour l'instant).
Il y aurait la possibilité d'affecter la variable (TinyMCE) "basepath" ou "baseurl", mais cela risque de causer des problèmes au code. Car tout ajout de source, TinyMCE changerait de lui-même les chemins d'accès, pour construire les chemins relatifs correspondant à l'emplacement du fichier (code html) avec les répertoires des sources.

De ce faite, depuis ton message de l'autre jour, j'ai commencer à apporter une fonctionnalité qui changera les chemins relatifs des sources, par le chemin réel du fichier, correspondant au répertoire (ou sous-répertoire) des médias, définit par l'utilisateur.
Si la source n'est pas trouvée dans l'un des répertoires médias, le chemin relatif n'est pas modifié.
Ce qui implique que toutes les sources doivent être stockées dans l'un des répertoires, sous-répertoires, des médias définit par l'utilisateur.

Mais le composant à ses limites. Il ne peut pas deviner si l'un des fichiers est en dehors du/des répertoires des médias.
S'il y a plusieurs lieux de stockage de médias, le composant n'en gère qu'un seule. De ce faite l'utilisateur doit de lui-même modifier les chemins relatifs des sources qui sont en dehors du répertoire des média définit par l'utilisateur, avant de faire l'affectation du code au composant.

J'espère avoir apporté plus d'explication aux éventuelles problèmes.
Cordialement,
Luc
dotnuts
Bonjour Drake,

Je vais voir pour reproduire le problème, et trouver une solution.
Mais dans l'immédiat je me pose une question, est-ce lorsque tu fais l'affectation du contenue html au champ interne, est-ce la dernière instruction qui est faite au champ interne, ou y a-t'il encore une autre instruction, immédiatement après l'affectation ?
Si oui, lesquelles ?

Merci pour l'intérêt porté au composant.
Cordialement,
Luc
DrakeQC
Bonjour Luc,

Merci pour ces infos effectivement j'utilise souvent la fonction "CFI_NomDuChampFenêtreInterne.GetPage(*,Vrai)" elle fonctionne à merveille.
Cependant si j'enregistre mon code HTML dans un fichier texte (extension ".html") et que je recharge ce fichier depuis tinymce via l'affectation suivante: "CFI_NomDuChampFenêtreInterne = fChargeTexte("cheminDeMonFichier.html")"

Le fichier se charge pendant une fraction de seconde mes images sont affichées correctement puis,
1) les images disparaissent
2) Seules les descriptions d'images sont affichées
3) La dernière image contenue dans mon html "se clone" et s'affiche à sa taille réelle juste après la dernière image du document html.

Nb: Cependant si j'ouvre ce même document html dans le navigateur tout le contenu est affiché correctement.

J'ai essayé de charger mon HTML dans une variable de type string, buffer (avec la fonction "fChargeBuffer") mais, rien n'y fait.


Je comprends bien que le composant n'est pas encore final (bêta) mais, je trouve ce composant quand même bien plus puissant que les champs HTML que propose WD22.

Cordialement Drake
dotnuts
Bonjour Drake,

Il faut voir la documentation PDF du composant.
https://www.dotnuts-development.com/wp-content/uploads/2016/12/documentation-api-en-francais-du-composant-tinymce-pour-windev.pdf

En page 3, plusieurs méthodes sont possible pour récupérer le code de la page.
Cela dépend des besoins de chacun.
Par exemple, récupérer le code avec les images en Base64 est un bon moyen pour l'emailing.

MonCodeHTML = CFI_NomDuChampFenêtreInterne // Récupération du code brute
MonCodeHTML = CFI_NomDuChampFenêtreInterne.GetPage() // Récupération du code nettoyé
MonCodeHTML = CFI_NomDuChampFenêtreInterne.GetPage(*,Vrai) // Récupération du code nettoyé. Les images sont au formats Base64.
MonCodeHTML = CFI_NomDuChampFenêtreInterne.GetPage(Vrai) // Récupération du code nettoyé. Les images sont placées à la base du répertoire.
MonTableauChaîne = CFI_NomDuChampFenêtreInterne.GetMediaFiles() // Récupération des sources (Chemin et nom des fichiers), après avoir fait une demande de récupération de la page.

Pour ce qui est de l'affectation du code au TinyMCE, il est vrai que pour l'instant, le composant ne remplace pas les chemins relatifs des sources, par le chemin d'accès au répertoire des médias.
Il ne faut pas oublier que le composant est toujours en version de test (beta).
Mais je vais y remédier au plus vite.

Cordialement,
Luc
DrakeQC
Bonjour Luc,

J'ai un peu de mal par moments avec les images dans tinymce.

Exemple:
- J'ajoute une image, tinymce la convertit en base64.
- Je sauve mon HTML dans un fichier.
- Je charge mon HTML (depuis le fichier) vers tinymce et l'image base64 ne s'affiche plus...
- Je clique droit sur l'image pour vérifier la source et la source est maintenant (.../MonRepTemp/empty__3 png)

As-tu une idée d'où pourrait venir mon problème ?

Cordialement,
Drake
dotnuts
Bonjour Drake,

Désolé pour le problème Unicode, mais pour ma part je développe toujours en Unicode, car un projet est tout de même censé être utilisé pour des personnes qui n'utilise pas forcément que du texte (lettres) occidental (copie d'un text asiatique ou autre à coller dans un champ de saisie, etc...).

Pour ce qui est de l'image, il est vrai que j'ai également constaté ce problème. Mais il est plus dû à un problème de latence que je n'arrive pas à mettre la main dessus. Car il faut bien comprendre la complexité du composant.

Le composant communique avec une page internet, en surveillant le contenue d'une balise qui contient soit une demande d'instruction, soit le contenu à ajouter en retour. Et la page internet fait de même pour déposer la demande et attendre la réception pour la placer dans le contenue TinyMCE.

Il est dont extrêmement difficile de faire du débogage, puisque dans ce contexte, on ne peut pas mettre de point d'arrêt dans le code javascript et dérouler les instructions.

Je ne désespère pas de mettre la main, un jour, dessus et y remédier. Mais pour l'instant, l'essentiel fonctionne.

Cordialement,
Luc
DrakeQC
Bonjour Luc,

Un grand merci pour avoir résolu mon problème, cependant mon projet étant déjà bien avancé, je ne peux me permettre de le passer en Unicode pour le moment. Cependant, je le prendrais en considération pour mes futurs projets.

Aussi j'ai remarqué un petit "bug" au niveau de l'ajout d'image dans tinymce, souvent lorsque je fais l'ajout d'une image en allant sélectionner mon fichier image, celui-ci ne la prend pas en compte à la première sélection. Il me faut donc choisir une autre image et ensuite revenir sur l'image que je voulait. Je ne sais pas si ce problème apparaît aussi de ton coté mais je te fais passer l'info.
Encore merci pour le support.

Cordialement,
Drake
dotnuts
Bonjour Drake,

J'ai trouvé l'origine du problème.
Ton projet doit impérativement être déclaré en Unicode (et pas seulement une éventuelle déclaration d'une chaine).
J'ai fait le test entre un projet ANSI et Unicode, et l'erreur n'apparait que dans le cas où le projet n'est pas en Unicode.

Cordialement,
Luc
dotnuts
Bonjour Drake,

J'ai vérifié le problème, et directement dans mon projet, le problème ne se pose pas.
Il semblerait que cela est propre lors de la communication entre un projet hôte et le composant (bug PCSoft).
Pour contourner le problème, tu peux directement passer par la structure de configuration pour affecter ton tableau de templates.

stMaConfig est un STTinyMCE_Settings

stMaCongif.Content.taTemplates = gtaTemplates

Je ferais encore d'autres testes afin de voir pour résoudre ce problème.
Sinon, il faut passer par l'interface de configuration du TinyMCE (composant), dans l'onglet "Modèle", et là tu peux créer tes modèles, contentant un code saisie ou lié sur un fichier de type (htm, html ou tpl)

Cordialement,
Luc
DrakeQC
Bonjour Luc,

Voici ce que je fais:

-Dans Déclarations globales de ma FEN

gtaTemplates is associative array of STTinyMCE_Templates

-Dans le code d'un bouton (test) dans ma FEN

sTemplate est une chaîne
stTemplate est un STTinyMCE_Templates

sTemplate = [
<p>CONTENU</p>
]

stTemplate.sDescription = "HTML"
stTemplate.sContent = sTemplate
gtaTemplates["TEMPLATE_1"] = stTemplate
CFI_HTML.SetTemplates(gtaTemplates)

et au passage du paramètre gtaTemplates à la dernière ligne j'obtient l'erreur:
Le passage du paramètre 1 a provoqué une erreur.
Un tableau associatif ne peut être recopié que dans un tableau associatif de même description (type des éléments, type des clés, options).

J'ai pourtant l'impression de faire les étapes comme tu me la indiqué me manque t'il quelque chose ?

Cordialement
dotnuts
Bonjour Drake,

Pour les templates, il y a deux solutions.
Soit directement par l'interface graphique de la configuration du TinyMCE, voir dans les illustrations de copies d'écran (image n°10).
Soit par programmation.
Par programmation, il faut créer une variable de tableau associatif de STTinyMCE_Templates, ainsi qu'une variable de structure basé sur ce même STTinyMCE_Template.
Paramétrer la structure selon vos besoins, puis affectez la au tableau associatif. La clé du tableau représente le nom du modèle.
Une fois que votre tableau est finalisé, alors vous pouvez affecter le tableau à la procédure SetTemplate.

Pour de plus amples explications, vous pouvez voir l'exemple qu'il y a à la page 5 de la documentation du composant, disponible à l'adresse suivante : http://www.dotnuts-development.com/produits/editeur-de-page-internet/

Cordialement,
Luc
DrakeQC
Bonjour Luc,

J'aimerais utiliser la fonctionnalité de template de tinymce, je créer alors un taTemplate que j'associe grace a la fonction SetTemplates(taTemplate) mais windev me génère l'exception suivante:

Le passage du paramètre 1 a provoqué une erreur.
Un tableau associatif ne peut être recopié que dans un tableau associatif de même description (type des éléments, type des clés, options).

Aurais-je loupé une étape ?

Cordialement,
Drake
DrakeQC
Bonjour Luc,

Je te remercie pour ta rapidité ainsi que l'exactitude de tes réponses.

Cordialement
dotnuts
Bonjour DrakeQC,

La dernière version en cours, sur le dépôt, est la version 1.0 Ai.
Elle corrige le problème du code javascript, qui est compression en mode exe.
Et le problème est là. Donc cette fonctionnalité est provisoirement annulé.

Pour ce qui est du plugin "Layer", comme pour les autres. Il est de la responsabilité de chaque utilisateur, de veiller à mettre tous les plugins qu'ils souhaitent utiliser. Je conseille de télécharger une version complete de TinyMCE (contenant tous les plugins de base), et d'activer ou non dans la configuration du composant.

Le composant fait une lecture du sous-dossier "plugins" de TinyMCE pour afficher les plugins présent et donc de permettre une activation ou non.

Cordialement,
Luc Rollinger
DrakeQC
Aussi, il semblerait q'il manque un plugin (Failed to load plugin: layer from url file:///C:/.../temp/tinymce/plugins/layer/plugin.min.js) cependant en rajoutant ce fichier en le prenant dans une version antérieur cela fonctionne bien.
DrakeQC
Bonjour Luc,

Il semblerait qu'il y est un petit souci d'affichage je ne sais pas si c'est seulement dans la dernière version mais, j'ai fais le test avec deux version (1.0Ah) après la génération de l'exécutable la fenetre interne ne semble plus s'afficher correctement je n'ai donc plus accès au fonctionnalité de tinymce car la zone d'affichage est tronqué en haut a gauche de la fenetre interne on dirait...
Cependant avec la version (1.0Ac) seule version antérieur que j'avais sous la main, je n'ai pas ce problème lors de l'ouverture de mon exe.
En mode test par contre tout fonctionne parfaitement au niveau de l'affichage.
Aurait-tu une solution ?

Cordialement
DrakeQC
Encore merci,
J'attendrais alors ta nouvelle version.
Bonne fin de journée Luc.
dotnuts
Bonjour DrakeQC,

Normalement, l'erreur citée " Erreur à la ligne 10 du traitement Destructeur (Composant 'TinyMCE'). Vous avez appelé la fonction ChampSupprime. ... " est corrigée dans la version en cours de finalisation (pas mis à disposition).
Les erreurs suivantes découles de la destruction de l'objet, demandé à la suite de " ChampSupprime ".
DrakeQC
Re bonjour Luc,

Cependant quand j'appel la fonction CFI_TINYMCE.ResetTinyMCE(Vrai),
j'ai 2 erreurs qui s'affichent.
(peut importe que je passe des paramètres à la fonction ou non)

Erreur à la ligne 10 du traitement Destructeur (Composant 'TinyMCE').
Vous avez appelé la fonction ChampSupprime.
Le passage du paramètre 1 a provoqué une erreur.
Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.

Projet : RPP_ExportMail
Composant : TinyMCE

Appel WL :
Traitement de 'Destructeur' (cWebBrowser.Destructeur), ligne 10, thread 0
Fonction 'ChampSupprime', syntaxe 0

ET

Erreur à la ligne 32 du traitement Procédure globale SetDeleteObject (Composant 'TinyMCE').
Utilisation de MaFenêtre alors qu'il n'y a pas de fenêtre courante.

Projet :
Composant : TinyMCE

Appel WL :
Traitement de 'Procédure globale SetDeleteObject' (TinyMCE.SetDeleteObject), ligne 32, thread 0
DrakeQC
Merci Luc pour ta réponse très rapide et pertinente !

J'ai pu m'aider grace à la fonction de déserialisation.

Bonne continuation et encore merci pour ce composant !
dotnuts
Bonjour DrakeQC et Nicolas,

Pour configurer le composant, vous avec l'appel à l'ouverture de la fenêtre de configuration ( CFI_TINYMCE.OpenSettings() ).
Actuellement, le choix des plugins (code, paste, image, ....), n'est pas encore opérationnel. Il le sera prochainement.
Pour l'instant un certains nombres de paramètres est possible, et à la sortie tous les plugins sont (listés dans le composant) sont mis en place, selon le choix qui est fait entre, interne, tinymce ou externe (si disponible).

CFI_TINYMCE.ResetTinyMCE(), n'est à utiliser que dans le cas d'une réactualisation de l'affichage du TinyMCE, avec/sans paramètres, et avec/sans contenu.

La forme normal, est soit par :
1. CFI_TINYMCE.Navigate() // Lance l'affichage de TinyMCE dans la fenêtre interne.
CFI_TINYMCE.OpenSettings() // Ouvre la fenêtre de paramétrage de TinyMCE, pour la fenêtre interne en cours. Et ré-affiche TinyMCE avec les nouveaux paramètres appliqués à l'affichage.
stSettings = CFI_TINYMCE.GetSettings() // Uniquement dans le cas où vous voulez conserver la structure.

2. CFI_TINYMCE.Navigate() // Lance l'affichage de TinyMCE dans la fenêtre interne. (Dans tous les cas)
CFI_TINYMCE.SetSettigs(stSettings) // Affectation d'une structure, récupéré soit par GetSettings(), soit par la fonction " Désérialise ".
CFI_TINYMCE.ResetTinyMCE(Vrai) // Ré-affiche TinyMCE en conservant les paramètres.

Vous pouvez en apprendre plus, soit en visionnant la documentation PDF du composant, à l'adresse suivante :
http://www.dotnuts-development.com/produits/editeur-de-page-internet/

Ou directement à cette adresse :
https://www.dotnuts-development.com/wp-content/uploads/2016/12/documentation-api-en-francais-du-composant-tinymce-pour-windev.pdf

Pour ce qui est de la sauvegarde, cela est pour l'instant libre à l'utilisateur final.
Plusieurs solutions est possible.

1. MaVariableChaîne = CFI_TINYMCE // Renvoie le code brute, avec les fichiers au format ( file://...) dans le code
2. MaVariableChaîne = CFI_TINYMCE.GetPage() // Renvoie le code avec les fichiers au format ( file://...) convertis au format réel.
3. MaVariableChaîne = CFI_TINYMCE.GetPage(Vrai) // Renvoie le code avec les liens d'images ne contentant que leurs noms et les fichier stockés dans le dossier temporaire définit par l'utilisateur.
4. MaVariableChaîne = CFI_TINYMCE.GetPage(*, Vrai) // Renvoie le code avec les images au format base64.
5. MaVariableChaîne = CFI_TINYMCE.GetPage(Vrai, Vrai) // Cet appel n'est pas autorisé, le dernier paramètre sera automatiquement mis à faux.

Les deux paramètres attendent un booléen.
Le premier permet de définir s'il ont veut déposer les fichiers dans le dossier temporaire (définit par l'utilisateur).
Le deuxième, permet définir s'il ont veut que les fichiers soit traduit en base64.

Pour l'instant, ses méthodes ne retournent pas de tableau de chaînes, contentant les chemins et noms des fichiers de liens.

Bien évidement, la sauvegarde est une solution envisageable. Il faudra que j'analyse la meilleur solution.
Mais je pense que ça sera un appel à une procédure callback (de votre coté), avec en paramètre, le code nettoyé, et un tableau des fichiers à récupérer. Pour le nettoyage, cela impliquera qu'il faudra, coté utilisateur, définir le chemin relatif.

Merci de vos remontés d'utilisation.
Nicolas
Bonjour Luc et félicitations pour ton travail sur ce composant.
Y a-t-il une possibilité d'exécuter le traitement d'un bouton à la sortie du champ de saisie (enregistrement) ?
Merci d'avance
DrakeQC
Bonjour Luc je voudrais savoir quel est la démarche pour appliquer une configuration (settings) à TinyMCE en wlangage voici ce que j'ai essayé sans résultats concluant...

tabAddOn is array of 31 strings = ["anchor","preview","Code","paste","textcolor","emoticons","textpattern","legacyoutput","image","print","nonbreaking","insertdatetime","layer","link",...
"autolink","hr","advlist","lists","media","template","wordcount","noneditable","imagetools","colorpicker","searchreplace","pagebreak","directionality","table","charmap","visualblocks","visualchars"]

stMaConfig is STArray

FOR i=1 _TO_ tabAddOn..Occurrence
stMaConfig.Items[i] = tabAddOn[i]
END

stSettings.Plugins = stMaConfig

CFI_HTML.SetSettings(stSettings)

CFI_HTML.ResetTinyMCE(true)
dotnuts
Merci à vous, Lapalys.
C'est aussi grace à des personnes comme vous, que les produits évolues. Car il n'y a jamais qu'une seule façon d'exploiter un produit, n'y un seul contexte de travail. De plus ce composant m'est très utile, puisque je m'en sert dans un ERP que je développe.

N'hésitez pas à continuer à faire remonter des problèmes rencontrés avec ce composant, et aussi à faire partager vos idées afin de l'améliorer.

Cordialement,
Luc Rollinger
Lapalys
Bonjour Luc

Merci pour cette réponse rapide et les modifications. J'arrive à avoir TinyMCE dans une fenêtre interne. L'autre erreur a disparue (sans doute arrangé par l'histoire de langue).

Bonne continuation
dotnuts
Bonjour Lapalys,

Ce composant n'utilise pas, que TinyMCE. Mais c'est une fenêtre interne qui visualise TinyMCE au travers d'un champ internet. Mais pour divers raisons, en cas d'erreur, un champ libellé d'affichage est créé pour les afficher. Il y a donc bien une raison au style.

Normalement, le composant utilise le style du projet en cours, tout simplement pour s'identifier graphiquement à votre environnement. Comme certains champs sont créés dynamiquement, afin qu'il ne soit pas possible d'y accéder directement (par exemple : FI_TINYMCE.NomDuChamp), il faut que les champs créés aient une apparence graphique correspondante à la votre. Ce problème est réglé, puisque le changement de style est englobé dans une exception. Si l'exception est déclenchée, alors on crée un style par défaut.

TinyMCE utilise uniquement un certain nombre de langue, le Français-Canadien n'en fait pas partie. Mais je l'ai ajouté, afin que le fichier de langue française soit utilisé (et téléchargé) par le composant. (Une connexion à internet est obligatoire, afin que les différentes langues puissent être téléchargées directement sur le site de TinyMCE).

Il est possible de changer le dossier temporaire de la façon suivante : Tiny.SetTempFolder("Chemin du dossier"). (Disponible dans la nouvelle version actuellement sur le dépôt)
Si le chemin passé en paramètre est vide, au non accessible, alors le composant utilisera le dossier temporaire par défaut (sous répertoire "temp" du dossier de l'exécutable).

Pour ce qui est de l'erreur " Erreur à la ligne 22 du traitement Méthode SpyQuery (Composant 'TinyMCE'). ", il me faudra plus d'explication. Car à cette ligne de code, le programme ne fait que récupérer le texte contenue dans une balise générée par le composant, afin de faire les traitements demandés.
Code de la ligne en question : " sCommand = pautObject>>Document>>getElementById("tinyQuery_" + NumériqueVersChaîne(:m_nUniqID))>>innerText "
Quelle action faite vous lors du déclenchement de l'erreur ?
Quel text passez-vous (si c'est le cas) qui a lieu avant le déclenchement de l'erreur ?
J'ai besoin de plus de détail, comme par exemple le code que vous avez écrit, si le déclenchement a lieu à ce moment là.

Cordialement,
Luc Rollinger
Lapalys
Bonjour

Je n'arrive pas à faire fonctionner votre composant.

J'ai d'abord eu un problème de gabarit. Erreur à la ligne 33 du traitement Procédure locale SetInit (Composant 'TinyMCE'). Vous avez appelé la fonction ChangeStyle. Aucun gabarit n'est défini pour le projet. Vous devez spécifier le 3eme paramètre de changeSyle() (= le nom du fichier .wdy à utiliser). En effet, dans les paramètres du projet, j'ai pour "gabarit du projet"="<aucun>". J'ai mis celui "System" et je passe ce message. Je ne comprend pas en quoi le gabarit du projet influence ce composant qui utilise TinyMCE uniquement.

Ensuite, un toast rouge avec "Le chemin fourni n'est pas valide". Dans la trace, je trouve ceci
Erreur à la ligne 22 du traitement Méthode SpyQuery (Composant 'TinyMCE').
Erreur à la ligne 87 du traitement Méthode _DownloadLanguage (Composant 'TinyMCE'). Vous avez appelé la fonction fSupprime. Vous ne devez pas passer une chaîne vide à la fonction.
Erreur à la ligne 70 du traitement Méthode _DownloadLanguage (Composant 'TinyMCE'). Vous avez appelé la fonction zipOuvre. Le chemin fourni n'est pas valide.

Aucune idée de quoi ça parle. Pour info, la seule langue du projet est "français canadien". Des fichiers lngxxx.tmp sont bien créés dans le répertoire temp de l'exe (est-il possible de forcer ce répertoire ailleurs ?)

Merci d'avance pour vos conseils.
dotnuts
Je viens de mettre en place une nouvelle version, qui corrige un bug sur la construction des éléments de propriété.
De plus à l'adresse ci-dessous, vous trouverez la nouvelle version du document PDF, contenant les explications sur la composition de la structure (STTinyMCE_Settings) de paramétrage.

https://www.dotnuts-development.com/wp-content/uploads/2016/12/documentation-api-en-francais-du-composant-tinymce-pour-windev.pdf

Cordialement,
Luc Rollinger
dotnuts
Je viens de me re-pencher sur le code, et j'avais complètement oublier que vous pouvez configurer la structure STTinyMCE_Settings.
Commencer par déclarer une variable de ce type.
Puis récupérer la configuration par défaut de la fenêtre interne :
MyVar est un STTinyMCE_Settings
MyVar = CFI_TINYMCE.GetDefaultSettings() // Renvoie le paramétrage par défaut
ou
MyVar = CFI_TINYMCE.GetSettings() // Renvoie le paramétrage en cours

Puis paramétrer la partie " Content.taBlockFormats ", soit :
MyVar.Content.taBlockFormats = tableau associatif de chaînes (Clé = Titre, Valeur = Format)

MyVar.Content.taBlockFormat["Header 2"] = "h2"
MyVar.Content.taBlockFormat["Header 3"] = "h3"
...

Puis réaffecter la variable de structure : CFI_TINYMCE.SetSettings(MyVar)

Si l'affectation de la configuration est faite après l'appel à la fonction Navigate(), il vous faudra alors faire appel à la fonction ResetTinyMCE()

CFI_TINYMCE.ResetTinyMCE(Vrai, Vrai)
Le premier paramètre (valeur par défaut = Faux (Ne conserver pas la configuration en cours du TinyMCE) ).
Le deuxième paramètre (valeur par défaut = Faux (Ne conserve pas le contenue en cours du TinyMCE) ).

La structure de paramétrage contient de nombreuses possibilités, veuillez la parcourir.
Dans le document PDF, je rajouterai prochainement l'explication de la structure.
https://www.dotnuts-development.com/wp-content/uploads/2016/12/documentation-api-en-francais-du-composant-tinymce-pour-windev.pdf

Luc Rollinger
dotnuts
Pour le moment, c'est la seule solution pour cacher les éléments désirés du contenu TinyMCE.
Effectivement, cela ne s'applique pas aux outils de TinyMCE. Il faudra attendre que je me penche sur l'ajout de ses fonctionnalités.
De plus, il faudra penser que le faite de ne pas donner accès au <H1> n'empêchera à l'utilisateur de l'ajouter depuis l'aperçu du code.
De ce faite, l'action de ne pas donner accès à certaines fonctionnalités, inclus le faite de vérifier la présence des tags associés dans le code, et de les supprimer.

Luc Rollinger
Anonyme
Ok ! Mais donc, si je comprend bien, ca ne sert a rien que j'essaye de cacher certaines toolbar si c'est appliqué sur le contenu.

Je vais donc attendre vos mise a jour futur !

Merci bien.
dotnuts
Voici un code exemple que j'utilise dans mes testes.

LOCAL
sCSS est une chaîne
sColor est une chaîne
tabColor est un tableau de chaînes

tabColor = ["red", "green", "blue", "black", "white", "grey", "yellow"]
InitHasard()
sColor = tabColor[Hasard(1, tabColor..Occurrence)]

sCSS = ChaîneConstruit([
h1 {
color: %1;
}
h2 {
color: green;
}
img {
border: 0px none;
}
], sColor)

CFI_TINYMCE.SetContent_CSS(sCSS)

L'appel à la fonction SetContent_CSS(), peut ce faire, avant ou après l'appel à la fonction Navigate().
Il faut faire attention, à ne pas mettre les balises <style></styles> dans le code CSS, la fonction le gère de lui-même.
Tout comme il n'est pas nécessaire de faire du code CSS sur la classe " mceContentBody ". Car l'affectation du code CSS concerne directement le contenu (body) de l'objet TinyMCE.

Cordialement,
Luc Rollinger
Anonyme
J'arrive pas vraiment reussi a m'en servir, vous pourriez me donner un petit exemple ?

J'ai essayé plusieurs chose, genre :

CFI_Tiny.SetContent_CSS("<style>body.mceContentBody { background-color: #AAA; }</style>")
CFI_Tiny.SetContent_CSS("body.mceContentBody { background-color: #AAA; }")

et d'autres variantes, mais je ne vois aucun changement.

J'ai essayé avant le navigate et apres.

Si vous avez un exemple, je prend, et apres j'arrete de vous embetter ;)

Merci pour vos réponses rapide en tous cas !
dotnuts
Il y a déjà une procédure SetContent_CSS (depuis la fenêtre interne) qui permet d'injecter le code CSS de la page TinyMCE.
Cordialement,
Luc Rollinger
Anonyme
Ok, je comprend!

En attendant, il y aurait pas moyen de faire un truc un peu degeulasse, genre editer un fichier css qui est chargé par le composant, pour faire un display:none sur les elements qui posent un probleme ?

Ou pouvoir saisir du code javascript pour initialiser tinymce ?

Si y'a pas moyen de contourner alors j'attendrai ;)

Merci pour tout !
dotnuts
Bonjour,
La configuration de la barre d'outils est en cours de développement. Il sera possible de choisir l'ordre des boutons et par groupe d'outils.
Je regarderai la possibilité de désactivé des éléments, comme par exemple <H1> .
Je ne peut pas vous donnez de délai, car ma priorité est le développement de mon ERP. Qui lui-même utilise le composant TinyMCE.
De ce faite, le composant TinyMCE évoluera au fur et à mesure des besoins.

Cordialement,
Luc Rollinger
Anonyme
Bonjour, le composant a l'air de fonctionner nickel.
Par contre, est-ce qu'il y a un moyen de configurer les toolbar qui sont affichées dans tinymce ?
Par exemple, j'aimerai désactiver la possibilité d'ajouter un <h1>.

Cordialement,

Gilles
Anonyme
OK tout marche correctement ....
dotnuts
Je viens de déposer une mise à jour du composant, qui corrige le problème du code javascript compressé en mode exécutable.
Cordialement,
Luc Rollinger
Anonyme
OK Pas de soucis

JMDG
dotnuts
Bonjour,
Après avoir copier votre code (ci-dessous) et télécharger une copie de TinyMCE et jQuery, j'ai pu recréer voir le problème.
Il est vrai que la différence entre les tests (en mode GO) et l'exécutable, c'est que le code du script est compressé. De ce faite, les consoles de scripts n'accepte pas qu'à la fin d'une " } " (fonction javascript), qu'il n'y ait pas de point-virgule.
Après en avoir mis ici et là, je pu vérifier que cela fonctionnait correctement.
Donc dès que reçoit mon ordinateur, je pourrai apporter les corrections nécessaires.

Cordialement,
Luc Rollinger
Anonyme
Voilà en affichant dans un navigateur le fameux fichier puis en affichant la console et en rafraichissant l'affichage ... il semble manquer un ";" quelque part ....
SyntaxError: missing ; before statement[En savoir plus] tinymce_9.html:16:1544 dans firefox et chrome
Pourquoi en développement cela marche-t'il alors ????

A+
Anonyme
Oups ..... chez moi, tiny est au même niveau que temp...... Je teste l'affichage dans un navigateur ....
On a le temps .... réparez votre PC .... et on verra

A+
dotnuts
Bonjour,
Effectivement vous ne pouvez pas m'envoyer un message contenant du code, sur mon site.
Le fichier html généré n'est (normalement) pas à mettre en cause, puisque le fichier généré est le même en test qu'en exécutable.
Là où il faut bien faire attention, c'est dans les deux lignes suivantes :

<script src="../tinymce/jquery.js"></script>
<script src="../tinymce/tinymce.min.js"></script>

Est-ce que "tinymce" se trouve bien à niveau supérieur du dossier "temp", et contient bien tous les fichiers nécessaire au fonctionnement de "TinyMCE", ainsi que le fichier "jquery.js". Normalement, selon vos messages précédents, cela est bien le cas.

Donc le test à faire est d'exécuter le fichier html temporaire dans votre navigateur, et de voir ce qu'il se passe.
Est-ce que votre navigateur met une alerte de fonctionnement (intranet, etc...) ?

Comme je vous l'ai dit dans mon message précédent, mon ordinateur est en réparation. Je n'ai donc plus mes projets à disposition pour aller plus en avant pour approfondir le problème. Soyez patient, et je regarderai de plus prêt dès qu'il sera de retour.

Cordialement,
Luc Rollinger
Anonyme
Le répertoire "temp" se crée bien dans le répertoire de l'application exe. Quand j'ouvre ma fenêtre avec le champ fenêtre interne, un fichier HTML est créé (tinymce_9.html) dont voici le contenu:

<!DOCTYPE html>
<html>
<head>
<style>
html, body { margin: 0 0 0 0; height: 100%; overflow: hidden }
p {margin: 0; padding: 0;}
</style>
<script src="../tinymce/jquery.js"></script>
<script src="../tinymce/tinymce.min.js"></script>
</head>
<body>
<textarea></textarea>
<div id="tinyContent_9" style="visibility:hidden;"></div>
<div id="tinyQuery_9" style="visibility:hidden;"></div>
<div id="tinyAnswer_9" style="visibility:hidden;"></div>
<script>$( document ).ready(function() {var timer;var o;tinymce.init({setup: function(editor) {editor.on("PostProcess", function(e) {e.content = e.content.replace(/(<p>&nbsp;<\/p>)/gi, "<br />");e.content = e.content.replace(/(<div>&nbsp;<\/div>)/gi, "<br />");});editor.on("init", function(e) {editor.execCommand("mceFullScreen");});},removed_menuitems : "fullscreen",selector:"textarea",resize: false,height : "100%",wordcount_cleanregex: /[0-9.(),;:!?%#$?\x27\x22_+=\\/\-]*/g,wordcount_countregex: /[\w\u2019\x27\-\u00C0-\u1FFF]+/g,directionality: "ltr",language: "fr_FR",menubar: ["file,edit,insert,view,table,format,code,tools"],plugins: ["fullscreen"],toolbar: ["ltr,rtl,newdocument,preview,print,searchreplace,cut,copy,paste,undo,redo,removeformat,styleselect,formatselect,fontselect,fontsizeselect,code","bold,italic,underline,strikethrough,alignleft,aligncenter,alignright,alignjustify,bullist,numlist,outdent,indent,table,blockquote,subscript,superscript,hr,charmap","forecolor,backcolor,emoticons,image,insertdatetime,link,media,nonbreaking,template,visualblocks,visualchars"],statusbar: true,elementpath: true,forced_root_block: "p"});$.fn.setPage = function() {var page = $("#tinyContent_9").html();tinymce.activeEditor.setContent(page);$("#tinyContent_9").html("");};$.fn.getPage = function() {var page = tinymce.activeEditor.getContent();$("#tinyContent_9").html(page);};$.fn.insertText = function() {var text = $("#tinyContent_9").html();if (text != undefined) { tinymce.activeEditor.insertContent(text); }$("#tinyContent_9").html("");}$.fn.setCSS = function() {var text = $("#tinyContent_9").html();$("#tinyContent_9").html("");if (text != undefined) {var css = text.split(",");tinymce.activeEditor.contentCSS = css;}}$.fn.setQuery = function(query, obj) {if (obj != undefined) { o = obj; }$("#tinyQuery_9").text(query);timer = setInterval($.fn.getAnswer, 1000);};$.fn.setAnswer = function(answer) {$("#tinyAnswer_9").text(answer);};$.fn.getAnswer = function() {var answer = $("#tinyAnswer_9").text();if (answer != "") {clearInterval(timer);if (answer != "cancel") {var items = answer.split(":");var c = items[0];items.splice(0, 1);var v = items.join(":");$('#tinyAnswer_9').text("");$.fn.setCommand(c, v);}}};$.fn.setCommand = function(c, v) {if (c != "") {switch (c) {case "preview" :tinymce.execCommand("mcePreview");break;case "code" :tinymce.activeEditor.setContent(v);$("#tinyContent_9").html("");break;case "colorpicker" :if (o != undefined && v != "") { o(v); }o = null;break;case "media" :case "video" :case "audio" :case "image" :case "document" :if (o != undefined && v != "") { o.insertContent(v); }o = null;break;default :break;}}};});</script>
</body>
</html>

Courage ... on y arrivera

NB: j'ai essayé de vous envoyer ce message via votre site ..... l'envoi ne se fait pas ....
Anonyme
Désolé pour ce problème. Est-ce que lors du lancement de l'exécutable, un sous répertoire "temp" (à la racine de l'exe) se crée bien ? Car c'est dans ce répertoire que le fichier html temporaire est créé pour visualiser votre tinymce. Si ce fichier existe, essayé (sans fermer votre exe) d'ouvrir ce fichier avec votre navigateur, et de vois ce qu'il se passe. Si le fichier et/ou le dossier "temp" n'existe pas, vérifiez les droits. Vérifiez aussi les paramètres d'exécution des pages web en local/intranet. Normalement je ne vois pas la différence entre une lanceur (exe) de projet et l'exe lui-même pour l'ouverture d'une page web, mais sait-on jamais...
Malheureusement, dans l'état actuelle des choses, je ne peut m'avancer plus, car mon poste de travail est mort. J'en ai pour 3 semaines afin que soit réparer et de retrouver mon environnement de travail avec mes projets, et donc y voir plus claire.
Cordialement,
Luc Rollinger
Anonyme
Re,

Jquery est bien là. Je peux ouvrir la page de setting mais rien n'y fait, le layout ne s'affiche pas. Très bizarre car en développement cela marche très bien.
J'ai même copié directement le répertoire tiny dans le répertoire de l’exécutable .... nada

A+

J-M des Grottes
Anonyme
Pour répondre à la personne du message précédent, il faut impérativement avoir le sous dossier tinymce ainsi que le fchier jquery.js dans ce dernier, dans le répertoire de l'exécutable. Pour ce qui est de la récupération du settings, cela ce passe depuis le champ de la fenêtre intere. La récupération du settings est au format jSon. Pour de. Plus amples informations, veuillez vous reporter au document PDF accessible sur mon site, à la page du produit. http://www.dotnuts-development.com
Anonyme
Bonjour,

Il y a 2 soucis:
1) En développement, mon champ est correct mais en production, le champ ne s'affiche pas. Je n'ai qu'un petit champ multiligne à la place. Les 2 tests s'effectuent sur le même PC (Windows 10)

2) Comment stocker la structure des settings ? Via threadextensions ?

A plus
Anonyme
Super boulot!
Moi qui combine actuellement une appli sous Webdev et sous windev et m'arrachait les cheveux avec des champs de saisie en Html et en RTF ... je suis comblé !
Je teste pour le moment mais c'est très prometteur.
Merci
A PROPOS
EVALUATION :
4.758(8)
TELECHARGEMENTS :
931
MISE À JOUR :
12 novembre 2018
VERSION :
1.0 AM
CONCERNE :
WINDEV
Version minimale : 01F210067f
TAILLE :
5,6 Mo