Dernière version compilée le 02/12/2020 voir MAJ
Le Papoteur est une banque de messages tout faits, qui peuvent être enrichis et recopiés au format EMAIL-Compatible
Une fois rédigé et enrichi, le message est enregistré
Il peut être copié dans le presse papier de 3 façons :
- Bouton Copier
- Double clic sur le nom de fichier
- Touche CTRL + Numéro du fichier dans la liste de 0 à 9 (ou 0 = 10)
Télécharger le paquet :
Programme + Exemple + Source avec Bibliothèques
Note pour le développeur
Le texte enrichi (RichEdit) est traduit en code HTML, puis affiché dans un navigateur tampon
Il fait appel aux composants DELPHI : RichEdit et WebBrowser et à la bibliothèque RichEditToHTML du Jedi Project
JvRichEditToHtml1.ConvertToHtmlStrings(RTF, Memo1.lines); WebBrowser_DISPLAY(WebBrowser1, Memo1.Text); Application.ProcessMessages; WebBrowser_CopyToClipBoard(WebBrowser1);
Avec les fonctions DISPLAY
WebBrowser.Navigate('about:' + CodeHTML, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
Et COPYTOCLIPBOARD
with WebBrowser do BEGIN SetFocus; ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT); ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT); ExecWB(OLECMDID_CLEARSELECTION, OLECMDEXECOPT_DONTPROMPTUSER); END;
Mise à Jour (20.11) Boites de saisie
- Débogage de la version précédente…
- 3 modes de d’insertion pour la saisie sont introduits, accessibles par clic droit sur le texte.
- Marque d’insertion
- Boite de saisie vide
- Boite de saisie avec valeur par défaut
Mise en oeuvre | Exemple | Action |
Si le texte contient la marque d’un point d’insertion | (signe pipe = ALT+6) | pose d’un stérilet | | Alors le curseur est placé exactement sur ce point à l’ouverture du fichier |
Si le texte contient la marque d’une boite de saisie vide | [?] | Alors une boite de saisie vide s’ouvre automatiquement quand on pointe le fichier, et la valeur saisie remplace le [?] dans le texte. |
Si le texte contient la marque d’une boite de saisie avec valeur par défaut | [défaut] | Alors une boite de saisie s’ouvre proposant cette valeur par défaut quand on pointe le fichier, et la valeur saisie remplace le [défaut] dans le texte. (on peut corriger cette valeur si elle ne convient pas, comme dans le marqueur précédent.) |
NOTES POUR LE PROGRAMMEUR
- On fait ici appel à la puissance des Expressions régulières, qui permettent un code très simple et très puissant.
- La Bibliothèques System.regularexpressions, doit être déclarée dans les clauses USES du programme
procedure TForm1.InsertionExpressionExecute(Sender: TObject); var Match: tmatch; r, s, t: string; p: integer; begin try Match := tregex.Match(RTF.Text, '\[(\w+)\]'); if Match.Success then Begin r := Match.groups[1].Value; s := '[' + r + ']'; try Match := tregex.Match(RTF.Text, '\b(.+)\[' + r + '\]'); if Match.Success then t := Match.groups[1].Value; if InputQuery('Insérer un texte après ...', t, r) then Begin RTF.SetFocus; p := RTF.Findtext(s, 0, length(RTF.Text), []); RTF.SelStart := p; RTF.SelLength := length(s); RTF.SelText := r; End; except on e: exception do showmessage('777 : erreur expression régulière' + cr + t + cr + cr + e.message); end; End; except on f: exception do showmessage('785 : erreur expression régulière' + cr + r + cr + cr + f.message); end; end;
- On utilise essentiellement la variable MATCH (de type Tmatch), appelée de cette façon
Tregex.Match ( "texte à scanner", "expression régulière à trouver");
- Si l’expression est trouvée Match.Success retourne VRAI et l’extraction peut commencer.
- La chaîne ciblée par l’expression régulière est placée dans la valeur Match.Value
- Et Il est possible d’isoler la partie intéressante de l’expression en créant des groupes symbolisés par des parenthèses
(.+)\[\?\]
- Signifie “Un ou plusieurs caractères (+) quelconques (.) suivi des 3 lettres [?]” sachant qu’on ne prend que (la série de caractères) et pas le [?]
- On remarque que les caractères [ et ? étant des caractères réservés de signification particulière dans les expressions régulières, doivent être “échappés” par l’antislash (sous peine d’erreur) \[ et pas [ pour garder leur signification “caractère”
- Pour extraire la valeur du groupe entre parenthèses on utilise la propriété GROUPS de l’objet TMatch
Match.Groups[1].Value
- Qui signifie prendre la valeur du 1er groupe entre ()
- On rappelle que Match.Groups[0].Value donne la valeur totale de la chaîne (équivalente à Match.Value)
Modifications
- 02/12/2020 :
- Débogage
- Simplification de l’insertion d’un texte dans un autre par double clic sur le Numéro
- Ajout Menu aide
- 29/11/2020 : Verrouillage des fichiers (clic droit) pour éviter les modifs intempestives des modèles)
Mise à Jour 20.11.15
Modification de l’interface (ergonomie)
Débogages (écho sur les listes de phrases) => menu contextuel insérer
Ajout popup fichier : explorer le dossier
Option “Cacher l’Agenda”