FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Message 'passant' Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Message 'passant' Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Message 'passant' Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Message 'passant' Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Message 'passant' Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Message 'passant' Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Message 'passant' Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Message 'passant' Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Message 'passant' Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Message 'passant' Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Message 'passant' Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Message 'passant' Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Message 'passant' Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Message 'passant' Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Message 'passant' Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Bon plan achat en duo : 2ème robot cuiseur Moulinex Companion ...
600 €
Voir le deal

 

 Message 'passant'

Aller en bas 
+2
Jicehel
JL35
6 participants
AuteurMessage
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 18:18

La directive MESSAGE (et ses différentes variantes) affiche une information à l'écran, et met le programme en attente d'une confirmation de lecture de l'utilisateur.
Le programme principal est donc interrompu et ne prend plus aucune autre commande. Et en particulier, s'il y a un Timer en cours, les 'interruptions' timer vont s'accumuler en attente d'exécution, et on risque très fortement le plantage par saturation (Runtime error ou autres joyeusetés).

Il est possible d'afficher un message d'information ou d'alerte non bloquant, que l'utilisateur pourra acquitter quand il voudra sans perturber le fonctionnement du programme principal.
Il faut pour ça créer un petit exécutable autonome, indépendant, qui gérera l'affichage du message et son 'acquittement'.
Ce programme pourra être lancé par une petite sub depuis le programme principal, avec en paramètres la chaîne à afficher (plusieurs lignes éventuelles séparées par des rc/al), et sa position x,y dans l'écran.
La sub d'appel devra connaître le chemin de cet exécutable, et également transformer la chaîne à afficher, en remplaçant ses caractères 'espace' par des '%' (par exemple) et ses retours chariot/interlignes par des '<' (par exemple), pour ne pas perturber le passage de paramètres, la chaîne étant reconstituée par l'exécutable d'affichage.

D'abord l'exécutable autonome (que j'ai appelé finement Info.exe  Very Happy ):
Code:
' Affichage d'un message d'info: chaîne a$, en x,y de l'écran
' Appel: Info.exe "chaîne à afficher" 100 200
' (dans la chaîne, les espaces et rcal sont remplacés par des caractères convenus)
LABEL Quit
DIM ce$,cr$,i%,a$,b$,x%,y%,lt%,ht%,wt%
ce$ = "%": ' caractère de remplacement des espaces
cr$ = "<": ' caractère de remplacement des rcal

IF PARAM_NUMBER < 3 THEN TERMINATE
a$ = PARAM_VALUE$(1): x% = VAL(PARAM_VALUE$(2)): y% = VAL(PARAM_VALUE$(3))
BORDER_SMALL 0: TOP 0,y%: LEFT 0,x%: CAPTION 0,"    -   INFO   -"
COLOR 0,180,200,230: ON_CLOSE 0,Quit
LIST 1: FONT_NAME 1,"Arial": FONT_SIZE 1,10: COLOR 1,255,255,0
ht% = TEXT_HEIGHT(a$,1)
FOR i% = 1 TO LEN(a$)
    IF MID$(a$,i%,1) = ce$ THEN a$ = LEFT$(a$,i%-1)+" "+MID$(a$,i%+1,500)
NEXT i%
wt% = 0
i% = INSTR(a$,cr$)
WHILE i% > 0
    b$ = LEFT$(a$,i%-1): IF TEXT_WIDTH(b$,1)>wt% THEN wt%=TEXT_WIDTH(b$,1)
    ITEM_ADD 1,b$: a$ = MID$(a$,i%+1,500)
    i% = INSTR(a$,cr$)
END_WHILE
IF TEXT_WIDTH(a$,1)>wt% THEN wt%=TEXT_WIDTH(a$,1)
ITEM_ADD 1,a$
HEIGHT 1,(2+COUNT(1))*ht%+2: WIDTH 1,wt%*1.2+30
WIDTH 0,WIDTH(1)+16: HEIGHT 0,HEIGHT(1)+60
BUTTON 2: TOP 2,HEIGHT(0)-59: WIDTH 2,60: LEFT 2,WIDTH(0)/2-35: CAPTION 2,"OK": ON_CLICK 2,Quit
END
Quit:
TERMINATE
Puis la sub d'appel (Sub Info()...), avec un exemple d'utilisation:
Code:
DIM info$,a$
a$ = "Message d'information"
a$=a$+CHR$(13)+CHR$(10)+"pour voir si ça marche"+CHR$(13)+CHR$(10)+"et voilà !"
Info(a$,200,100)
END

SUB Info(a$,x%,y%)
' Affichage d'une information 'passante': n'interrompt pas le programme appelant
DIM_LOCAL info$,i%,rc$,ce$,cr$
info$ = "C:\PANORAMIC\Info.exe ": ' <======= chemin de l'exécutable
rc$ = CHR$(13)+CHR$(10)
ce$ = "%": ' caractère de remplacement des espaces
cr$ = "<": ' caractère de remplacement des rcal
FOR i% = 1 TO LEN(a$): ' remplacement des espaces
    IF MID$(a$,i%,1) = " " THEN a$ = LEFT$(a$,i%-1) + ce$ + MID$(a$,i%+1,500)
NEXT i%
i%=INSTR(a$,rc$): ' remplacement des rcal (cr$)
WHILE i%>0: a$=LEFT$(a$,i%-1)+cr$+MID$(a$,i%+2,500): i%=INSTR(a$,rc$): END_WHILE
EXECUTE info$ + chr$(34)+a$+ " " + STR$(x%)+" "+STR$(y%)+chr$(34): ' <==========
END_SUB
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 20:17

En effet c'est intéressant de travailler l'interaction entre 2 programmes
Dans certains cas ça peut être pratique. Par exemple, un programme "serveur" de jeu qui enverrai des événements donnés à des clients sur le réseau, mais ce n'est qu'une idée parmi d'autres et les échanges peuvent être bi-directionnels
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 21:39

On peut sans doute imaginer d'autres applications, mais mon idée a priori c'était de pouvoir afficher un message, ou des conseils, ou des directives pour une situation donnée sans bloquer le programme.
Par exemple un utilisateur pourrait vouloir garder des directives (règles du jeu éventuellement) sous les yeux tout en exécutant une partie de programme et les libérer à son bon vouloir.
(et je pensais surtout à ce timer bien utile mais de manipulation bien délicate...)

Dans mon cas il n'y a pas deux programmes mais un seul, le programme d'affichage bien qu'il soit indépendant n'étant en l'occurence qu'un outil du programme principal.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 21:45

Absolument, mais l'idée est applicable de manière bien plus large.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 23:21

Une idée très simple pour afficher un message non bloquant:
1. crée une form cachée (par HIDE), mais positionnée l'endroit prévu
2. place un alpha ou un mémo sur cette form
3. pour afficher le message, mets le texte dans l'alpha ou le mémo, puis montre la form par SHOW

Rien n'est bloqué. Pas besoin de timer ou de programme externe. Simplement, lorsque tu veux effacer le message, ferme-le simplement par la croix rouge. A la limite, tu peux aussi y mettre un bouton "Fermer", dont la routine évènement fait simplement HIDE de la form.

Et lorsque tu veux afficher un autre message, remplace simplement le texte dans l'alpha ou le mémo et refais SHOW dfe la form. En effet, la croix rouge a pour seul effet de faire HIDE de la form, mais ne la supprime pas !

Et voilà - le tour est joué.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyDim 29 Juin 2014 - 23:29

Effectivement Klaus, ton système est beaucoup plus astucieux que le mien ! pas besoin de créer un exécutable particulier.
Mais ce n'est pas forcément facile à mettre dans une sub.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyLun 30 Juin 2014 - 11:39

PS: Désolé, je viens de mieux regarder le code cette nuit et j'avais carrément répondu à côté de la plaque en regardant le principe de fonctionnement... Comme quoi, quand on lit trop vite on ferait mieux de se taire ... désolé ...
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Message 'passant' Empty
MessageSujet: re   Message 'passant' EmptyLun 30 Juin 2014 - 12:12

@ JL35,

Code:
Dim no%,FM%,Mes%

Form_message("Ceci est un message !")
wait 2000
hide FM%

end


Sub Form_message(T$)
   if FM%>0
      show FM%
      caption Mes%,T$
   else
      no%=no%+1 : FM%=no%
      form FM%
      command_target_is 0
      height FM%,150
      width FM%,350
      top FM%,(screen_y-height(FM%))/2
      left FM%,(screen_x-width(FM%))/2
      
      no%=no%+1 : Mes%=no%
      Alpha Mes%
      Parent Mes%,FM%
      Top Mes%,20
      left Mes%,20
      font_name Mes%,"arial"
      font_size Mes%,14
      caption Mes%,T$
   end_if
end_sub

Là, je ne passe que le texte en paramètres mais rien ne t' empêche de passer la couleur, les dimensions, etc....
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyLun 30 Juin 2014 - 14:06

En suivant les suggestions judicieuses de Klaus, j'ai fait quelque chose de bien plus simple, pas besoin d'exécutable externe, tout est embarqué dans la sub:
Code:
SUB Info(it$,xi%,yi%)
' Affichage d'un message 'passant' it$ en xi%,yi% de l'écran
IF LABEL("Cs_nf")=0
    LABEL Cs_nf: DIM Fs_nf
    Fs_nf=850: WHILE OBJECT_EXISTS(Fs_nf) = 1: Fs_nf=Fs_nf+1: END_WHILE
    FORM Fs_nf: BORDER_SMALL Fs_nf
    CAPTION Fs_nf,"     -   INFO   -"
    FONT_NAME Fs_nf,"Arial": FONT_SIZE Fs_nf,10: ON_CLOSE Fs_nf,Cs_nf
    MEMO Fs_nf+1: PARENT Fs_nf+1,Fs_nf: FULL_SPACE Fs_nf+1: COLOR Fs_nf+1,255,255,128
END_IF
CLEAR Fs_nf+1: ITEM_ADD Fs_nf+1,it$: HEIGHT Fs_nf,15*COUNT(Fs_nf+1)+60
TOP Fs_nf,yi%: LEFT Fs_nf,xi%
SHOW Fs_nf
EXIT_SUB
Cs_nf:
HIDE Fs_nf
RETURN
END_SUB
La Form d'affichage est créée une fois pour toutes, et réutilisée à chaque nouvel affichage (nouveau message).

@ygeronimi
je voulais un message qui reste à l'écran aussi longtemps que l'utilisateur le désire (mode d'emploi, directives, règles du jeu, liste quelconque, etc.), sans que ça bloque le fonctionnement normal du programme principal.
C'est donc l'utilisateur qui doit décider de la fermeture. Dans ton exemple tu as de fortes chances d'avoir des conflits de numéros d'objets avec le programme (no% ?).
Le message à afficher peut être long (plusieurs lignes), il faut donc chaque fois recalculer les dimensions de la fenêtre d'affichage.
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyLun 30 Juin 2014 - 15:14

Merci pour celui qui, le premier, a eu l'idée d'un message non bloquant : j'ai nommé JL35.Laughing 
Merci pour celui qui a proposé une idée géniale pour le faire : j'ai nommé Klaus.Laughing 
Merci encore pour JL35 qui a mis l'idée de Klaus en SUB.Laughing 

Et moi, je participe par .... un exemple d'utilisation  Embarassed

Code:

label compte
dim i,tex$
timer 100 : timer_interval 100,10 : timer_on 100 : on_timer 100,compte
font_bold 0 : font_size 0,14
tex$ = " ***** Ce message ne bloque pas le TIMER.*****"
tex$ = tex$ + "        ********** Merci Klaus et JL35 **********     "
tex$= tex$ + "         Fermez cette fenêtre quand vouc voulez  !!!!!"
  info(tex$,200,200)
end
compte:
   i = i + 1 : print_locate 100,100 : print "Compte : " + str$(i)
return

rem ============================================================================
SUB Info(it$,xi%,yi%)
' Affichage d'un message 'passant' it$ en xi%,yi% de l'écran
    IF LABEL("Cs_nf")=0
       LABEL Cs_nf: DIM Fs_nf
       Fs_nf=850: WHILE OBJECT_EXISTS(Fs_nf) = 1: Fs_nf=Fs_nf+1: END_WHILE
       FORM Fs_nf: BORDER_SMALL Fs_nf
       CAPTION Fs_nf,"     -   INFO   -"
       FONT_NAME Fs_nf,"Arial": FONT_SIZE Fs_nf,10: ON_CLOSE Fs_nf,Cs_nf
       MEMO Fs_nf+1: PARENT Fs_nf+1,Fs_nf: FULL_SPACE Fs_nf+1: COLOR Fs_nf+1,255,255,128
    END_IF
    CLEAR Fs_nf+1: ITEM_ADD Fs_nf+1,it$: HEIGHT Fs_nf,15*COUNT(Fs_nf+1)+60
    TOP Fs_nf,yi%: LEFT Fs_nf,xi%
    SHOW Fs_nf
    EXIT_SUB
Cs_nf:
    HIDE Fs_nf
RETURN
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyLun 30 Juin 2014 - 15:21

Voilà, tout est dit papydall, c'est exactement l'esprit de ce que je voulais faire.

Une petite remarque qui n'a rien à voir, mais qui concerne le timer: il semble que le timer soit le timer est actif dès sa déclaration, pas besoin de timer_on (qui n'est utile que pour relancer après un timer_off). Ce n'est pas précisé dans la doc, mais à savoir (remarque, le timer_on ne nuit pas, c'est juste qu'il faut savoir que le timer est tout de suite actif).
De même, comme l'a fait remarquer Klaus, le clic sur la croix d'un (une ?) Form le cache mais ne le supprime pas, contrairement à la même chose sur le Form 0.
Revenir en haut Aller en bas
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyMer 2 Juil 2014 - 18:55

merci a tous
c'est par de petite chose comme celle là que j’apprends le mieux.
continuez
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyMer 2 Juil 2014 - 19:26

JL35 a écrit:
De même, comme l'a fait remarquer Klaus, le clic sur la croix d'un (une ?) Form le cache mais ne le supprime pas, contrairement à la même chose sur le Form 0.

Personnellement j'opte pour UN FORM  qui veut dire FORMulaire et non FORMe.
Pour les autres objets (LIST, SCENE, OPTION, IMAGE, etc.) bien qu'ils soient du genre féminin, je pense (avis personnel!  Wink ) qu'il faille mieux les appeler au masculin!
On dit bien UN objet LIST, UN objet IMAGE, UN objet SCENE, etc.
En omettant le mot objet, on voit pourquoi je dit UN LIST.  Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyMer 2 Juil 2014 - 20:37

Tout à fait d'accord papydall pour le masculin générique des objets (on ne va pas se lancer dans des polémiques sur le genre, hein ?  Very Happy ).

Merci pour ta remarque mindstorm, ça fait plaisir.  Smile 
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' EmptyJeu 3 Juil 2014 - 2:12

Un tel message "non bloquant" affiché par une form peut aussi devenir "bloquant" quant aux accès aux objets de la form principale, tout en restant "non bloquant" pour les traitements qui continuent à s'exécuter en traitement de fond.

Dans l'exemple ci-dessous, il y a deux boutons: "bloquant" et "non bloquant".

Le bouton "non bloquant" lance un message comme celui dont on parle dans ce fil de discussion. La form 0 reste accessible. La preuve: en cliquant sur la croix rouge de la form 0, le programme s'arrête.

Mais le bouton "bloquant" est différent. Il affiche toujours un message, mais cette fois, la form 0 est inaccessible tant que me message n'est pas fermé par la croix rouge. Cependant, le traitement de fon (l'affichage de l'heure, seconde par seconde, dans le titre de la form de message, continue sans être bloqué.

Le tout est d'agir sur active/inactive de la form 0. C'est aussi simple que ça. Et on peut utiliser cette technique, non seulement pour afficher des messages, mais également pour afficher des fenêtres de saisie avec plusieurs champs à renseigner, avant de continuer le traitement normal. Bien sûr, dans ce cas, il faut aussi ajouter un bouton de validation à la form de saisie.

Voici ma démo:
Code:

label close111, non_bloquant, bloquant, tick


form 111 : hide 111 : top 111,400 : left 111,400
memo 112 : parent 112,111 : full_space 112 : bar_both 112
on_close 111,close111

button 1 : top 1,10 : left 1,10 : width 1,200
caption 1,"Message non bloquant"
on_click 1,non_bloquant

button 2 : top 2,40 : left 2,10 : width 2,200
caption 2,"Message bloquant"
on_click 2,bloquant

timer 3 : timer_off 3 : timer_interval 3,1000 : on_timer 3,tick

end

close111:
  active 0
  timer_off 3
  return

non_bloquant:
  clear 112
  item_add 112,"Ce message est non bloquant."
  show 111
  timer_on 3
  return
 
bloquant:
  clear 112
  item_add 112,"Ce message est bloquant."
  item_add 112,"Cependant, les traitements continuent."
  show 111
  inactive 0
  timer_on 3
  return
 
tick:
  timer_off 3
  caption 111,time$
  timer_on 3
  return
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Message 'passant' Empty
MessageSujet: Re: Message 'passant'   Message 'passant' Empty

Revenir en haut Aller en bas
 
Message 'passant'
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Un bonjour en passant...
» coucou en passant
» Un coucou en passant...
» boite de message
» Message

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: