Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| MEMO avec des possibilités de commande | |
| | Auteur | Message |
---|
Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 1:16 | |
| En travaillant sur un objet mettant en forme du teste stylé, avec des commandes (j'en ai parlé ici, celà n'a intéressé personne, et c'est sans problème), je me suis demandé s'il était pas possible de de faire quelque chose avec un memo (sans le style et la couleur évidemment). J'ai trouvé l'idée intéressante et trouvé très pratique pour l'un de mes programmes. C'est sans prétention et vous réagissez comme il vous plait. On peut mettre des liens qui positionne dans la fenêtre du memo, un ancre. On peut aussi en cliquant sur un mot du texte, avoir une information sur ce mot. On peut aussi mettre une commande qui appellera un programme qu'on aura auparavant fait, remplir une liste des ancres du texte, et en cliquant sur un item, aller directement à l'endroit recherché. Le problème est que les commandes sont visibles, dont par exemple pour mettre un ancrage à un mot, qui pourrait être le titre d'un paragraphe, j'ai choisi d'entouré de marqueurs ainsi: •~titre~• faire en sorte que ce ne soit pas trop moche. En lançant le programme, pour exécuter les commandes, on clique sur le bouton rouge. Une règle apparait jaune en haut, et le memo devient actif. Pour écrire dans le memo, et reclique sur la règle jaune, et apparait des boutons et un memo. Une commande se construit soit en sélectionnant un mot dans le texte, et cliquer sur l'edit en haut. Soit en écrivant le mot dans l'edit. Ensuite on clique sur l'un des boutons en haut, et la commande est reportée dans le memo. Si cela intéresse l'un d'entre-vous, il y aura certainement des questions. C'est un programme teste, et vous en faite ce qu'il vous plait. Peut-être peut-il servir de tuto. - Code:
-
' memo dans le style du STYLUS width 0,350 : left 0,screen_x-width(0) label tracage_regle , action_regle , button_HINT , button_SAUVE , AncreLienHintCde dim memo% , no% , action% , pere% , hint$ , htfont% , txt_memo$
' ICI MODIFIER LE CHEMIN DE HINT$: hint$ = "hint_teste.txt" : ' à mettre dans le dossier voulu <--------------------------------------- ' pere% = 300 : form pere% : width pere%,500 : height pere%,400 (teste sur une autre fenêtre) pere% = 0 :' parent du programme, sinon modifier après avoir créé le parent command_target_is pere%
memo% = 100 : action% = -1 memo memo% top memo%,25:width memo%,300:height memo%,300:font_size memo%,10:font_bold memo% : font_name memo%,"Consolas" on_click memo%,action_regle : bar_vertical memo% clear memo% ' modifier la ligne suivante dir_change "C:\TRAVAIL\UTILitaire" :' < ----------------------------------------------------------- if file_exists("tuto.txt") = 1 then file_load memo%,"tuto.txt" :' <--------------------- pour tester no% = memo%+1
form no% :' +1 hide no% : top no%,340 : left no%,400: border_hide no%:width no%,width(memo%): height no%,300 no%=no%+1 ' ----------- préparation hint -------------------------------- memo no% :' +2 top no%,0:parent no%,no%-1 : width no%,500:font_size no%,10 : height no%,height_client(no%-1)-50 color no%,200,200,200 : bar_vertical no% ' ----------- bouton sortie ----------------------------------- no% = no%+1 button no% :' +3 parent no%,no%-2 top no%,height_client(memo%+1)-20 :caption no%,"Sortie": font_size no%,10:font_bold no%:width no%,60 on_click no%,button_HINT :height no%,18 ' ------------------------------------------------------------ no%=no%+1 :' 104 PICTURE no% :' +4 left no%,3:width no%,width(memo%):height no%,20:font_name no%,"Courier New":font_size no%,10: htfont% = text_height("A",no%) : font_size no%,8 on_click no%,tracage_regle : hide no% ' ------------------------------------------------------------ no%=no%+1 DLIST no% :' +5 if file_exists("hint_teste.txt") = 1 then file_load no%,"hint_teste.txt" ' ------------------------------------------------------------ no%=no%+1 COMBO no% :' +6 parent no%,no%-5 top no%,no%-2 : left no%,width(memo%)-70:height no%,20:font_size no%,10: text no%,"Action": width no%,60 item_add no%,"Ajouter" : item_add no%,"Enregistrer" on_click no%,button_SAUVE ' ------------------------------------------------------------ no%=no%+1 :' +7 BUTTON no% left no%,0:caption no%,"Ancre" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +8 BUTTON no% left no%,36:caption no%,"Lien" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' parent no%, ' -------------------- no% = no%+1 : ' +9 BUTTON no% left no%,72:caption no%,"Hint" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +10 BUTTON no% left no%,108:caption no%,"Action":top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +11 EDIT no% left no%,170:top no%,5:height no%,20 : on_click no%,AncreLienHintCde ' ------------------------------------------------------------ tracageRegle(memo%+4) show memo%+4 end ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracage_regle: tracageRegle(104) return
sub tracageRegle(BOX_PictureRegle%) dim_local a%,b% repeat : pause 10 : until scancode = 0 2d_target_is BOX_PictureRegle% : print_target_is BOX_PictureRegle% : 2d_pen_width 1 2d_clear if action% = 0 action% = -1 2d_fill_color 255,255,0 : color memo%+4,255,255,0 hide memo%+7 : hide memo%+8 : hide memo%+9 : hide memo%+10 : hide memo%+11 for a% = 0 to width(BOX_PictureRegle%) step 50 2d_line a%,0,a%,20 : 2d_line a%+25,10,a%+25,20 for b% = a% to a%+50 step 5 : 2d_line b%,15,b%,20 : next b% if a%/50 = int(a%/50) then print_locate a%-7,0 : print a% next a% on_click memo%,action_regle ELSE action% = 0 2d_target_is memo%+4 : 2d_clear : 2d_fill_color 255,0,0 : color memo%+4,255,255,255 : 2d_circle 153,12,7 2d_fill_color 255,255,255 show memo%+7 : show memo%+8 : show memo%+9 : show memo%+10 : show memo%+11 off_click memo% end_if if action% = -1 then on_click memo%,action_regle end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Action_regle: actionRegle() return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub actionRegle() hide 104 : off_click memo% dim_local line%,a%,tx$,lien$,action$ , v% , w% , b$ , ancre% ,sel$ , cur% ,cumul% , j% , u$ dim_local mousey% : set_focus memo% clipboard_string_copy chr$(7) : clipboard_paste memo% :' met un marqueur dans le memo if count(memo%) > 0 :' on recherche la ligne for a% = 1 to count(memo%) tx$ = item_read$(memo%,a%) v% = instr(tx$,chr$(7)) if v% > 0 if v% = 1 tx$ = right_pos$(tx$,v%+1) else tx$ = left$(tx$,v%-1)+right_pos$(tx$,v%+1) end_if ' ------------ line% = a% cur% = v% item_delete memo%,a% item_insert memo%,a%,tx$ :' on rétabli la ligne sans marqueur exit_for end_if next a% ' ******************************************************************** ' recherche lien tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•#",v%+1) w%= instr_pos(tx$,"#•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) ' contrôle que le curseur est dans la zone de recherche sur la ligne if cur% => v% and cur% <= w% ' on modifie les repères du lien b$ = "•~"+right_pos$(b$,3) : b$ = upper$(left$(b$,instr(b$,"#•")-1)+"~•") for a% = 1 to count(memo%) tx$=item_read$(memo%,a%) : u$=upper$(tx$) if instr(u$,b$) > 0 ' on va sur cette ligne if v% > 0 item_delete memo%,a% item_insert memo%,a%,tx$ :' normalement cela devrait mettre le lien dans la fenêtre du memo show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if next a% ' --- if action% = -1 then on_click memo%,action_regle : show memo%+4 exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 ' *********************************************************************** ' recherche commande tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•[",v%+1) w%= instr_pos(tx$,"]•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) if cur% => v% and cur% <= w% : ' contrôle que le curseur est dans la zone de recherche sur la ligne aller_cmd(upper$(b$)) show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 ' *********************************************************************** ' recherche HINT tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•!",v%+1) w%= instr_pos(tx$,"!•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) ' contrôle que le curseur est dans la zone de recherche sur la ligne if cur% => v% and cur% <= w% Ceci_est_un_HINT(upper$(b$)) show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 end_if show 104 if action% = -1 then on_click memo%,action_regle end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ' ici sub où on fait la programmation de chaque commande sub aller_cmd(cmd$) ' ---------teste--------- ( comparaison en majuscule ! ) if cmd$ = "•[STOP]•" if message_confirmation_yes_no("on arrète ? ") = 1 then terminate end_if end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub Ceci_est_un_HINT(cmd$) dim_local a$, l%,h%, i% , w%, F% , ex%: f% = memo%+5 : ex% = memo%+2 clear ex% :' hide memo%+6 if count(f%) > 0 for i% = 1 to count(f%) a$ = rtrim$(item_read$(f%,i%)) if a$ = cmd$ for h% = i% to count(f%) a$ = item_read$(f%,h%) if l% < len(a$) l% = len(a$) w% = text_width(a$,memo%+4) :' sur un picture end_if if a$ <> "$$$" item_add ex%,a$ else if w% > 300 then w% = 300 width memo%+1,w%+20 width ex%,width_client(memo%+1) height ex%,count(ex%)* htfont%+20 height memo%+1, height(ex%)+25 left memo%+1,left(pere%)+20 top memo%+1,mouse_y_position(memo%) if top(memo%+1)+height(memo%+1) > screen_y then top memo%+1,(screen_y-height(memo%+1))/2 show memo%+1 top memo%+3,height(memo%+1)-26 :show memo%+3 top memo%+6 , top(memo%+3) on_click memo%+3,button_hint exit_sub end_if next h% else show memo%+6 end_if next i% end_if show memo%+1 :' form show memo%+3 :' button sortie end_sub
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% button_HINT: hide memo%+1 return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% button_SAUVE: no% = item_index(memo%+6) select no% case 1 : item_add memo%+5%,text$(memo%+2%) case 2 : file_save memo%+5%,"hint_teste.txt" end_select return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AncreLienHintCde: no% = number_click - memo% off_click memo%+11 select no% case 7:' Ancre clipboard_string_copy "•~" + text$(memo%+11) + "~•" clipboard_paste memo% : set_focus memo% case 8:' lien clipboard_string_copy "•#" + text$(memo%+11) + "#•" clipboard_paste memo% : set_focus memo% case 9:' hint clipboard_string_copy "•!" + text$(memo%+11) + "!•" clipboard_paste memo% : set_focus memo% case 10:' action clipboard_string_copy "•[" + text$(memo%+11) + "]•" clipboard_paste memo% : set_focus memo% case 11:' edit text memo%+11,select_read$(memo%) +chr$(0) set_focus number_click end_select on_click number_click, AncreLienHintCde return
le tuto en teste ici: - TUTO:
•~TUTORIEL~•
Dans cet exemple, "•~TUTORIEL~• est le titre et le formatage d'un ancre. Pour pouvoir exécuter les commandes de ce tutuo, il faut que la rêgle au dessu soit en jaune. Si ce n'est pas le cas, il suffit de cliquer dessus. La règle en jaune permet d'exécuter les commandes, si on reclique dessus, elle redevient normale, ce qui permet de modifier le texte. • Voici un programme qui a pour fonction de mettre des commandes dans un memo. Celles-ci permettent en cliquant dessus, soit de faire un saut comme un •!ancre!•
On peut mettre avoir comme commande: des •!liens!• (l'entourage de liens, ici a pour fonction en cliquant dessus, de monter une infos qui serait enregistrée. Si ce n'est pas le cas, on peut alors la créer), on peut comme il est précidé de mettre une info, l'explication se trouve en cliquant sur: •!HINT!• et également mettre une •!commande!•
On peut mettre une commande qui sera lancer, une fois que la programmation sera inclue dans le memo. Ainsi en cliquant sur •[stop]• le programme réagira à la commande si elle est faite.
Voici un lien: •#tutoriel#• pour se brancher ici
à enregistrer dans le même dossier comme: "tuto.txt" Il y a un autre fichier: - hint_test.txt:
•!ANCRE!• En entourant un mot, une phrase avec comme on voit dans le titre, les caractères: "•~" et "~•", le curseur ira vers cet ANCRE. $$$ •!LIENS!• Pour atteindre un emplacement dans le memo, il faut entourer le lien avec le même mot qui a été choisi pour créer un ancre. Pour une meilleur lisibilitée d'un lien dans le memo parmis le texte, les repères choisis ont étés: "•#" et "#• pour entourer le mot. Ainsi: •#ANCRE#• si dans le texte du memo, se trouve "•~ANCRE~•", le curseur ira se brancher vers cette ancre. $$$ •!COMMANDE!• A la place d'un lien qui ira directement vers un ancre, une commande permet de sortir du programme pour exécuter une tâche, ou mettre un message. Une commande dans ce programme, se place de cette façon: commence par: "•[" et fini par "]•". Ainsi: voir ce •[MESSAGE]•, à la lecture de ce mot, si il a été programmé, exécutera le programme que vous aurez préparé. A noter qu'une SUB est créée pour cela, il s'agit de: "aller_cmd(cmd$)" Dans celle-ci il convient de mettre les lignes qui servent pour cette commande. Pour tester voici des lignes a inclurent dans cette SUB: if cmd$ = "•[MESSAGE]•" message "Vous avez créé un message" end_if Donc en cliquant su le mot "•[message]•" qui peut-être dont la casse n'intervient pas comme pour les autres mots-clés, un message apparettra, puis la main sera rendu au contenu du memo. $$$ •!HINT!• Cette commande permet d'apporter une information à un mot en cliquant dessus. Le mot en question sera entouré de "•~" et de "~•" . L'exemple suivant: •~exemple~• inséré dans le texte du memo, aura pour fonction si on clique dessus, d'aller voir dans un fichier, si il est créé, de lire les ligne de ce dernier pour voir l'existance de: •~EXEMPLE~•. Deux possibilités: 1) la recherche retrouve le mot, et une fenêtre apparait avec les explications qui s'imposent. 2) Le mot n'est pas trouvé dans le fichier. A noter que le mot doit se trouver au départ d'une ligne. Il vous sera alors possible d'inclure la définition, après l'avoir créée dans le memo présent dans la fenêtre. $$$
dans le programme il est enregistré comme: "Hint_test.txt"
Dernière édition par Oscaribout le Dim 9 Sep 2018 - 19:55, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 13:35 | |
| - Oscaribout a écrit:
- C'est sans prétention et vous réagissez comme il vous plait.
Bonjour Oscaribout, Donc je réagis sans crainte. J'ai ouvert un dossier et j'y ai mis le code et les 2 fichiers.txt. J' ai fait divers tests, et je suis parvenu à ouvrir des fenêtres supplémentaires contenant les fichiers que tu as mis en annexe. Pour le moment, je ne comprends, pas bien, la finalité de ton programme. J'ai relu ton message plusieurs fois, mais ça ne change rien. J'ai quand même compris que ce tu appelles un ancre serait en quelle-que-sorte une balise, à moins que je sois à coté de la plaque. En tous cas, ça fonctionne sans plantage. Si tu pouvais donner un exemple d'utilisation simple, ça m'aiderait à poursuivre. A+ | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 14:19 | |
| Merci Jean Claude d'avoir testé et répondu.
Honnêtement je ne pensais pas vraiment avoir une intervention, et j'ai pas trop insisté sur les explications.
Ce matin j'ai effectivement pensé qu'il aurait été bon d'en dire davantage.
J'ai pas de temps pour tout reprendre maintenant. J'interviendrai ce soir pour donner le maximum d'explications avec les copies d'écran. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 16:51 | |
| Bonjour à tous ! @Oscaribout Merci ! Sympa et original comme programme. Avec ma maladresse, j'ai réussi à le planter ! Désolé ! Je n'ai pas du savoir faire comme il faut. En tous cas, le système de "balises interactives" est ingénieux. Je vais refaire des tests... Bonne continuation ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 16:57 | |
| Suite des tests... Je me suis fait piéger ! Je n'ai pas remarqué les deux orthographes différentes pour le nom de fichier : Je continue mes essais... EDIT : Bon, je n'ai pas encore tout compris. Les liens fonctionnent. Les commandes HINT, STOP... fonctionnent. Mais quand je veux enregistrer avec le COMBO Action, le programme plante. Je vais attendre d'avoir plus d'explications... | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: MEMO avec des possibilités de commande Lun 3 Sep 2018 - 23:41 | |
| Merci pour ces testes. D'abord pour commencer, comme je l'ai dit dans mon message précédent, je pensais pas que vous trouveriez de la valeur pour ce programme. Je me suis demandé si cela valait la peine de le publier. Au départ c'est pour moi un programme de teste pour réfléchir, et éventuellement en reprendre l'idée générale pour l'inclure dans un programme général. - Marc a écrit:
- Je n'ai pas remarqué les deux orthographes différentes pour le nom de fichier :
Je suis désolé, c'est un beau piège, je rectifierais en haut. En testant sur une commande qui a pour effet d'apporter une info comme: "•!info!•" et que celle-ci n'existe pas, dans mon idée, la fenêtre devrait apparaître pour pouvoir la créer et l'ajouter ensuite. Cette partie là j'ai pas trop tester, vu que j'ai créé les "HINT" à partir du Bloc-notes, et j'ai oublié d'aller au fond des choses. Donc je vais revoir cela. Je comprend pas trop l'erreur que tu signales concernant le combo pour la sauvegarde, vu qu'il s'agit de sauvegarder un DLIST, et c'est la bonne commande: case 1 : item_add memo%+5%,text$(memo%+2 %) -> MEMO%+2 c'est un EDIT Ca y-est! il y a "2%" case 2 : file_save memo%+5 %,"hint_teste.txt" -> MEMO%+5 c'est un DLIST Je reporterai la correction plus haut.Sans en savoir d'avantage, il faut que je puisse reproduire l'erreur. Je viens de regarder les aides concernant DIST, FILE_LOAD, FILE_SAVE pour voir les erreurs possibles, et tout semble correct. A suivre! MAINTENANT les commandes prévues: Pour signaler un ancre qui est un emplacement pour replacer la ligne dans la fenêtre visible du memo, la commande est "•~" le titre, et "~•" Les marqueurs encadre un titre qui permet au programme de le retrouver dans le texte, et replacer le curseur vers cette ligne. Celà donne par exemple: Dans un texte (je met volontairement des lignes courtes) si je veux me rebrancher ici sur un mot qui est peut-être un titre: •~Afficher cette ligne~•, en mettant n'importe où dans le texte, qui peut-être répété à plusieurs endroits, un lien qui a cette représentation: •#Afficher cette ligne#• , en cliquant sur "Afficher cette ligne", le programme déplace la fenêtre pour voir la ligne concernée. C'est la même chose qu'en cliquant dans le menu du site Panoramic pour aller au sujet concerné. On a vu le moyen de mettre un ancre, celui de mettre un lien pour se rebrancher dessus, maintenant "HINT" J'ai pris le même terme que Panoramic_Editor. La représentation est : •!information!• Pour n'importe quel mot, on peut mettre une information par cette commande. Il faut au préalable (comme pour programmer, que le mot soit déjà dans un fichier, ici "HINT_Teste.txt" Le titre c'est à vous de le reprendre comme il vous plait. Personnellement je me sert du bloc-notes, mais pour inclure un mot dans le fichier, celui-ci doit correspondre au mot cliqué et en majuscule, au début d'une ligne. exemple: dans une ligne on clique sur "•!info!•" le mot recherché sera: "•!INFO!•" Dans le fichier, il devra donc être au début de ligne ainsi: •!INFO!• . "•" ce tape avec ALT gauche enfoncé + les chiffres: 0149 . Dans les lignes suivantes, on met le texte d'explication, et à la dernière on ajoute: "$$$" Reste les commandes. Cela a pour fonction de permettre depuis le texte d'agir avec Panoramic, chose qu'on ne peut pas faire avec HVIEWER. Si vous cliquez sur la fenêtre du HVIEWER même avec un on_click dessus, vous ne faites rien. Une commande se fait ainsi: •[commande]• . En cliquant dessus, le programme la correspondance dans le programme. A partir de là le programme va voir dans la sub: "aller_cmd(cmd$)". Il faut donc donc que dans cette sub, le programme retrouve la commande. Si elle existe, alors il y a exécution de celle-ci. Vous remarquez que vers lis lignes 215, une commande "•[STOP]•" est programmé. Donc si vous mettez dans le memo le mot •[STOP]•, il y aura un détournement et une demande de confirmation vous demandera si vous voulez arrêter le programme. Cela permet si on veut d'interagir avec un combo qui aurait des liens pour se rebrancher dessus, ou modifier le texte de celui-ci ou autre. C'est selon les besoins. Reste le menu du haut. Deux possibilités. Au départ ce sont des Boutons qu'on voit avec un edit et un point rouge. En réalité le point rouge est dessiné sur un picture à la place d'une rêgle, mais comme les boutons occupent la place cela permet de matérialiser un endroit à cliquer. Pour l'utilisation des boutons, et mettre des commandes, il faut que le curseur soit au bon endroit dans le texte. Il y a deux possibilité, soit on sélectionne un mot qui deviendra un mot-clé pour telle fonction, en cliquant sur l'EDIT du HAUT, à côté, le texte est reproduit. Ensuite on choisi l'action voulu: mettre un ancre à un emplacement, un lien, mettre une info, et Action signifie Commande. Au clique de l'un des boutons, la commande est intégrée dans le texte. Il est évident que si les délimiteurs que j'ai choisi ne vous conviennent pas, il est facile de les retrouver dans le programme, et en mettre d'autre. L'inconvénient majeur d'un memo, c'est qu'on ne peut pas le styler. Pour l'autre possibilité, c'est de mettre le curseur à l'endroit d'insertion, de cliquer sur l'edit qui videra le contenu, vu que rien n'est sélectionné, et après ajout du texte, procéder comme pour la première méthode. Pour l'instant je remet le programme ici, je dors debout: - Code:
-
' memo dans le style du STYLUS width 0,350 : left 0,screen_x-width(0) label tracage_regle , action_regle , button_HINT , button_SAUVE , AncreLienHintCde dim memo% , no% , action% , pere% , hint$ , htfont% , txt_memo$
' ICI MODIFIER LE CHEMIN DE HINT$: hint$ = "hint_teste.txt" : ' à mettre dans le dossier voulu <--------------------------------------- ' pere% = 300 : form pere% : width pere%,500 : height pere%,400 (teste sur une autre fenêtre) pere% = 0 :' parent du programme, sinon modifier après avoir créé le parent command_target_is pere%
memo% = 100 : action% = -1 memo memo% top memo%,25:width memo%,300:height memo%,300:font_size memo%,10:font_bold memo% : font_name memo%,"Consolas" on_click memo%,action_regle : bar_vertical memo% clear memo% ' modifier la ligne suivante dir_change "C:\TRAVAIL\UTILitaire" :' < ----------------------------------------------------------- if file_exists("tuto.txt") = 1 then file_load memo%,"tuto.txt" :' <--------------------- pour tester no% = memo%+1
form no% :' +1 hide no% : top no%,340 : left no%,400: border_hide no%:width no%,width(memo%): height no%,300 no%=no%+1 ' ----------- préparation hint -------------------------------- memo no% :' +2 top no%,0:parent no%,no%-1 : width no%,500:font_size no%,10 : height no%,height_client(no%-1)-50 color no%,200,200,200 : bar_vertical no% ' ----------- bouton sortie ----------------------------------- no% = no%+1 button no% :' +3 parent no%,no%-2 top no%,height_client(memo%+1)-20 :caption no%,"Sortie": font_size no%,10:font_bold no%:width no%,60 on_click no%,button_HINT :height no%,18 ' ------------------------------------------------------------ no%=no%+1 :' 104 PICTURE no% :' +4 left no%,3:width no%,width(memo%):height no%,20:font_name no%,"Courier New":font_size no%,10: htfont% = text_height("A",no%) : font_size no%,8 on_click no%,tracage_regle : hide no% ' ------------------------------------------------------------ no%=no%+1 DLIST no% :' +5 if file_exists("hint_teste.txt") = 1 then file_load no%,"hint_teste.txt" ' ------------------------------------------------------------ no%=no%+1 COMBO no% :' +6 parent no%,no%-5 top no%,no%-2 : left no%,width(memo%)-70:height no%,20:font_size no%,10: text no%,"Action": width no%,60 item_add no%,"Ajouter" : item_add no%,"Enregistrer" on_click no%,button_SAUVE ' ------------------------------------------------------------ no%=no%+1 :' +7 BUTTON no% left no%,0:caption no%,"Ancre" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +8 BUTTON no% left no%,36:caption no%,"Lien" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' parent no%, ' -------------------- no% = no%+1 : ' +9 BUTTON no% left no%,72:caption no%,"Hint" :top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +10 BUTTON no% left no%,108:caption no%,"Action":top no%,5:height no%,15:width no%,35 on_click no%,AncreLienHintCde ' ------------------------------------------------------------ no% = no%+1 : ' +11 EDIT no% left no%,170:top no%,5:height no%,20 : on_click no%,AncreLienHintCde ' ------------------------------------------------------------ tracageRegle(memo%+4) show memo%+4 end ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracage_regle: tracageRegle(104) return
sub tracageRegle(BOX_PictureRegle%) dim_local a%,b% repeat : pause 10 : until scancode = 0 2d_target_is BOX_PictureRegle% : print_target_is BOX_PictureRegle% : 2d_pen_width 1 2d_clear if action% = 0 action% = -1 2d_fill_color 255,255,0 : color memo%+4,255,255,0 hide memo%+7 : hide memo%+8 : hide memo%+9 : hide memo%+10 : hide memo%+11 for a% = 0 to width(BOX_PictureRegle%) step 50 2d_line a%,0,a%,20 : 2d_line a%+25,10,a%+25,20 for b% = a% to a%+50 step 5 : 2d_line b%,15,b%,20 : next b% if a%/50 = int(a%/50) then print_locate a%-7,0 : print a% next a% on_click memo%,action_regle ELSE action% = 0 2d_target_is memo%+4 : 2d_clear : 2d_fill_color 255,0,0 : color memo%+4,255,255,255 : 2d_circle 153,12,7 2d_fill_color 255,255,255 show memo%+7 : show memo%+8 : show memo%+9 : show memo%+10 : show memo%+11 off_click memo% end_if if action% = -1 then on_click memo%,action_regle end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Action_regle: actionRegle() return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub actionRegle() hide 104 : off_click memo% dim_local line%,a%,tx$,lien$,action$ , v% , w% , b$ , ancre% ,sel$ , cur% ,cumul% , j% , u$ dim_local mousey% : set_focus memo% clipboard_string_copy chr$(7) : clipboard_paste memo% :' met un marqueur dans le memo if count(memo%) > 0 :' on recherche la ligne for a% = 1 to count(memo%) tx$ = item_read$(memo%,a%) v% = instr(tx$,chr$(7)) if v% > 0 if v% = 1 tx$ = right_pos$(tx$,v%+1) else tx$ = left$(tx$,v%-1)+right_pos$(tx$,v%+1) end_if ' ------------ line% = a% cur% = v% item_delete memo%,a% item_insert memo%,a%,tx$ :' on rétabli la ligne sans marqueur exit_for end_if next a% ' ******************************************************************** ' recherche lien tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•#",v%+1) w%= instr_pos(tx$,"#•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) ' contrôle que le curseur est dans la zone de recherche sur la ligne if cur% => v% and cur% <= w% ' on modifie les repères du lien b$ = "•~"+right_pos$(b$,3) : b$ = upper$(left$(b$,instr(b$,"#•")-1)+"~•") for a% = 1 to count(memo%) tx$=item_read$(memo%,a%) : u$=upper$(tx$) if instr(u$,b$) > 0 ' on va sur cette ligne if v% > 0 item_delete memo%,a% item_insert memo%,a%,tx$ :' normalement cela devrait mettre le lien dans la fenêtre du memo show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if next a% ' --- if action% = -1 then on_click memo%,action_regle : show memo%+4 exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 ' *********************************************************************** ' recherche commande tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•[",v%+1) w%= instr_pos(tx$,"]•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) if cur% => v% and cur% <= w% : ' contrôle que le curseur est dans la zone de recherche sur la ligne aller_cmd(upper$(b$)) show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 ' *********************************************************************** ' recherche HINT tx$ = item_read$(memo%,line%) v%=0 repeat v% =instr_pos(tx$,"•!",v%+1) w%= instr_pos(tx$,"!•",v%+1) if v%> 0 and w%> 0 b$ = mid$(tx$,v%, w%-v%+2) ' contrôle que le curseur est dans la zone de recherche sur la ligne if cur% => v% and cur% <= w% Ceci_est_un_HINT(upper$(b$)) show 104 if action% = -1 then on_click memo%,action_regle exit_sub end_if end_if until v%=0 or w% = 0 or scancode = 27 end_if show 104 if action% = -1 then on_click memo%,action_regle end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ' ici sub où on fait la programmation de chaque commande sub aller_cmd(cmd$) ' ---------teste--------- ( comparaison en majuscule ! ) if cmd$ = "•[STOP]•" if message_confirmation_yes_no("on arrète ? ") = 1 then terminate end_if end_sub ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub Ceci_est_un_HINT(cmd$) dim_local a$, l%,h%, i% , w%, F% , ex%: f% = memo%+5 : ex% = memo%+2 clear ex% :' hide memo%+6 if count(f%) > 0 for i% = 1 to count(f%) a$ = rtrim$(item_read$(f%,i%)) if a$ = cmd$ for h% = i% to count(f%) a$ = item_read$(f%,h%) if l% < len(a$) l% = len(a$) w% = text_width(a$,memo%+4) :' sur un picture end_if if a$ <> "$$$" item_add ex%,a$ else if w% > 300 then w% = 300 width memo%+1,w%+20 width ex%,width_client(memo%+1) height ex%,count(ex%)* htfont%+20 height memo%+1, height(ex%)+25 left memo%+1,left(pere%)+20 top memo%+1,mouse_y_position(memo%) if top(memo%+1)+height(memo%+1) > screen_y then top memo%+1,(screen_y-height(memo%+1))/2 show memo%+1 top memo%+3,height(memo%+1)-26 :show memo%+3 top memo%+6 , top(memo%+3) on_click memo%+3,button_hint exit_sub end_if next h% else show memo%+6 end_if next i% end_if show memo%+1 :' form show memo%+3 :' button sortie end_sub
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% button_HINT: hide memo%+1 return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% button_SAUVE: no% = item_index(memo%+6) select no% case 1 : item_add memo%+5,text$(memo%+2) case 2 : file_save memo%+5,"hint_teste.txt" end_select return ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AncreLienHintCde: no% = number_click - memo% off_click memo%+11 select no% case 7:' Ancre clipboard_string_copy "•~" + text$(memo%+11) + "~•" clipboard_paste memo% : set_focus memo% case 8:' lien clipboard_string_copy "•#" + text$(memo%+11) + "#•" clipboard_paste memo% : set_focus memo% case 9:' hint clipboard_string_copy "•!" + text$(memo%+11) + "!•" clipboard_paste memo% : set_focus memo% case 10:' action clipboard_string_copy "•[" + text$(memo%+11) + "]•" clipboard_paste memo% : set_focus memo% case 11:' edit text memo%+11,select_read$(memo%) +chr$(0) set_focus number_click end_select on_click number_click, AncreLienHintCde return
Le clic sur un mot ne fonctionne que si la règle en haut est visible. Le mot ici montré est une info que le programme peut montrer. (Je ne pouvais pas faire l'image avec la règle jaune, la partie cliqué était recouverte par l'explication) Je regarderai plus en détail pour ajouter ou modifier le texte d'une info (HINT). A la relecture avant d'envoyer, je précise bien en mode édition, en cliquant sur l'EDIT du haut, si du texte est sélectionné, il est recopié dans l'edit. Le mode édition est celui où on voit le point rouge. Le mode commande s'obtient en cliquant dessus, la règle jaune apparait. Tout clic dans le memo si un mot a des délimiteurs, la commande est exécuté. En recliquant sur la règle jaune, on revient en mode édition. | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: MEMO avec des possibilités de commande Mar 4 Sep 2018 - 0:03 | |
| Je viens de constater que le visu du memo de mon programme apporte une confusion à la compréhension d'un "hint" (une info: Les marqueurs ne sont pas les bons. Pour un hint cela est dans le programme: •! le mot !• | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: MEMO avec des possibilités de commande Dim 9 Sep 2018 - 19:52 | |
| J'ai eu du mal de programmer cette semaine. Question de temps, et de problème divers. J'ai revu la sauvegarde des infos des liens cliqués. En réalité je ne sais plus exactement ce que j'ai fait. A si j'ai apporté un ajout pour faire un cryptage en Panoramic. Le but est de rendre illisible un texte lorsqu'on le lit, mais pas de faire un fichier sécurisé. Ce que je voulais était de mélanger rapidement en basic. Comme il y a un découpage de mots, il ne faut pas qu'il y ait des guillemets de chaque côté de ce dernier, car vous savez que Panoramic les supprime. Aussi j'ai fait en sorte que le programme appelle 2 fichiers cryptés au lancement. Cela parle de réaction de certains intervenant qu'on entend en ce moment à la radio et la télé. Pour ce faire j'ai été obligé de parler de moi, et c'est pas par plaisirs, car j'ai horreur d'être mis en scène, mais je ne vois pas comment je pouvais faire autrement pour parler de chose véridique que peut-être vous n'approuverez pas. C'est votre droit. Ca n'apportera rien, je le sais, mais peut-être que cela permettra de réfléchir et de remettre en question tout ce qu'on vous dit. Je vous dis de suite que j'ai les pieds sur terre, j'ai pas de blog ou autre. Je suis seul dans mon coin, et n'allez pas me confondre avec un certain 'ClauseDB'. Je ne reviendrai pas là dessus. Pour le programme, les fichiers appellent des liens cryptés, donc il faudra mettre en commentaire les lignes que j'ai indiquées. Le programme fonctionne chez moi, mais je me rends compte pendant que j'écris, j'ai pas repris le chemin du dossier, aussi, le programme compilé, cela m'étonnerai qu'il marche. Je rappelle que ce programme pour moi, en le publiant, a toujours été un exemple pour donner éventuellement une solution de programmation. Aussi j'ai pas intégré des boutons de sauvegarde du fichier principal. Je m'en veux de ne pas l'avoir fait, mais c'est pas compliqué de rajouter un bouton pour le faire. Un programme qui partira aux oubliettes n'a pas besoin de sophistication. Il me vient une idée et je vais trouvé. J'ai trouvé: ChainageIl y a peut-être une possibilité? Je dois envoyer j'ai pu le temps. Au fait je ne sais pas si les explications que j'ai données ont été comprises. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MEMO avec des possibilités de commande Lun 10 Sep 2018 - 13:35 | |
| Bonjour à tous, @Cosmos, J'ai testé ce matin memo_lien.bas . Après avoir indiqué le bon chemin en ligne 7 du code, j'ai lancé. Un grand et bon moment de lecture ... Pour le programme lui-même, maintenant je comprend bien mieux la finalité de ce programme. J'ai testé le lien info "comment je m'en suit sorti" et j'ai bien eu la fenêtre correspondante à ce lien. Pour le moment je n'ai rien fait d'autre que lire le texte, qui est intéressant contrairement à ce que tu pourrais penser. J'ai voulu enregistrer "message2.mél" à partir du programme en utilisant l'option n°5, résultat: le fichier est crée mais il est vide Une première piste: tu utilise un OPEN_DIALOG (memo%+14), je pense qu'il serait mieux d'utiliser un SAVE_DIALOG. J'ai corrigé le code en ligne 93 en remplaçant OPEN_DIALOG par SAVE_DIALOG, mais le fichier reste vide Bon courage. A+ | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: MEMO avec des possibilités de commande Mer 12 Sep 2018 - 1:06 | |
| - Jean Claude a écrit:
- J'ai voulu enregistrer "message2.mél" à partir du programme en utilisant l'option n°5, résultat: le fichier est crée mais il est vide Question
Une première piste: tu utilise un OPEN_DIALOG (memo%+14), je pense qu'il serait mieux d'utiliser un SAVE_DIALOG. J'ai corrigé le code en ligne 93 en remplaçant OPEN_DIALOG par SAVE_DIALOG, mais le fichier reste vide Désolé de répondre tardivement, mais je dois prété mon portable à l'un de mes fils. Je regarderai plus tard les remarques que tu me fais. Pour ce qui est du save_dialog, j'y ai pensé mais pour moi, je pense que le programme étant un sous-ensemble d'un programme principal, j'ai ajouté à la fin cet objet, en pensant sérieusement qu'il devrait se trouver dans le programme qui l'appel. Ceci dit, je te comprend. On devrait à partir du moment qu'on publie, faire en sorte que tout soit actif. A+, qu'en j'en aurait le temps. | |
| | | Contenu sponsorisé
| Sujet: Re: MEMO avec des possibilités de commande | |
| |
| | | | MEMO avec des possibilités de commande | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |