| Module Bloc-Notes | |
|
Auteur | Message |
---|
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Module Bloc-Notes Mer 4 Juil 2012 - 13:36 | |
| Suite au problème de Vinkei sur ce sujet, j'ai concocté un petit module pour insérer une zone de saisie multilignes dans un GUI.  Télécharger Module Bloc-Notes version 2.1 bêtaTélécharger le projet de démonstration (code commenté) Version 2.0 bêtaVersion 1.0 bêta Liste des changements- Spoiler:
-
Version 2.1 - Simplification de la gestion des tableaux dynamiques
- Suppression des reliques de la version 1.0 qui proposaient l’auto-complétion sur les boutons
Version 2.0 - "Structuration" des commandes (par la structure BlocNotes)
- Prise en charge de plusieurs bloc-notes
- Correction de certains bugs d'affichage, notamment lors de défilement
- Ajout du défilement horizontal
- Possibilité d'accéder et de modifier les défilements horizontaux et verticaux, la position du curseur et la sélection
- D'autres choses que j'oublie
Installation- Spoiler:
-
Note pour aller plus vite : l'étape importante est la numéro 3. - Importez le module (clic droit sur l'onglet Scripts de l'éditeur puis "Import script...").
- Dans le GUI où vous voulez placer la zone de saisie, créez un nouveau bouton aux dimensions voulues. Le texte de ce bouton correspondra à celui affiché par défaut dans la zone de saisie. Sa police (type + couleur) sera celle utilisée pour afficher le texte de l'éditeur. Son image (si vous en spécifiez une) sera utilisée comme fond du bloc-notes.
- Notez le nom du bouton que vous venez de créé. Supposons ici que ce bouton s'appelle btnBlocNotes. Dans la fonction game_start du Global script, insérez la commande suivante (pensez à remplacer le nom du bouton par celui que vous avez donné) :
- Code:
-
BlocNotes.Convert(btnBlocNotes); - C'est parti, le joueur pourra taper du texte dans le bloc-notes !
Consultez la description de la commande BlocNotes.Convert pour plus de détails. Vous pouvez définir un curseur à utiliser lorsque la souris survole la zone de saisie en modifiant le 0 de la sixième ligne du fichier BlocNotes.asc ( #define MODE_CURSEUR 0) par le numéro/nom du curseur que vous voulez ( 2 ou eModeInteract par exemple). Il n'y a pas de barre de défilement nativement implémentée, mais vous pouvez en créer vous-même en utilisant les propriétés XOffset et YOffset ainsi que Width et Height. Liste des commandes- Spoiler:
-
-
- Code:
-
static function BlocNotes.Convert(Button* bouton, optional int couleur_fond, optional int fond_curseur, optional defilement) Convertit le bouton en bloc-notes. Par défaut, si vous n'avez pas associé d'image au bouton, la couleur de fond du bloc-notes est transparente. Vous pouvez passer une couleur de votre choix comme premier paramètre COULEUR_FOND. La couleur de fond du texte sélectionné est automatiquement calculée par défaut, mais le résultat n'est pas toujours optimal. Vous pouvez spécifier une couleur personnalisée en passant une valeur pour FOND_CURSEUR (auquel cas vous devrez nécessairement passer une valeur à COULEUR_FOND : passez la valeur COLOR_TRANSPARENT pour laisser transparent). Le paramètre DEFILEMENT peut valoir : - eBlocN_NotScrollable, auquel cas votre bloc-notes ne pourra défiler ni horizontalement, ni verticalement et ne pourra contenir plus de texte que sa surface ne le permet
- eBlocN_HorizontallyScrollable, auquel cas votre bloc-notes pourra défiler horizontalement seulement et ne pourra contenir plus de ligne que sa hauteur ne le permet
- eBlocN_VerticallyScrollable, auquel cas votre bloc-notes pourra défiler verticalement seulement et affichera les lignes dépassant sa largeur sur plusieurs lignes
- eBlocN_EvenlyScrollable, auquel cas votre bloc-notes pourra défiler aussi bien horizontalement que verticalement
Cette fonction est statique, vous devez donc l'utiliser en la faisant précéder de BlocNotes.-
- Code:
-
static Button* BlocNotes.ActiveButton Retourne/Définit le bouton bloc-notes qui a actuellement le focus (c'est-à-dire sur lequel se trouve le curseur). Cette propriété est statique, vous devez donc l'utiliser en la faisant précéder de BlocNotes.
-
- Code:
-
Button* BlocNotes.ButtonBloc Retourne/Définit le bouton bloc-notes auquel est associée l'instance BlocNotes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
String BlocNotes.Text Retourne/Définit le texte affiché sur le bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly String BlocNotes.Line[] Retourne un tableau contenant chaque lignes du bloc-notes. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly int BlocNotes.RowCount Retourne le nombre de lignes que peut afficher le bloc-notes sur sa hauteur. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly int BlocNotes.LineCount Retourne le nombre de lignes que contient actuellement le bloc-notes. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly int BlocNotes.Height Retourne la hauteur occupée par le texte du bloc-notes. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly int BlocNotes.Width Retourne la largeur occupée par le texte du bloc-notes. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.XOffset Retourne/Définit le décalage horizontal pour l'affichage du texte. Si vous passez une valeur inadéquate, elle est automatiquement ajustée. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.YOffset Retourne/Définit le décalage vertical pour l'affichage du texte. Si vous passez une valeur inadéquate, elle est automatiquement ajustée. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.Cursor Retourne/Définit le caractère sur lequel se trouve actuellement le curseur. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.Select Retourne/Définit le caractère sur lequel se trouve actuellement la sélection. Du texte est sélectionné dès lors que la valeur de Cursor est différente de celle de Select. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
readonly String BlocNotes.SelectedText Retourne le texte actuellement sous sélection. Cette propriété est en lecture-seule : vous ne pouvez pas la modifier directement. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.GetCharIndex(int ligne, int caractere) Retourne la position du CARACTEREième caractère à la LIGNEème ligne dans le texte du bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.GetLineOfChar(int index) Retourne le numéro de la ligne où est affiché le INDEXième caractère du texte du bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
int BlocNotes.GetPositionInLineOfChar(int index) Retourne la position dans la ligne où se trouve le INDEXième caractère du texte du bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
function BlocNotes.SaveInFile(String fichier) Sauvegarde le contenu du bloc-notes dans un FICHIER texte. ATTENTION :, le contenu de FICHIER sera écrasé. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
function BlocNotes.LoadFile(String fichier) Charge le contenu de FICHIER dans le bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes.
-
- Code:
-
function BlocNotes.Refresh() Met à jour l'affichage du bloc-notes. Cette propriété n'est pas statique : vous devez l'utiliser sur une variable de type BlocNotes. Utilisation en jeu- Spoiler:
-
L'utilisation est très semblable à celle d'un bloc-notes traditionnel. Vous pouvez sélectionner le texte à l'aide de la souris ou en maintenant shift enfoncée tandis que vous déplacez le curseur à l'aide du clavier. Vous pouvez couper le texte avec Ctrl-X et le copier avec Ctrl-C. En revanche, pour coller le texte vous devrez appuyer sur Ctrl-P (comme Paste) et non Ctrl-V car cette dernière combinaison de touches est nativement utilisée par AGS pour afficher des informations sur le moteur. Pensez à prévenir vos joueurs quelque part pour éviter qu'ils ne coupent leur texte sans pouvoir le coller par la suite. Le texte défile automatiquement selon la position du curseur. Limitations actuelles- Spoiler:
-
- Ne fonctionne pas lorsqu'il y a un TextBox d'activé dans un GUI affiché (conflit avec le texte entré).
- Peut être assez lent si la surface est grande, contient plusieurs lignes et si la résolution du jeu est supérieure à 640*480.
Le module est actuellement en version bêta. Merci de me rapporter les éventuels (probables) bugs que vous rencontrerez ! N'hésitez pas non plus à apporter des suggestions d'améliorations. _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Dernière édition par Kitai le Mar 18 Juin 2013 - 13:52, édité 4 fois (Raison : Version 2.1) | |
|
 | |
Billbis Disciple de la Grande Tasse Bleue


Nombre de messages : 1346
Date d'inscription : 10/05/2012
 | Sujet: Re: Module Bloc-Notes Mer 4 Juil 2012 - 17:07 | |
| Bravo Kitai ! Les modules proposés par ce forum sont de vrais pépites pour des novices en programmation comme moi. Une vrai valeur ajouté de la communauté AGS. _________________ Mon petit DevBlog
| |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Jeu 5 Juil 2012 - 9:01 | |
| Le fichier avait un soucis d'encodage des caractères qui empêchait d'importer le module. J'ai mis le tout à jour : ça devrait désormais fonctionner sans soucis. _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Lun 27 Mai 2013 - 17:41 | |
| Suite à une remarque de Billbis, je me suis penché sur une utilisation des expressions régulières avec le module BlocNotes. En ont résulté une (presque) véritable refonte de ce module et une petite démo conjointe RegExp/ BlocNotes (voir premier message). Tous les commentaires et retours sont évidemment les bienvenus. _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Baguettator Adepte de la Grande Tasse Bleue


Nombre de messages : 186
Date d'inscription : 21/05/2020
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 13:15 | |
| Bonjour Kitai !
Je découvre ce module, car je cherche à implanter un bloc notes pour le joueur (qu'il puisse prendre des notes, et les exporter en PDF genre pour garder des traces de son aventure par exemple).
J'ai vu ton module mais cela me fait douter :
"Peut être assez lent si la surface est grande, contient plusieurs lignes et si la résolution du jeu est supérieure à 640*480."
Mon jeu est en 1920*1080. Cela veut dire que ça va être TRES lent et pas très joli ?
Ou existe-t-il un module plus récent qui tourne mieux ? | |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 14:23 | |
| - @Baguettator a écrit:
- "Peut être assez lent si la surface est grande, contient plusieurs lignes et si la résolution du jeu est supérieure à 640*480."
Mon jeu est en 1920*1080. Cela veut dire que ça va être TRES lent et pas très joli ? C'était y'a quelques années, avec des ordis moins puissants et un moteur AGS moins optimisé. Je te conseille simplement d'essayer et voir comment ça tourne _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Baguettator Adepte de la Grande Tasse Bleue


Nombre de messages : 186
Date d'inscription : 21/05/2020
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 15:52 | |
| C'est génial !!! ça marche du tonerre !! Faut juste faire gaffe et mettre une petite condition pour la fonction onkeypress, car sinon ça fait aussi les effets prévus dans cette fonction...  J'ai pas tout à fait compris pour créer un défilement : je voudrais que ce soit possible de défiler le texte uniquement verticalement (donc comme prévu en standard dans le script). C'est donc la propriété "BlocNotes.YOffset" qui doit être incrémentée ? Genre BlocNotes.YOffset++ ou BlocNotes.YOffset-- ? EDIT : et pardon, une autre petite question : une possibilité d'extraire ensuite ce que le joueur a écrit dans ce "bloc notes" dans un fichier externe à AGS ? J'ai vu ton module qui extrait un texte AGS en PDF, mais ça me semble compliqué de devoir écrire des balises dans le bloc notes d'AGS... Il existe un moyen plus simple ? (si par exemple le texte du bloc notes est extrait dans un format type "bloc notes" de windows ?). | |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 19:37 | |
| - @Baguettator a écrit:
- J'ai pas tout à fait compris pour créer un défilement : je voudrais que ce soit possible de défiler le texte uniquement verticalement (donc comme prévu en standard dans le script). C'est donc la propriété "BlocNotes.YOffset" qui doit être incrémentée ? Genre BlocNotes.YOffset++ ou BlocNotes.YOffset-- ?
Oui c'est ça. Je sais plus dans quelle direction ça va, mais essaie et tu verras. Tu mets genre un bouton v qui incrémente YOffset et un bouton ^ qui la décrémente. Tu peux aussi utiliser la molette de la souris je pense, avec la fonction on_mouse_click en testant eMouseWheelNorth/eMouseWheelSouth et en incrémentant/décrémentant YOffset en conséquence. - @Baguettator a écrit:
- J'ai vu ton module qui extrait un texte AGS en PDF, mais ça me semble compliqué de devoir écrire des balises dans le bloc notes d'AGS...
Bah niveau rendu visuel du texte, ce bloc notes permet simplement d'ajouter des retours à la ligne, il affichera pas du texte en gras ou en italiques, donc c'est pas comme si y'avait un énorme intérêt à en faire un fichier PDF. Mais si vraiment tu le veux, il "suffirait" d'insérer une balise /newline à chaque retour de ligne lorsque tu génères le PDF, et ça devrait donner un truc potable (peut-être... à voir) Sinon oui, juste un txt c'est bien : - Code:
-
File *output = File.Open("fichier.txt", eFileWrite); output.WriteRawLine( monBlocNotes.Text ); output.Close(); _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Baguettator Adepte de la Grande Tasse Bleue


Nombre de messages : 186
Date d'inscription : 21/05/2020
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 19:51 | |
| Alors par contre, question bête : je n'arrive pas à utiliser XOffset et YOffset. "BlocNotes.YOffset" ne fonctionne pas... Comment on fait pour les incrémenter du coup ? | |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 20:31 | |
| - @Baguettator a écrit:
- "BlocNotes.YOffset" ne fonctionne pas...
L'attribut YOffset n'est pas static, c'est un attribut d'instance. Si tu regardes mon example, je l'ai appelé sur monBlocNotes, pas sur BlocNotes _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Baguettator Adepte de la Grande Tasse Bleue


Nombre de messages : 186
Date d'inscription : 21/05/2020
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 23:06 | |
| Alors, en effet j'ai compris, j'ai créé une instance "blocnotes" en haut de mon global script ! J'ai repris la fonction des boutons de défilement de ton projet de démonstration, mais j'ai un null pointer reference lorsque je clique dessus... J'avoue que si tu peux m'aider un peu pour mettre en place cela, c'est top, car j'ai du mal à tout comprendre, je manipule pas encore très bien les structures...  | |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Mer 4 Nov 2020 - 23:26 | |
| J'avoue que la documentation est pas claire, j'ai dû ouvrir le projet démo pour comprendre comment ça marche.
En suppostant que tu as appelé ton instance blocnotes (c'est-à-dire tout en minuscules, ce qui la différencie de BlocNotes) et en supposant que ton bouton s'appelle btnBloc, écris blocnotes.ButtonBloc = btnBloc; (juste après Convert) et alors ça devrait suffir à associer ton instance avec le bouton que tu utilises comme bloc-notes.
_________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Baguettator Adepte de la Grande Tasse Bleue


Nombre de messages : 186
Date d'inscription : 21/05/2020
 | Sujet: Re: Module Bloc-Notes Jeu 5 Nov 2020 - 10:02 | |
| Ouais, c'est bon, ça marche !! Pour l'export dans un fichier .txt, je n'arrive pas à le mettre en oeuvre par contre. J'ai créé un bouton, quand je clique dessus ça lance le scripte que tu m'as donné, mais rien ne se passe. J'ai pourtant créé un fichier dans le dossier du jeu (Compiled/Windows) qui s'appelle "JournalColonie.txt", et le bouton d'export est scripté ainsi : - Code:
-
File *output = File.Open("JournalColonie.txt", eFileWrite); output.WriteRawLine( blocnotes.Text ); output.Close();
J'ai raté quelque chose ? C'est la première fois que j'utilise ce genre de fonctions "File", "Write" etc... | |
|
 | |
Kitai Délégué de la tasse bleue


Nombre de messages : 2818
Date d'inscription : 01/08/2006
 | Sujet: Re: Module Bloc-Notes Jeu 5 Nov 2020 - 16:44 | |
| C'est possible que y'ait des restrictions sur les droits d'écriture. Regarde si tu as un fichier warnings.log dans ton dossier Compiled. Le mien me dit ça : - Citation :
- Script : (room:1)[G 358] Attempt to access file 'JournalColonie.txt' denied (cannot write to game installation directory);
Dans mon cas, ça fait que le fichier est placé ailleurs : - Citation :
- Path will be remapped to the app data directory: '/home/CHEMINVERSDOSSIERLOCAL/'
Lorsque j'ouvre le fichier à ce nouvel emplacement, il contient bien le texte du bloc notes. Tu peux essayer d'ajouter $SAVEGAMEDIR$/ ou $APPDATADIR$/ devant JournalColonie.txt comme décrit ici pour voir si ça te permet d'écrire dans un fichier accessible (voir le point IMPORTANT sur la page de documentation). En fait c'est possible que déjà par défaut le fichier où écrit AGS se trouve tout simplement pas dans Compiled/Windows mais plutôt dans un de ces deux dossiers, celui où se trouvent les fichiers de sauvegarde du jeu, ou bien dans un dossier partagé _________________ Ga is Ga Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
| |
|
 | |
Contenu sponsorisé
 | Sujet: Re: Module Bloc-Notes  | |
| |
|
 | |
| Module Bloc-Notes | |
|