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 |
|
|
| Fonction inkey$ inactive dans un form autre que form0 | |
|
+6Froggy One papydall Jean Claude Minibug Jicehel champollion 10 participants | |
Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Mai 2013 - 18:25 | |
| @ Champollion, As tu un site qui regroupe tes créations ? J' ai fait, vite fait, une recherche mais un nombre de liens incalculables me sont apparus... Pour ton code, je ne vois pas pourquoi tu passes par dessus le form 0 qui est automatiquement créé en Panoramic. Pour l' apprentissage du langage, il me semble que tu veuilles aller plus vite que la musique ( et je parle en connaissance de cause... ). Il serait plus judicieux d' apprendre, à force d' utilisation, à maitriser les commandes les unes après les autres avec de petit programmes, avant d'essayer de pondre un programme très complexe. J' en ai fait l' amère expérience . Comme tu as déjà des bases solides en programmation, cela devrait aller très vite... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Mai 2013 - 18:34 | |
| @ Froggy one,
Réponse en plusieurs étapes :
1 / Il n' y a pas d'oublis dans le code. Si tu regardes bien le label clic est déclaré dans la sub "declaration()"
2/ Pour m' être battu et débattu avec les procédures, en avoir plein mes programmes, je peux te dire que tu peux en mettre plusieurs dizaines et même plus sans problème.
cf KGF_SUB.bas et autres.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Mer 29 Mai 2013 - 18:41 | |
| Et même des centaines, voir des milliers... Je n'ai pas rencontré de limites. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Mer 29 Mai 2013 - 19:02 | |
| Salut Froggy One
Pour le label Clic, Ygeronimi y a répondu : il n’y a pas d’omission donc. A propos, je ne préfère pas utiliser LABEL, sauf si c’est incontournable (les ON_XXX exigent un LABEL)
Pour les 2 SUB qui se terminent par RETURN : tu as raison de relever cette étourderie de ma part.
Pour le nombre de SUB dans un programme, la réponse de Klaus est sans équivoque !
A+
| |
| | | champollion
Nombre de messages : 14 Date d'inscription : 25/05/2013
| Sujet: fonction inkey$ inactive Mer 29 Mai 2013 - 19:29 | |
| Bonjour Igeronimi Je n'ai pas de site pour mes programmes mais seulement pour mes photos.(denischampollion.com) Sinon, le reste dec mes activités est dans face book.J'ai un stock d'anciens programmes éducatifs faits en basic. Ils m'ont servi d'exemples pour mon éditeur qui les a reprogrammés. Depuis je ne fais plus que des ossatures de programme vu que de toute façon, ils sont refaits bien mieux ( voir mes "lecthèmes et parcours mathématiques" dans le site Jocatop mais je progresse un peu dans la programmation structurée. Dans deux jours, je vous envoie la suite du prog d'orthographe sur lequel je travaille. Bonne fin de soirée Denis Champollion J'ai démarré en ZX 81 puis MO5 TO8 PC WIND et Linux et LOGO bien sur
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Mer 29 Mai 2013 - 19:41 | |
| - champollion a écrit:
- J'ai démarré en ZX 81 puis MO5 TO8 PC WIND et Linux et LOGO bien sur
C’était le bon vieux temps : un ZX81 avec 1Ko de mémoire vive extensible à 16Ko et une fréquence de 4MHz ! Que des bons souvenirs ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Mai 2013 - 19:52 | |
| Tiens, çà existe çà, des gens qui éditent les idées des autres... ( @ papydall, je ne parlais pas de ton antiquité... ) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Mer 29 Mai 2013 - 20:54 | |
| @Champollion, Je pense qu'il est temps de te laisser souffler un peu, et tu verras, à l'utilisation, que Panoramic est un bon langage de programmation pour des habitué du basic. Vu ce que tu as déjà fait le chemin ne devrait pas être trop long pour toi. Je te conseille fortement de lire les 4 sujets que Klaus avait fait et validés par Jack. Cà commence ici: https://panoramic.1fr1.net/t1498-structure-pour-un-programme-windows-1-4A+ | |
| | | champollion
Nombre de messages : 14 Date d'inscription : 25/05/2013
| Sujet: fonction inkey$ inactive Mer 29 Mai 2013 - 22:14 | |
| et ce zx fonctionne encore ! Mes premiers logiciels repris par les pros, je les ai faits avec le TO8 D et pc 386. J'ai beaucoup été influencé par l'esprit LOGO | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Mai 2013 - 23:31 | |
| Tu t' es fait piquer tes idées par des pros.... | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: re Jeu 30 Mai 2013 - 8:06 | |
| @ Champollion Bravo en tous cas pour le travail effectué, @ tous Je persiste et signe sur l'erreur "(24) more SUBs then allowed number" qui apparaît, chez moi, au lancement. Au fait j'aurais bien collé ici l'image mais entre les options HEBERGER et IMAGE je ne m'y retrouve pas... Bonne journée !!! PS : je n'ai pas trouvé d'icône avec un nuage | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Jeu 30 Mai 2013 - 11:41 | |
| Hello Froggy One.
Avec quel code tu as l’erreur (24) more SUBs then allowed number ? Peux-tu poster le code incriminé ? Je penche plutôt pour une erreur de logique dans le code et non que Panoramic ne digère pas des nombreuses SUBs !
| |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 30 Mai 2013 - 13:09 | |
| Voili voilà : - Code:
-
****************************************************************************** ' Code modifié par Papydall d'apès une idée de Champollion ' ******************************************************************************
Declaration() GUI() end : ' Ce end est essentiel pour que le programme aille pas exécuter la suite ' ****************************************************************************** ' Ici on déclare les labels,les variables, les constantes etc.. SUB Declaration() label clic dim a$(4),e$(9) a$(1)= "DECOUVERTE" a$(2)= "APPRENTISSAGE" a$(3)= "EVALUATION" a$(4)= "QUITTER" e$(1)= "Copie à vue" e$(2)= "Copie de mémoire" e$(3)= "Ecriture texte entendu" e$(4)= "Ecriture sous dessin" e$(5)= "Homophones lexicaux" e$(6)= "Homophones grammaticaux" e$(7)= "Accords genre et nombre" e$(8)= "Conjugaison" e$(9)= "Dictée"
END_SUB ' ****************************************************************************** ' Ici on définit tous les objets utilisés dans le programme : FORM, BUTTON,PICTURE, etc... SUB GUI() dim_local n,l,h : ' variables locales ' Définition de FORM 10 et des objets qu'il contient form 10 : width 10, 1280 : height 10, 800 : color 10,64,64,128 ' On défini un ALPHA pour éviter d'utilser PRINT alpha 11 : parent 11,10 : top 11,15 : left 11,430 font_color 11,255,0,0 : font_name 11,"comic sans MS": font_size 11,30 ' On donne un texte a l'ALPHA caption 11, "Ecriture Orthographe" ' On défini un PICTURE qui recevra l'image picture 12 : parent 12,10 : top 12, 300 : left 12, 470 : height 12, 300 : width 12, 800 ' file_load 12,"Papillion.bmp" l =140 ' Définition des boutons for n = 13 to 15 button n : parent n,10 : top n, 140 : left n, l: l=l+ 350 : width n, 240:height n, 50 caption n, a$(n-12) : font_size n, 22 :font_bold n : on_click n,clic next n button 16 : parent 16,10 : top 16, 640 : left 16, 510 : font_size 16, 22 : font_bold 16 width 16, 230:height 16, 50 : caption 16, a$(4) : on_click 16,clic
' ------------------------------------------------------------------------------ ' Définition du FORM 20 et de ses objets form 20 : width 20, 1280 : height 20, 800 : color 20,64,24,128 alpha 21 : parent 21,20 : top 21,15 : left 21,430 : font_color 21,255,0,0 font_size 21,30 : font_name 21,"comic sans MS" : caption 21,"Liste des ecercices"
l=450 :h=120 for n = 22 to 30 button n : parent n, 20 : top n, h : left n, l: h=h+ 60 : width n, 400 : height n, 50 caption n, e$(n-21) : font_color n, 0,255,255 : font_size n, 20 :font_bold n on_click n,clic next n
button 31 : parent 31,20 : top 31,700 : left 31,600 caption 31, "Retour" : on_click 31,clic hide 20 : ' on cache ce FORM ' ------------------------------------------------------------------------------ ' Définition du FORM 40 et des ses objets form 40 : width 40, 1280 : height 40, 800 : color 40,64,24,128 alpha 41 : parent 41,40 : top 41,15 : left 41,430 : font_color 41,255,0,0 font_size 41,40 : font_name 41,"comic sans MS" : caption 41,"COPIE SIMPLE" alpha 42 : parent 42,40 : top 42,160 : left 42,430 : color 42,0,255,0 font_color 42,128,0,0 : font_size 42,40 : font_name 42,"comic sans MS" caption 42," P A P I L L O N "
button 43 : parent 43,40 : top 43,700 : left 43,600 caption 43,"Retour" : on_click 43,clic hide 40 : ' on cache ce FORM
END_SUB ' ****************************************************************************** ' Ici on traite tous les clicks afin d'aiguiller le programme vers le sous-programme adéquat clic: if clicked(13) > 0 then Decouverte() : return if clicked(14) > 0 then Apprentissage() : return if clicked(15) > 0 then Evaluation() : return if clicked(16) > 0 then Quitter() if clicked(22) > 0 then Copie_A_Vue() : return if clicked(23) > 0 then Copie_De_Memoire() : return if clicked(24) > 0 then Ecriture_Texte_Entendu() : return if clicked(25) > 0 then Ecriture_Sous_Dessin() : return if clicked(26) > 0 then Homophones_Lexicaux() : return if clicked(27) > 0 then Homophones_Grammaticaux() : return if clicked(28) > 0 then Accords_Genre_Et_Nombre() : return if clicked(29) > 0 then Conjugaison() : return if clicked(30) > 0 then Dictee() : return if clicked(31) > 0 then show 10 : hide 20 if clicked(43) > 0 then show 20 : hide 40
' ici on traite les éventuels clicks supplémentaires
return ' ****************************************************************************** ' A compléter ... SUB Copie_A_Vue() show 40 message "Copie à vue en cours ..." END_SUB ' ****************************************************************************** ' A compléter ... SUB Copie_De_Memoire() message "Copie de mémoire en cours ..." END_SUB ' ****************************************************************************** ' A compléter .... SUB Ecriture_Texte_Entendu() message " Ecriture texte entendu en cours ..." END_SUB ' ****************************************************************************** ' A compléter ... SUB Ecriture_Sous_Dessin() message " Ecriture sous dessin en cours ..." END_SUB ' ****************************************************************************** ' A compléter .... SUB Homophones_Lexicaux() message "Homophones lexicaux en cours ..." END_SUB ' ****************************************************************************** ' A compléter ... SUB Homophones_Grammaticaux() message "Homophones grammaticaux en cours ..." END_SUB ' ****************************************************************************** ' A compléter ... SUB Accords_Genre_Et_Nombre() message " Accords genre et nombre en cours ..." END_SUB ' ****************************************************************************** ' A compléter .... SUB Conjugaison() message "Conjugaison en cours ..." END_SUB ' ****************************************************************************** ' A Compléter .... SUB Dictee() message "Dictée en cours ..." END_SUB ' ****************************************************************************** ' A compléter .... SUB Decouverte() show 20 END_SUB ' ****************************************************************************** ' A compléter .... SUB Apprentissage() message "Apprentissage en cours ..." END_SUB ' ****************************************************************************** ' A compléter .... SUB Evaluation() message "Evaluation en cours ..." END_SUB ' ****************************************************************************** SUB Quitter() if message_confirmation_yes_no("Vous Voulez vraiment quitter") = 1 then terminate END_SUB '
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Mai 2013 - 13:49 | |
| Ce code fonctionne très bien chez moi. ( à condition de rajouter l' apostrophe qui a du échapper au copier/coller ligne 1 ) | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 30 Mai 2013 - 13:57 | |
| OK, merci ! Apparemment j'ai un problème extérieur à ce qui se passe dans la fenêtre, j'ai aussi un GRID déclaré out of range sur un autre programme. J'attends de récupérer mon PC récent quelque part sous les plastiques entre les rouleaux de papier peint... je ressors mon guide du C et rapproche d'un bon lit douillet... | |
| | | champollion
Nombre de messages : 14 Date d'inscription : 25/05/2013
| Sujet: idées et édition Jeu 30 Mai 2013 - 20:04 | |
| Bonjour ! J'ai pas bien saisi le sens des derniers messages. Je précise: Je suis concepteur et auteur de logiciels sur lesquels je suis rétribué en droits d'auteur et dont je possède la propriété intellectuelle. L'éditeur ne fait que programmer ce que je demande, il ne "pique " pas d'idées, c'est moi qui les lui donne ! Et tout cela fonctionne parfaitement. Un "piqueur d'idées" en infraction serait celui qui reprendrait mes travaux pour les éditer ailleurs et toucher des droits comme s'il était l'auteur. Je programme quelques exemples pour montrer ce que je veux et je compose tous les écrans en PPT, en liaison avec le script de mon cahier des charges. Je suis en ce moment sur un prgramme qui mixte orthographe et ecriture, avec contrat déposé. Cordialement, Denis Champollion PS Ceci dit je continue à travailler sur une meilleure structuration de mes applications panoramic grâce aux précisions et tutoriels de certains d'entre vous, grand merci à eux | |
| | | Invité Invité
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 0:23 | |
| Je déterre ce sujet avec INKEY$ pour ne pas à avoir en ouvrir un autre. J'ai un vrai problème avec cette fonction. Je l'utilise depuis quelque temps et j'ai d'ailleurs posté déjà un problème, mais que finalement cela venait de mon ordi, qui une fois redémarré n'avait plus ce problème. Je fais une sub de teste et de mise au point. Elle marche très bien, et fait ce que je lui demande: - Code:
-
' clavier picture
width 0,700: height 0,500 dim pic_ , img_ pic_ = 2 : img_ = 4 picture pic_ : full_space pic_:font_size pic_,10 : print_target_is pic_ : 2d_target_is pic_ : font_name pic_,"Consolas" image img_ ' tracage de la zone clavier clavier_fonte(20,20,600,50)
end ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sub clavier_fonte(x,y,x1,y1) dim_local curseur,ga,larg , clavier$ , clav$, top_clavier ga = x+10 : top_clavier = y+2 2d_pen_color 0,0,255:2d_pen_width pic_ : 2d_fill_color 255,255,255 :2d_fill_on font_size pic_,10 : font_name pic_,"Consolas" : font_bold pic_ : ' 2d_rectangle x,y,x1,y1 2d_image_copy img_ ,x,y,x1,y1 font_color pic_,150,150,150
print_locate ga,top_clavier : print "Entrez le nom" repeat :pause 100: until scancode > 31 print_locate ga,top_clavier : print " " 2d_pen_color 255,0,0 : 2d_pen_width 1 ' 2d_fill_color 240,240,240 repeat 2d_pen_color 255,255,255 : ' efface le curseur trace_curseur(ga,top_clavier,curseur) if clavier$ = "" then curseur =0 clav$ = inkey$ if scancode = 8 :' retour arrière if curseur > 1 clavier$ = left$(clavier$,curseur-1) + right_pos$(clavier$,curseur+1) curseur = curseur-1 else clavier$ = right_pos$(clavier$,2): curseur = 0 end_if end_if
if clav$ = "" if scancode = 37 and clav$ = "":' and curseur>0 curseur = curseur - 1 else if scancode = 39 and curseur < len(clavier$) curseur = curseur + 1 else if scancode = 46 :' del clavier$ = left$(clavier$,curseur) + right_pos$(clavier$,curseur+2) else if scancode =38 or scancode = 36:' origine curseur = 0 else if scancode = 40 or scancode = 35: ' fin curseur = len(clavier$) end_if end_if end_if end_if end_if end_if
if clav$ <> "" if asc(clav$) > 31 if curseur = len(clavier$) clavier$ = clavier$ + clav$ : curseur = curseur + 1 else if curseur > 1 clavier$ = left$(clavier$,curseur) + clav$ + right_pos$(clavier$,curseur +1) curseur = curseur +1 else if curseur = 1 2d_pen_color 0,0,255 : trace_curseur(ga,top_clavier,0) ' @@@@@@ clavier$ = left$(clavier$,1) + clav$+right_pos$(clavier$,2) : curseur = 2 else clavier$ = clav$ + clavier$ : curseur = 1 end_if
end_if
end_if end_if end_if
print_locate ga,top_clavier : print clavier$+" " ' print curseur 2d_pen_color 255,0,0 : 2d_pen_width 1 : trace_curseur(ga,top_clavier,curseur) repeat: wait 1 :until scancode = 0 or scancode = 27 : wait 1:repeat:until scancode <> 0 :caption 0,scancode until scancode = 13 or scancode = 27 terminate end_sub ======================== sub trace_curseur(ga,top_clavier,curseur) 2d_line ga + curseur * 9 , top_clavier, ga + curseur * 9 , top_clavier+23 :' gauche 2d_line ga + curseur * 9 , top_clavier, ga + curseur * 9 +10 , top_clavier :' haut 2d_line ga + curseur * 9 , top_clavier+22, ga + curseur * 9 +10 , top_clavier+22 :' bas 2d_line ga + curseur * 9+9 , top_clavier, ga + curseur * 9+9 , top_clavier+22 :' droite end_sub J'y avais mis les N° que j'utilise dans le programme de destination. Je recopie cette sub, et la reporte dans mon programme. Là INKEY$ NE FONCTIONNE PLUSJ'ai découpé des morceaux de mon programme pour pouvoir posté le problème, et je ne comprend pas ce qu'il se passe. Je pense qu'il y a un bien un bug. C'est pas la première fois que je constate cela. Pour le fonctionnement du programme, il faut charger le contenu d'un list, et le mettre dans le même dossier que le programme. Je vais le mettre sur mon Webdav Pas réussi à mettre mes fichiers. TéléchargerImpossible de me servir du Webdaw, Harchive-host, maintenant il faut payer. J'ai trouvé: hébergeur ZIP gratuitPour celui qui essaye le 2ème programme, après l'avoir lancer, on clique sur le deuxième bouton, puis on descends sur le deuxième bouton: nommée, et on essaye d'y mettre un nom. Sortie par ESC et PAUSE Je précise que si je reprends le premier programme, cela refonctionne. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 0:56 | |
| Vers la fin de la sub clavier_fonte, je trouve la séquence suivante: - Citation :
- print_locate ga,top_clavier : print clavier$+" "
2d_pen_color 255,0,0 : 2d_pen_width 1 : trace_curseur(ga,top_clavier,curseur) clavier$="+clavier$ La troisième ligne de cet extrait ne peut pas marcher. Et dans la première, je ne comprends pas bien ce que devrait imprimer print clavier$+" "... | |
| | | Invité Invité
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 7:17 | |
| Est-ce ceci: - Code:
-
print_locate ga,top_clavier : print clavier$+" " 2d_pen_color 255,0,0 : 2d_pen_width 1 : trace_curseur(ga,top_clavier,curseur) item_add va_,"clavier$="+clavier$ va_ pour variable est un memo de contrôle. J'ai pas pensé à dire de le mettre en avant au départ. Il ne fait qu'afficher le contenu des variables qu'on lui demande. Il faut cliquer sur la droite pour le mettre en avant. Le problème se situe à la ligne 848: clav$ = inkey$ Tu peux taper sur le clavier, clav$ est toujours vide. A comparer avec le programme plus haut à la ligne 32 : Là inkey$ fonctionne. C'est la même sub, seul des contrôles sont ajoutés - avec l'affichage par le système du double buffer sur un picture. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 10:29 | |
| Effectivement, ce comportement en 848 me semble anormal. En 849, clav$ reste vide, alors que scancode a la bonne valeur. Et je ne comprends pas pourquoi. Ma solution (pas élégante maie opérationnelle): insérer une ligne devant la ligne 881: - Code:
-
end_if
clav$ = chr$(scancode) : ' inséré devant la ligne 881 "if clav$ <> .." if clav$ <> "" if asc(clav$) > 31 Brutal, mais opérationnel ! | |
| | | Invité Invité
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 13:38 | |
| Le problème avec scancode est que celui-ci à des code commun avec des lettres, comme les touches de direction. Normalement quand inkey$ est vide, je sais que ce sont des touches de manœuvre. Pour moi il y a un BUG. J'aurai pas voulu le mettre en avant, et c'est la raison pour laquelle j'ai choisi de déterrer un vieux topique. Mais si Jack ne se manifeste pas, je vais être obligé de le faire pour lui faire voir. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Dim 6 Déc 2015 - 13:50 | |
| C'est bien mon impression, Cosmos70. Il est incompréhensible que, dans la même ligne, SCAN_CODE donne la bonne valeur, mais INKEY$ retourne la chaîne vide, lorsqu'il s'agit de caractères visibles, comme des lettres. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Lun 7 Déc 2015 - 13:01 | |
| Bonjour à tous, si je comprend bien le pb, c'est que la fonction 'inkey$' ne retourne rien si on est dans un form autre que le 0. En fait j'ai remarqué pour que 'inkey$' soit pris en compte dans un autre form(ex.: le 1), il faut donner le focus au form 0(et le cacher si besoin)! l'autre form(le 1) devient inactif, mais 'inkey$' fonctionne. Tapez des caractères en continu pour cette demo: - Code:
-
' PANORAMIC 0.9.27i2
dim t,a$
caption 0,"form 0" form 1 : caption 1,"form 1" : top 1,600 : print_target_is 1
' top 0,1000 set_focus 0
t=NUMBER_TICKS repeat a$=inkey$ if a$<>"" then print a$; until NUMBER_TICKS-t>2000
print_target_is 0 : top 0,0
t=NUMBER_TICKS repeat a$=inkey$ if a$<>"" then print a$; until NUMBER_TICKS-t>2000
wait 1000 terminate
| |
| | | Invité Invité
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Lun 7 Déc 2015 - 14:53 | |
| <span class="sceditor-selection sceditor-ignore" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection sceditor-ignore" style="line-height: 0; display: none;" id="sceditor-start-marker"></span>Bonjour, Bien. Mais j'ai essayé de le rajouter dans le programme: set_focus ps_ (ps_ pour pseudo ... objet), le résultat est le même. inkey$ reste vide.
J'attends encore un jour pour laisser le temps à Jack de se manifester, si il voir ce poste (histoire de ne pas faire de vague inutile). Après je posterai le bug, si il ne le voit pas (à moins que la solution soit trouvée).
Edit: j'utilise la version précédente. La dernière version a un bug qui ne me convient pas. |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 Lun 7 Déc 2015 - 17:05 | |
| Si si, ça marche. Essaye ça: - Code:
-
dim windowfocus%,null% dll_on "user32" ' ligne ajoutée : 1,2,3,841,849,915
' problème avec INKEY$, voir à partir de la ligne 823 dim dos$ , projet$
dos$ = "C:\Documents and Settings\Utilisateur\Bureau\inkey\" :' dossier du programme projet$ = dos$ + "TESTE\" if dir_exists(projet$) = 0 then dir_make projet$
' ----------------------------------------------------------------------------- editeur() :' initialisation des forms et objets de travail, ainsi que le picture de pseudo-objets
' déclaration des pseudo-objets parent% = 9000 :' n° du form de ce programme qui reçoit les objets dim L_%,T_% , W_% , H_% , capt_$
' on place un bouton PAGE = 1 L_% = 50 : T_% = 20 : W_% = 90 : H_% = 30 : capt_$ = "stop" bouton("clic=1|parent=9011|left=50|top=20|width=90|height=30|caption$={stop}|font_name=menu|") liste_$(obj%,1) = "Sortie du programme|" :' <-- "|" obligatoire, si plusieurs, saut de ligne
bouton("clic=1|parent=9011|left=160|top=20|width=220|height=40|caption$={Créer attribut fonte}|font_name=menu|") liste_$(obj%,1) = "enrichir le choix|d'une fonte|" ' parent est: pic_ soit 9011
rem "*************************************************************************** rem " Départ du programme en boucle comme si événementielle 2d_image_copy img_ , left(pic_) , top(pic_) , width(pic_),height(pic_) file_save img_ , dos$+"image.bmp" ' sprite_image_load 1,img_ image_copy(ps_) boucle_msg() END : ' END : ' END : ' END : ' END : ' END : ' END : ' END : ' END : ' END ' =================================================================================
' début sub editeur() form 9000 : left 9000,900 : width 9000,screen_x - left(9000) : height 9000,screen_y memo 9001 : parent 9001,9000: hint 9001,"trace des procédures" : width 9001,width(9000)-50 : height 9001,300 color 9001,231,247,154:font_bold 9001 : font_name 9001,"Consolas":item_add 9001,"lig:12 sub editeur()" memo 9002 : parent 9002,9000: hint 9002,"variables":width 9002,width(9001):top 9002,height(9001)+10:height 9002,300 color 9002,255,247,154:font_bold 9002 : font_name 9002,"Consolas":font_size 9002,10 ' picture de controle
' --------------------------------------------------------------------------- ' form de travail qui est 0 width 0,left(9000):top 0,20:height 0,screen_y - top(0)-25 ' la form de départ 0 ne sera pas la forme des pseudo-objets, qui permettra d'avoir un travail normal, et la forme secondaire ' pour les pseudo-objets. dim ps_ , pic_ : ps_ = 9010 : pic_ = 9011 :' pic pour picture dim pr_ , va_ : pr_ = 9001 : va_ = 9002 dim copi_ , img_ , img1_ : copi_ = pic_ +1 : img_ = copi_ + 1 : img1_ = img_ +1 dim list_ : list_ = 9020 dim pol_ , pol1_ :' police dim font% : ' n°de police choisit de chaque caractère dim fonte%(200,255) :' caractéristique de chaque caractère de chaque police dim police$(200) :' définition de chaque police: nom, attibut couleur dim retour$(5) , retour%(10,10) , rt$ , retour_$ dim couleur%(20) , rgb(10,1) , msg% , temp , tempo , maxi% , pause% , parent% , ft% , flag_clic dim LISTE_$(200,2) , pos(10) dim temp_decompte% , timer_sortie% , t , return% pause% = 200 dim PAGE , PAGE_mem , OBJ% , objet% , vignet vignet = 9003 picture vignet:parent vignet,9000:width vignet,width(9001):top vignet,top(va_)+height(va_):height vignet,300 ' provisoir: police$(1)="Arial|9|g|i|s|b}[menu]" item_add va_,police$(1) ' --------------------------------------------
FORM ps_ : width ps_,width(9000) : top ps_,50:height ps_,height(0) :' hint ps_,"form ps_ pour PS_eudo" image img_ : image img1_ PICTURE pic_ : parent pic_,ps_ :full_space pic_: 2d_target_is pic_ : print_target_is pic_ :hide pic_:' hint pic_,"picture pic_" PICTURE copi_: parent copi_,ps_:width copi_,width(pic_) : height copi_,height(pic_) :' pour sauvegarde d'un écran
' on va faire une form suplémentaire pour y mettre des dlist qui seront avant des list pour controle.
FORM list_ : left list_,left(9000)-300:width list_,600:height list_,screen_y:font_size list_,10:font_bold list_:font_name list_,"Consolas":hint list_,"form list_"
pol_ = list_+1 : pol1_ = pol_+1 : objet% = pol1_ + 1 list pol_: parent pol_,list_: width pol_,width(list_)-40: height pol_,150:hint pol_,"pol_ :polices choisies" list pol1_: font_names_load pol1_: hint pol1_,"pol1_" parent pol1_,list_ : top pol1_,height(pol_)+5:width pol1_ , width(pol_) : height pol_,150
memo objet% :parent objet%,list_ : top objet%,top(pol1_) + height(pol1_)+10:width objet%,width(pol1_):height objet%,200 font_name objet%,"Consolas":font_size objet%,10:font_bold objet%:color objet%,250,183,4
form 5:left 5,800:top 5,200:width 5,screen_x-450:height 5,screen_x-210 : hide 5 picture 10 parent 10,5:full_space 10 ' sprite 1 maxi% = 1 init()
end_sub
' ========================================================================== sub init() s(number_current_line," sub init()") ' pour garder que les polices importantes dim_local a$,b%,i%
if count(pol1_) > 0 repeat a$ = item_read$(pol1_,1) if left$(a$,1) = "@" then item_delete pol1_,1 until left$(a$,1) <> "@" or scancode = 27 item_delete pol1_,1 :' 8514eom for b% = 1 to count(pol1_) : police$(b%) = item_read$(pol1_,b%) : next b%
b%=1 if file_exists(dos$+"police_"+str$(b%)+".ini") = 1 ' message dos$+"ADD\police_"+str$(b%)+".ini" repeat file_open_read 1,dos$+"police_"+str$(b%)+".ini" while file_eof(1) <> 1 file_readln 1,police$(b%) for i% = 0 to 255 ' caption 0,"b%="+str$(b%)+" i%="+str$(i%) file_readln 1,fonte%(b%,i%) next i% end_while file_close 1 b%=b%+1 until file_exists("police_"+str$(b%)+".ini") = 0 end_if end_if end_sub ' ========================================================================== sub s(n%,a$) item_add pr_ , "lig:" + str$(n%) + " " + a$ end_sub ' ==========================================================================
sub number() dim_local a for a = 1 to maxi% if liste_$(a,0) = "" then obj%= a : exit_for next a if a > maxi% then obj%=obj%+1 : maxi%=obj% caption 0,"numéro number= " + str$(obj%) end_sub
' ==========================================================================
SUB boucle_msg() s(number_current_line," boucle_msg()") IF maxi% > 0 REPEAT FOR msg% = 1 to maxi% position_souris(msg%) cherche_objet() NEXT msg% pause pause% UNTIL SCANCODE = 19 END_IF execute "C:\PANO\Pano_sans_événement\kill_pano.exe" end_sub
' ==========================================================================
SUB position_souris(n) s(number_current_line," position_souris(n)") caption 0,"page="+str$(page) dim_local type,p,l,t,w,h,nom$,ecart,a$,b$ ,c , v ,clic , page% , x , y rem " on regarde en premier si on est sur le menu" ' pour l'instant pic_ et ensuite copi_ x = mouse_x_position(copi_) : y = mouse_y_position(copi_) :' caption 0,"x="+str$(x)+" choix_menu%="+str$(choix_menu%)
if y < 18 : ' menu if 1=2 rem "ici regarder si x < 11 si oui, on affiche soit le menu, soit le menucouleur" rem "et il faut faire le choix de l'un deux pour cette partie if x < 21 and scancode = 0 repeat : until scancode = 1 or mouse_x_position(3) > 20 end_if if x < 21 and scancode = 1 choix_menu% = 1-choix_menu% if choix_menu% = 0 then menu() : else : MENUcouleur() repeat:until scancode = 0 and mouse_y_position(copi_) > 24 else if choix_menu% = 0 :' menu classique for L = 1 to 19 :' 19 provisoir ' item_add 11,"L="+str$(l)+" mnu%(L)="+str$(mnu%(L)) if menu$(L)="" then exit_for
if x > mnu%(L-1) and x < mnu%(L) commander_un_menu(L) repeat : wait 50 if Mnu%(L)=0 then exit_repeat ' caption 0,str$(mouse_x_position(3)) + " mnu%(L-1)="+str$(mnu%(L-1)) + "mnu%(L)="+str$(mnu%(L)) until mouse_x_position(3) < mnu%(L-1) or mouse_x_position(3) > mnu%(L) or scancode = 1 if retour$ <> "" then evenements_menu(retour$) end_if next L else traitement_couleur()
end_if end_if 2d_image_paste 4,8,22 image_copy(ps_) end_if ELSE rem "======================================================================== rem " LES OBJETS " rem "======================================================================="
' ** OBJETS *** to_foreground ps_ ' item_add 11,"msg%="+str$(msg%) + " n="+str$(n) IF PAGE > 0
if liste_$(n,0) <> "" ' if n=6 then message liste$(6,0) +chr$(13) + "181 <-- MEMO_(1,0,610,50,250,400," a$ = liste_$(n,0) : if right$(a$,1) <> "/" then a$ = a$ + "/" ' item_add 11,"les objets n="+str$(n)+chr$(13)+chr$(10)+liste$(n,0) c=0 repeat v= instr(a$,"/") if v > 0 b$ = left$(a$,v-1) : a$ = right_pos$(a$,v+1) ' item_add 11,"186: b$="+b$:item_add 11,"a$="+a$ select c case 0:clic=val(b$) : pos(0)=clic :' o= off 1=on_click case 1:p=val(b$) :' item_add 11," parent p="+b$ case 2:l=val(b$) : pos(1)=L :' item_add 11," pos1="+str$(pos(1)) case 3:t=val(b$) : pos(2)=T :' item_add 11," pos2="+str$(pos(2)) case 4:w=val(b$) : pos(3)=L+W :' item_add 11," pos3="+str$(pos(3)) case 5:h=val(b$) : pos(4)=T+H :' item_add 11," pos4="+str$(pos(4)) case 6:type=val(b$) : pos(5)=type case 7:page%=val(b$): pos(6)=page% case 8:if numeric(b$)=1 then ecart=val(b$): pos(7)=ecart end_select end_if c=c+1 until a$="" or c>8 :' le reste des paramètres n'interviennent pas pour le positionnement ' item_add 11,"sortie UNTIL les objets ligne=217"+chr$(13)+chr$(10)+ liste$(6,0) +chr$(13) + "MEMO_(1,0,610,50,250,400,"+chr$(13)+"L="+str$(l)+" T="+str$(t)+" W="+str$(w)+ " H="+str$(h) item_add va_,"clic="+str$(pos(0))+ " L="+str$(pos(1))+ " T="+str$(pos(2))+ " W="+str$(pos(3))+ " H="+str$(pos(4))+ " type="+str$(pos(5))+" page="+str$(pos(6))
end_if ELSE if page = 0 : ' enrichir_fonte() ' x et y selon les boutons position_ajoute_fonte(x,y) else ' pour d'autres fenêtres (en négatif) end_if
END_IF ' end_if :' 1=2 end_if
END_SUB
' ===========================================================================
sub cherche_objet() if liste_$(msg%,0) <> "" if pos(0) = 1 and flag_clic = 0 :' on_click dim_local x,y,x1,y1 , px,py
' position de la sourie par rapport au picture 2 px=mouse_x_position(copi_)+5 : py=mouse_y_position(copi_)
if pos(1)<px and pos(3)>px and pos(2)<py and pos(4)>py and pos(6) = page item_add va_,"cherche_obje() ok msg%:"+str$(msg%) on_signale() repeat if flag_clic = 0 px=mouse_x_position(copi_) +5 py=mouse_y_position(copi_) end_if wait 100 : if scancode = 27 then message "sortie exit" :exit_repeat ' control CLIC clic sur [bouton souris gauche] ou [return] if scancode = 1 or scancode = 13 if pos(0) = 1 :' si 1, alors ON_click (fictif) sinon off_click flag_clic = 1 end_if end_if ' .............. until pos(1)>px or pos(3)<px or pos(2)>py or pos(4)<py or flag_clic=1
on_retour() :' efface la figure de l'objet survolé ' La feuille est remis dans son état initial, et on peut se branché si il y a un clic valide sur l'événement if flag_clic = 1 px=screen_x rem ----- rem " ÉVÉNEMENT --------------------------------------------" ---------- rem ' On se branche à l'événement par rapport à l'objet reconnu avec msg% item_add va_, "go go evenements()" evenements() rem ----- rem " ------------------------------------------------------" ---------- rem flag_clic = 0 end_if end_if end_if end_if end_sub
' ============================================================================
sub on_signale() s(number_current_line , " on_signale()") if flag_clic=0 dim_local v,a$,y 2d_target_is pic_ ' 2d_image_copy img_,left(pic_),top(pic_),width(pic_)+left(pic_),height(pic_)+top(pic_) mettre_attribut(police$(1)) : mettre_font_couleur(police$(1)) select pos(5) :' On réagit selon le type de l'objet. 1=bouton case 1 :' BOUTON 2d_pen_width 1 : 2d_pen_color 255,0,0 : 2d_fill_off ' 2d_rectangle pos(1),pos(2),pos(3)-5,pos(4)-5 flash(pos(1)-2,pos(2),pos(3)-pos(1),pos(4)-pos(2)-2) end_select image_copy(ps_) end_if end_sub
' ============================================================================ sub flash(l,t,w,h) dim_local a$,v,y , x ,y0 , b 2d_target_is pic_ 2d_fill_color 230,230,230 : font_color pic_,0,0,255 x = pos(1)+10 : y0 = pos(2) y=(pos(4)) : if pos(5) = 3 then y = mouse_y_position(copi_) : y0 = y-35 ' 2d_fill_color 255,255,200 2d_pen_color 0,0,255 2d_pen_width 3 2d_fill_color 239,240,154 : b=1
2d_image_copy img1_,l,t,w+l,h +t 2d_target_is vignet 2d_clear 2d_image_paste img1_,0,0
gamma vignet ,-10 2d_image_copy img1_,0,0,w,h 2d_target_is pic_ 2d_image_paste img1_,l,t
print_locate x,y :font_bold_off pic_ : font_italic pic_ a$ = liste_$(msg%,1) : font_color pic_,0,0,50:font_size pic_,10: font_name pic_,"Consolas" a$ = a$+"|"
repeat v=instr(a$,"|") if v > 0 print left$(a$,v-1) : a$ = right_pos$(a$,v+1) y = y+20 : print_locate x,y end_if until v=0 print a$ image_copy(ps_) end_sub
' ===========================================================================
sub on_retour() s(number_current_line," on_retour()") select pos(5) case 1 :' BOUTON 2d_pen_width 1 2d_pen_color 0,0,0 2d_fill_off 2d_rectangle pos(1),pos(2),pos(3),pos(4) end_select 2d_target_is pic_ :' voir ici pour récupérer l'image du sprite file_load img_ ,dos$+"image.bmp" 2d_image_paste img_,left(pic_),top(pic_) image_copy(ps_) end_sub
' ============================================================================
sub evenements() s(number_current_line," evenements()") select page case 1 : page1() case 2 : page2() end_select end_sub ' ============================================================================ ' @@@@@@@@@@@@ PARTIE A CODER POUR LES EVENEMENTS @@@@@@@@@@@@@ ' selon la page où l'objet est déclaré
sub page1() s(number_current_line," page1()") select msg% case 1 :' bouton "quitter" fin() case 2 :' bouton contrôle ajouter_font() end_select end_sub
' -------------------------------------------------------------------
sub page2() s(number_current_line," page2()") select msg% end_select end_sub
' ============================================================================= ' clic sur bouton 1 "Stop" sub fin() execute "c:\PANO\Pano_sans_événement\kill_pano.exe" terminate :' pour le cas où kill_pano pas trouvé end_sub ' ============================================================================ ' Click sur bouton 2 "contrôle" sub ajouter_font() s(number_current_line," clic_sur_control()") enrichir_fonte() end_sub
' ============================================================================ sub image_copy(p) s(number_current_line," image_copy()") 2d_target_is pic_ 2d_image_copy img_,left(pic_),top(pic_) , width(pic_) , height(pic_) 2d_target_is ps_ :' la form du picture 2d_image_paste img_,left(pic_),top(pic_) 2d_target_is pic_ end_sub
' ============================================================================ sub file_lecture(fichier$) if file_exists(fichier$) = 1 file_open_read 1,fichier$ file_readln 1,retour_$ ' item_add 11,retour$ file_close 1 end_if end_sub
rem "calcul les paramètres d'une fonte rem " ON A D2FINI AVANT LE NOM DE LA POLICE, SIZE, ITALIQUE, GRAS ... puis on calcul les paramètres. ' on va se servir du picture 9003, picture de controle, qu'il faudra récuper, si la form 9000 est retirée
sub format_fonte(fonte%) s(number_current_line,"format_fonte()") dim_local a%,y,d%,c%,larg%,b% end_sub
' ============================================================================ ' il faut faire le programme de choix d'une police, avec ses attributs
sub mettre_attribut(a$) s(number_current_line," mettre_attribut()") dim_local v,b$,c% c%=1 repeat v = instr(a$,"|") if v > 0 select c% case 1 : font_name pic_,left$(a$,v-1) case 2 : font_size pic_,val(left$(a$,v-1)) case 3 : b$=left$(a$,v-1):if b$="G" then font_bold pic_ : else : font_bold_off pic_ case 4 : b$=left$(a$,v-1):if b$="I" then font_italic pic_ : else : font_italic_off pic_ case 5 : b$=left$(a$,v-1):if b$="S" then font_underline pic_ : else : font_underline_off pic_ case 6 : b$=left$(a$,v-1):if b$="B" then font_strike pic_ : else : font_strike_off pic_ end_select a$ = right_pos$(a$,v+1) end_if c%=c%+1 until c% = 7 end_sub
------------------------------------------------------------------- sub mettre_font_couleur(a$) s(number_current_line, " mettre_font_couleur()") dim_local b$,r,g,b ,r1,g1,b1 dim_local key$ , t$ : t$=" | " item_add va_,"42:a$=->"+a$+"<-=" if instr(a$,"}")> 0 then a$ = right_pos$(a$,instr(a$,"}")+1) item_add va_,"44: a$=->"+a$+"<-=" if a$ = "" then exit_sub b$=left$(a$,instr(a$,"|")-1) a$ = right_pos$(a$,instr(a$,"|")+1)
r = val(left$(b$,instr(b$,",")-1)) : b$ = right_pos$(b$,instr(b$,",")+1) g = val(left$(b$,instr(b$,",")-1)) : b$ = right_pos$(b$,instr(b$,",")+1) b = val(b$) : font_color pic_,r,g,b ' ................. r1= val(left$(a$,instr(a$,",")-1)) : a$ = right_pos$(a$,instr(a$,",")+1) g1= val(left$(a$,instr(a$,",")-1)) : a$ = right_pos$(a$,instr(a$,",")+1) b1= val(a$) : 2d_fill_color r1,g1,b1 item_add va_,"59:->"+str$(r)+t$+str$(g)+t$+str$(b)+t$+t$+str$(r1)+t$+str$(g1)+t$+str$(b1) end_sub ====================================================================
sub enrichir_fonte() s(number_current_line, " enrichir_fonte()") 2d_fill_on : 2d_fill_color 179,179,0 2d_rectangle 5,5,650,500 2d_fill_color 255,255,255 2d_rectangle 15,35,630,480 ' représenter un list avec les fontes ' ////////////////////////////////////////////// 2d_fill_color 253,255,255 : 2d_pen_color 253,255,255 : font_color pic_,0,0,0
' ici mettre les boutons de commandes PAGE_mem = PAGE : ' mémoire de la page en cours PAGE = 0 :' pour qu'il n'y ait que les éléments correspondant à cette procédure ' ------------------------ dim_local a$,b$,c$ , h , x , y ,r , i , j , le , lig mettre_attribut(police$(1)) :' arial size du 4 h=0 2d_pen_width 2 : 2d_pen_color 200,200,252 : 2d_fill_on : 2d_fill_color 180,180,0 : font_color pic_ , 255,255,255 font_size pic_,10 : font_bold pic_ 2d_rectangle 18,35,218,480
2d_fill_color 120,0,0 2d_rectangle 25,62,160,87 : print_locate 70,65 : print "Fonte" 2d_rectangle 25,127,160,152 : print_locate 60,130: print "Nommée" 2d_rectangle 25,182,160,207 : print_locate 60,185: print "font_size" 2d_rectangle 25,217,160,242 : print_locate 75,220: print "Gras" 2d_rectangle 25,252,160,277 : print_locate 75,255: print "Italic" 2d_rectangle 25,287,160,312 : print_locate 58,290: print "Souligné" 2d_rectangle 25,322,160,347 : print_locate 70,325: print "Barré" 2d_rectangle 25,357,160,382 : print_locate 35,360: print "Couleur encre" 2d_rectangle 25,392,160,417 : print_locate 37,395: print "Couleur Fond"
2d_fill_color 255,0,0 2d_rectangle 20 ,430,90 ,455 : print_locate 32,433 : print "Valide" 2d_rectangle 100,430,170,455 : print_locate 107,433: print "Annule" image_copy(ps_)
initialise_timer(number_current_line) repeat decompte(3,number_current_line) : if timer_sortie% = 1 then exit_repeat until scancode = 0 and mouse_y_position(copi_) >24 2d_image_copy img_, 5,5 , 650 , height(pic_)+top(pic_) file_save img_,dos$+"coin_fonte.bmp" end_sub
' =========================================================================== sub position_ajoute_fonte(x,y) caption ps_,"x="+str$(x)+" y="+str$(y) s(number_current_line," position_ajoute_fonte()") dim_local tx$ if scancode = 1 if y > 430 and y < 455 :' valide et annule if x > 20 and x < 90 :' valide rem " VÉRIFIER QUE TOUT EST OK AVANT DE QUITTER"
rem "..........................................." page = page_mem ' stocke ' puis file_load img_,dos$+"image.bmp" 2d_image_paste img_,0,0 image_copy(ps_) end_if ' ... if x > 100 and x < 170 :' annule page = page_mem file_load img_,dos$+"image.bmp" 2d_image_paste img_,0,0 image_copy(ps_) end_if else if x > 25 and x < 160 ' ................................. if y > 62 and y < 87 :' fonte_name fontes_et_attributs_installes() file_load img_,dos$+"coin_fonte.bmp" font_size pic_,9:font_bold pic_:font_color pic_,0,0,0 : 2d_fill_color 180,180,0 : font_name pic_,"Consolas" 2d_pen_color 180,180,0 : 2d_image_paste img_,5,5 : 2d_rectangle 25,90,215,110 if val(retour$(0)) > 0 then print_locate 25,90 : print police$(val(retour$(0))) 2d_image_copy img_,5,5,650 , height(pic_)+top(pic_) file_save img_,dos$+"coin_fonte.bmp" : 2d_image_paste img_ , 5,5 : 2d_pen_color 91,179,225 image_copy(ps_) end_if ' if y >127 and y < 152 :' nom ' tx$ = message_input$("Donnez un nom de repère pour l'ensemble des attributs","Entrez le nom:","") ' il faut vérifier que tx$ n'est pas déjà utilisé clavier_fonte(27,155,160,175) tx$ = retour$(1) ' ensuite on le reporte file_load img_,dos$+"coin_fonte.bmp" font_size pic_,9:font_bold pic_:font_color pic_,0,0,0 : 2d_fill_color 180,180,0 : font_name pic_,"Consolas" 2d_pen_color 180,180,0 : 2d_image_paste img_,5,5 : 2d_rectangle 25,90,215,110 print_locate 25,155 : print tx$ :' à récupérer ensuite 2d_image_copy img_,5,5,650 , height(pic_)+top(pic_) file_save img_,dos$+"coin_fonte.bmp" : 2d_image_paste img_ , 5,5 : 2d_pen_color 91,179,225 image_copy(ps_) end_if ' if y > 182 and y < 207 :' font_size end_if ' if y > 217 and y < 242 :' Gras end_if ' if y > 252 and y < 277 :' italic end_if ' if y > 287 and y < 312 :' souligné end_if ' if y > 322 and y < 347 :' barré end_if ' if y > 357 and y < 382 :' couleur encre end_if ' if y > 392 and y < 417 :' couleur papier end_if end_if end_if end_if end_sub
' ===========================================================================
sub fontes_et_attributs_installes() s(number_current_line," fontes_et_attributs_installes()") repeat : pause 100 : until scancode = 0 dim_local long,a%,nb_line%,nb_print%,le,i,decalage_lig% , mousex, mousey, lig_clic% , copie_lig% , choix long = 0 :' len maxi caractères for a% = 1 to 200 : if police$(a%) = "" then exit_for next a% : nb_line%= a%
nb_print% = nb_line% -1 if nb_print% * fonte%(1,3) > height(pic_)-60 then nb_print% = (height(pic_)-60)/ fonte%(1,3) -1
for a% = 1 to 200 if police$(a%) = "" exit_for else le = 0 for i = 1 to len(police$(a%)) le =le + fonte%(1,asc(mid$(police$(a%),i,1))) next i if long < le then long = le end_if next a% long = long + 30 ' METTRE EN MEMOIRE rem "===============================================================" decalage_lig% = 0 :' zone liste des fontes 2d_image_copy img_, 5,5 , 650 , height(pic_)+top(pic_) file_save img_,dos$+"coin_fonte.bmp"
2d_fill_color 255,255,255 : 2d_pen_color 0,255,0 : 2d_pen_width 2 2d_rectangle 14,43,long + 14, nb_print% *fonte%(1,3) + 48 retour%(0,0) = long+14 :retour%(1,0)=nb_print% * fonte%(1,3) +48: retour%(2,0)=nb_print% :retour%(3,0)=long retour%(4,0) = decalage_lig% rem "===============================================================" ' ******************** rem "===============================================================" ' bouton pour décalage 2d_fill_color 246,221,150 : 2d_pen_color 0,0,0 :2d_pen_width 1: font_color pic_,0,0,0 ' décalage - 2d_rectangle long-8, 47 ,long+11, 67 : font_name pic_,"Wingdings":font_size pic_,9 print_locate long-5,49 : print chr$(217) ' décalage + 2d_rectangle long-8, 70 ,long+11, 90 print_locate long-5,72 : print chr$(218) :image_copy(ps_) font_bold pic_ : font_color pic_,255,0,0 2d_rectangle long-8,120 , long+11,140 print_locate long-6,122: print chr$(76) :' pleure sortie font_bold_off pic_ : font_color pic_,0,0,0
list_menu(nb_print%,decalage_lig%) image_copy(ps_) mettre_attribut(police$(1)) rem "===============================================================" initialise_timer(number_current_line)
repeat mouseX = mouse_x_position(copi_) : mouseY = mouse_Y_position(copi_) ' ................ ' if mouseY < 24 and mouseX >206 and mouseX <260 then ACTION_MenuCouleur(lig_clic%,decalage_lig%)
if mousey < 64 and mousex > 20 and mousex < 218 and scancode = 1 then choix = 1 :' CHOIX voir autre chose car inutile if mouseX >10 and mouseX < long-10 if mouseY > 44 lig_clic% = (mouseY - 44 - 5) / 17 + 1: ' si la liste dépasse la hauteur du liste if lig_clic% > nb_print% then lig_clic% = nb_print% if copie_lig% > 0 if copie_lig% <> lig_clic% font_color pic_,0,0,0 : 2d_fill_color 255,255,255 print_locate 17, (copie_lig% )* fonte%(1,3) +24: print string$(47," ") print_locate 17, (copie_lig% )* fonte%(1,3) +24 print police$(copie_lig%+decalage_lig%) image_copy(ps_) initialise_timer(number_current_line) end_if end_if
if lig_clic% <> copie_lig% : ' on est sur la ligne font_color pic_,255,255,255 : 2d_fill_color 0,0,255 print_locate 17, (lig_clic% )* fonte%(1,3) +24: print string$(47," ") print_locate 17, (lig_clic% )* fonte%(1,3) +24 print police$(lig_clic% + decalage_lig%) : copie_lig% = lig_clic%
font_name pic_,police$(lig_clic% + decalage_lig%) font_size pic_,12 : font_bold pic_ : font_color pic_,0,0,0 : 2d_fill_color 255,255,255 2d_rectangle long +10, 35 , 630,480 print_locate long+20 , 50 : print police$(lig_clic% + decalage_lig%) print_locate long+20 , 90 : print "0123456789" print_locate long+20, 130 : print "Teste d'Écriture" print_locate long+20, 170 : print "àéèêîïöôùûç" print_locate long+20, 210 : print "AaeGgJj" print_locate long+20, 250 : print "ÂÉÈÏÔÙ"
' remettre l'affichage menu mettre_attribut(police$(1))
image_copy(ps_) initialise_timer(number_current_line) end_if end_if
else :' long-8,100 , long+11,120 if scancode = 1 and mouseX > long-10 repeat : until scancode = 0 if mouseY > 70 and mousey < 120 decalage_lig% = decalage_lig% +nb_print% if decalage_lig% > nb_line% - nb_print% then decalage_lig% = nb_line% - nb_print% - 1
list_menu(nb_print%,decalage_lig%) initialise_timer(number_current_line) end_if ' ------------- if mouseY < 68 decalage_lig% = decalage_lig% - nb_print% if decalage_lig% < 0 then decalage_lig% = 0 list_menu(nb_print%,decalage_lig%) initialise_timer(number_current_line) end_if ' ------------- if mousey > 120 and mousey < 140 :' pleure file_load img_ ,dos$+"image.bmp" 2d_image_paste img_,0,0 : image_copy(ps_) :' il faut amplifier la fermeture du liste fonte exit_repeat end_if image_copy(ps_) end_if wait 10: repeat:until scancode = 0 end_if wait 100 : if scancode = 19 then exit_sub
if (scancode = 1 and mouseX < (long-10)) then exit_repeat ' if mousey > (nb_print% +1)* 20 + 10 then exit_repeat :' pour éviter qu'une sélection soit prise lors d'un clic, mais si on a pas cliqué sur un item if mouseX > 480 then exit_repeat
decompte(10,number_current_line) : if timer_sortie% = 1 then exit_repeat until scancode = 27 if (mousey > 120 and mousey < 140) or timer_sortie% = 1 file_load img_ ,dos$+"image.bmp" 2d_image_paste img_,0,0 : image_copy(ps_) end_if if scancode <> 1 then lig_clic% = 0 : retour$(0) = "" if lig_clic% > 0 retour$(0) = str$(lig_clic%+decalage_lig%) : retour%(6,1) = lig_clic% + decalage_lig% message "cliqué: "+ police$(val(retour$(0))) + chr$(13)+"long="+str$(long)+" mouseX="+str$(mousex) end_if repeat : until scancode = 0 rem " " rem "______________________________________________________________________" rem "======================================================================"
' list_menu(nb_print%,decalage_lig%) ' image_copy(ps_) end_sub
' ===========================================================================
sub initialise_timer(ligne) dim_local a$ , b$ ' temp_decompte% a$ =time$ : timer_sortie% = 0 b$ = left$(a$,2) : temp_decompte% = val(b$) * 3600 b$ = mid$(a$,4,2): temp_decompte% = temp_decompte% + val(b$) * 60 b$ = right$(a$,2): temp_decompte% = temp_decompte% + val(b$)
end_sub ' ===========================================================================
sub decompte(t,ligne) dim_local a$ , a% , b$ a$ =time$ b$ = left$(a$,2) : a% = val(b$) * 3600 b$ = mid$(a$,4,2): a% = a% + val(b$) * 60 b$ = right$(a$,2): a% = a% + val(b$) : if a% < temp_decompte% then a% = a% + 86400 :' 24h en secondes if (a% - temp_decompte%) >= t then timer_sortie% = 1 ' caption 10,"decompte: " + str$(t+(temp_decompte%-a%)) + " ligne:"+str$(ligne) :' décompte restant de t à 0
' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ return% = a%-temp_decompte% ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ pause 50 end_sub ' ===========================================================================
sub list_menu(a%,decalage_lig%) dim_local i , long long = retour%(3,0) 2d_fill_color 255,255,255 : font_color pic_,0,0,0 : mettre_attribut(police$(1)) for i=1 to a% print_locate 17 , fonte%(1,3) * i +24: print string$(47," ") print_locate 17 , fonte%(1,3) * i +24 print police$(i+decalage_lig%) next i
' bouton pour décalage 2d_fill_color 246,221,150 : 2d_pen_color 0,0,0 :2d_pen_width 1: font_color pic_,0,0,0 ' décalage - 2d_rectangle long-8, 47 ,long+11, 67 : font_name pic_,"Wingdings":font_size pic_,9 print_locate long-5,49 : print chr$(217) ' décalage + 2d_rectangle long-8, 70 ,long+11, 90 print_locate long-5,72 : print chr$(218) image_copy(ps_) mettre_attribut(police$(1)) end_sub ' =========================================================================== ' @@@@@@@@@@@@@@@@@@@@@@@@ C'EST ICI QU'IL Y A PROBLÈME @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' @@@@@@@@@@@@@@@@@@@@@@@@ CONCERNE INKE$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub clavier_fonte(x,y,x1,y1) s(number_current_line," clavier_fonte()") message "C'est ici qu'il y a un problème"+chr$(13)+"cliquez sur nommée fonte, puis essayez de taper un nom"+chr$(13)+"Normalement il devrait s'écrire dans 'Entrez le nom'"+chr$(13)+"pour arréter, ESC et PAUSE" dim_local curseur,ga,larg , clavier$ , clav$, top_clavier , ad,a$ ga = x+10 : top_clavier = y+2
2d_pen_color 0,0,255:2d_pen_width 2 : 2d_fill_color 255,255,255 :2d_fill_on font_size pic_,10 : font_name pic_,"Consolas" : font_bold pic_ : ' 2d_rectangle x,y,x1,y1 2d_image_copy img_ ,x,y,x1,y1 font_color pic_,150,150,150 windowfocus%=dll_call0("GetFocus") : top 0,1000 : set_focus 0 : ' memorise le focus du form courant, cache le form 0 et on lui donne le focus print_locate ga,top_clavier : print "Entrez le nom" : image_copy(ps_) repeat :pause 100: until scancode > 31 print_locate ga,top_clavier : print " " : image_copy(ps_) 2d_pen_color 255,0,0 : 2d_pen_width 1 ' 2d_fill_color 240,240,240
repeat set_focus 0 : ' on force le form 0 à garder le focus 2d_pen_color 255,255,255 : ' efface le curseur trace_curseur(ga,top_clavier,curseur) if clavier$ = "" then curseur =0 clav$ = inkey$ item_add va_,"clav$="+clav$ + " scancode="+str$(scancode) if scancode = 8 :' retour arrière if curseur > 1 clavier$ = left$(clavier$,curseur-1) + right_pos$(clavier$,curseur+1) curseur = curseur-1 else clavier$ = right_pos$(clavier$,2): curseur = 0 end_if end_if
if clav$ = "" if scancode = 37 and clav$ = "":' and curseur>0 curseur = curseur - 1 else if scancode = 39 and curseur < len(clavier$) curseur = curseur + 1 else if scancode = 46 :' del clavier$ = left$(clavier$,curseur) + right_pos$(clavier$,curseur+2) else if scancode =38 or scancode = 36:' origine curseur = 0 else if scancode = 40 or scancode = 35: ' fin curseur = len(clavier$) end_if end_if end_if end_if end_if end_if
if clav$ <> "" if asc(clav$) > 31 if curseur = len(clavier$) clavier$ = clavier$ + clav$ : curseur = curseur + 1 else if curseur > 1 clavier$ = left$(clavier$,curseur) + clav$ + right_pos$(clavier$,curseur +1) curseur = curseur +1 else if curseur = 1 2d_pen_color 0,0,255 : trace_curseur(ga,top_clavier,0) ' @@@@@@ clavier$ = left$(clavier$,1) + clav$+right_pos$(clavier$,2) : curseur = 2 else clavier$ = clav$ + clavier$ : curseur = 1 end_if end_if end_if end_if end_if
print_locate ga,top_clavier : print clavier$+" " 2d_pen_color 255,0,0 : 2d_pen_width 1 : trace_curseur(ga,top_clavier,curseur) item_add va_,"clavier$="+clavier$
image_copy(ps_) : item_add va_,clavier$ repeat: wait 1 :until scancode = 0 or scancode = 27 : wait 1:repeat:until scancode <> 0 :caption 0,scancode until scancode = 13 or scancode = 27 retour$(1) = clavier$ top 0,0 : null%=dll_call1("SetFocus",windowfocus%) : ' restaure le form 0 et rappele la dernière fenetre qui avait le focus end_sub ======================== sub trace_curseur(ga,top_clavier,curseur) 2d_line ga + curseur * 9 , top_clavier, ga + curseur * 9 , top_clavier+23 :' gauche 2d_line ga + curseur * 9 , top_clavier, ga + curseur * 9 +10 , top_clavier :' haut 2d_line ga + curseur * 9 , top_clavier+22, ga + curseur * 9 +10 , top_clavier+22 :' bas 2d_line ga + curseur * 9+9 , top_clavier, ga + curseur * 9+9 , top_clavier+22 :' droite end_sub
' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fin DU PROBLÈME @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
' bibliothèque : BOUTON chain "C:\PANO\RE-editeur\new_lanceur.bas":' à retirer une fois le programme fini ' ============================================== ' bouton("clic=1|left=50|top=20|width=90|height=30|caption$={STOP}font_name=menu|") <-- exemple d'appel
sub bouton(donne$) s(number_current_line," bouton()") number() :' recherche d'un n° libre pour l'objet item_add va_ , "obj%=" + str$(obj%) + " maxi% ="+str$(maxi%)
dim_local clic,p,l,t,w,h,c$ , le , font$ ,v , b$ , type , r$ : type = 1 :' 1=bouton dim_local gauche,haut,ho r$ = "/" v = instr(donne$,"{") if v > 0 c$ = right_pos$(donne$,v+1) : c$ = left$(c$,instr(c$,"}")-1) donne$ = left$(donne$,v-1)+right_pos$(donne$,instr(donne$,"}")+1) item_add va_,"c$="+c$ item_add va_,"donne$="+donne$+"<--" donne$ = lower$(donne$)
end_if v = instr(donne$,"clic=") : if v > 0 then b$ = right_pos$(donne$,v+5) : clic = val(left$(b$,instr(b$,"|")-1)) v = instr(donne$,"parent=") : if v > 0 then b$ = right_pos$(donne$,v+7) : p = val(left$(b$,instr(b$,"|")-1)) : 2d_target_is p:print_target_is p v = instr(donne$,"left=") : if v > 0 then b$ =right_pos$(donne$,v+5) : l = val(left$(b$,instr(b$,"|")-1)) v = instr(donne$,"top=") : if v > 0 then b$ =right_pos$(donne$,v+4) : t = val(left$(b$,instr(b$,"|")-1)) v = instr(donne$,"width=") : if v > 0 then b$ =right_pos$(donne$,v+6) : w = val(left$(b$,instr(b$,"|")-1)) v = instr(donne$,"height=") : if v > 0 then b$ =right_pos$(donne$,v+7) : h = val(left$(b$,instr(b$,"|")-1)) v = instr(donne$,"font_name=") : if v > 0 then b$ = right_pos$(donne$,v+10): font$ = left$(b$,instr(b$,"|")-1)
gauche = left(pos(1)) : haut = top(pos(2)) le = L -gauche - 20 ' ho = t - haut
item_add objet%,"BOUTON " + str$(obj%) +" clic="+str$(clic) +" parent="+str$(p) + " left="+str$(l) +" top="+str$(t) item_add objet%," width="+str$(w)+ " height="+str$(h)+ " caption$="+c$ + " font$="+font$
if font$="menu" then ft% = 1 :' provisoir en attendant de faire les subs dessine_moi_un_bouton(l,t,w,h,c$,ft%) ' -->clic, parent,left,top,width,height<-- liste_$(obj%,0)=str$(clic)+r$+str$(p)+r$+str$(L)+r$+str$(T)+r$+str$(W)+r$+str$(H)+r$ :' 'par défaut pour l'instant ' type:bouton , left pour caption , caption$ rem " revoir, il y a LE liste_$(obj%,0)=liste_$(obj%,0) + "1"+r$ + str$(page) + r$ + str$(le+15) + r$ + "|" + c$ + r$ item_add va_,liste_$(obj%,0) ' liste$(x) | liste$(x) ' 0=click 0=OFF 1=ON | ' 1=parent | type ' 2=left pos(1) | caption ' 3=top pos(2) | écart ' 4=width pos(3) | ' 5=height pos(4) | ' 6=type pos(5) | bouton = 1 ' 7=page pos(6) | ' 8=ecart pos(7) ?? ' 9=caption ' 10=N° police$(x) end_sub
' =============================================================================
' mettre à ON :1 ou OFF :0 le contrôle du clic du bouton sub bouton_clic(n,clic) if liste_$(n,0) <> "" then liste_$(n,0) = str$(clic)+right_pos$(liste_$(n,0),2) end_sub
' ============================================================================= sub dessine_moi_un_bouton(x,y,w,h,t$,ft%) s(number_current_line," dessine_moi_un_bouton()") item_add va_,"x="+str$(x)+" y="+str$(y)+" w="+str$(w)+" h="+str$(h)+" t$=->"+t$+"<-"+" ft%="+str$(ft%) ' show ps_ if ft% = 0 then ft% = 1 dim_local fx,fy,fw,fh,R , L , a% , b$ :' la fonte doit-être déjà faite r=5 2d_pen_width 3 : 2d_pen_color 91,179,225 : 2d_fill_off 2d_circle x+r , y+r ,r : 2d_circle x+w-r-r , y+r ,r : 2d_circle x+r,y+h-r-r,r : 2d_circle x+w-r-r , y+h-r-r ,r 2d_line x+r, y , x+w-r-r ,y : 2d_line x+r , y+h-r , x+w-r-r ,y+h -r :' lignes horizontales 2d_line x , y+r , x , y+h-r-r : 2d_line x+w-r-1 , y+r , x+w-r-1 , y+h-r-r :' lignes verticales
' provisoir font_name pic_,"Arial" : font_size pic_,9 : font_bold_off pic_
2d_fill_on : 2d_fill_color 255,255,255 : 2d_pen_color 255,255,255 : 2d_pen_width 1 mettre_font_couleur(police$(ft%)) 2d_rectangle x+r-1 , y+2 , x+w-r-r+2 , y+h-r-1 :' remplissage verticale intérieur 2d_rectangle x +2 , y+r , x+w -r-2 , y+h-r-r :' remplissage horizontal intérieur
for a%=1 to len(t$) b$ = mid$(t$,a%,1) L = L + fonte%(ft%,asc(b$)) item_add va_,left$(t$,a%)+ "<- fonte%(ft%,asc(b$))="+str$(fonte%(ft%,asc(b$)))+ " L="+str$(L) next a%
fx = x+ (W-L)/2 fy = (h-6- fonte%(ft%,4) )/2 + y
' font_color pic_,255,0,0 mettre_attribut(police$(ft%)) : mettre_font_couleur(police$(ft%)) print_locate fx , fy : print t$ image_copy(ps_) end_sub
| |
| | | Contenu sponsorisé
| Sujet: Re: Fonction inkey$ inactive dans un form autre que form0 | |
| |
| | | | Fonction inkey$ inactive dans un form autre que form0 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |