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
» PANORAMIC V 1
Astuce pour maîtriser fa fin d'un programme Emptypar papydall Aujourd'hui à 2:21

» Gestion d'un système client-serveur.
Astuce pour maîtriser fa fin d'un programme Emptypar Klaus Hier à 23:59

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Astuce pour maîtriser fa fin d'un programme Emptypar Marc Hier à 12:14

» @Jack
Astuce pour maîtriser fa fin d'un programme Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Astuce pour maîtriser fa fin d'un programme Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Astuce pour maîtriser fa fin d'un programme Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Astuce pour maîtriser fa fin d'un programme Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Astuce pour maîtriser fa fin d'un programme Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Astuce pour maîtriser fa fin d'un programme Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Astuce pour maîtriser fa fin d'un programme Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Astuce pour maîtriser fa fin d'un programme Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Astuce pour maîtriser fa fin d'un programme Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Astuce pour maîtriser fa fin d'un programme Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Astuce pour maîtriser fa fin d'un programme Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Astuce pour maîtriser fa fin d'un programme Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

 

 Astuce pour maîtriser fa fin d'un programme

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


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

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyMar 8 Juin 2010 - 19:10

J'ai longtemps galéré pour effectuer une fin maîtrisée d'un programme. Je veux dire par là intercepter le click sur la croix de la fenêtre principale que je voulais intercepter pour finir certains traitements, enregistrer des données restées en mémoire, fermer les fichiers, supprimer les fichiers temporaires, et j'en passe.

Or, Panoramic ne donne pas la main à ce niveau. Seule solution: utiliser border_hide 0 et ajouter un bouton de fermeture. Très moche car on ne peut alors plus redimensionner la fenêtre, ni la déplacer ou la minimiser.

Il y a pourtant une solution, qui passe par la création d'une autre form qui servira d'interface visuel, et on ne fait RIEN sur la form 0 sauf un hide 0 en tout début de programme. Cela donne ça:

Citation :

label fini
hide 0
form 1
command_target_is 1
button 2
top 2,10
left 2,100
caption 2,"Sortie"
on_click 2,fini
'
' ici, le reste des initialisations
'
end
fini:
'
' ici, tous les traitements de clôture
'
if (sortie refusée) then return
terminate
return : ' cette instruction ne sera jamais exécutée

Comme vous l'avez compris, (sortie refusée) n'est pas une expression Panoramic, mais une indication pour dire qu'à cet endroit, on peut encore tester si la sortie du programme peut être acceptée ou non.

Bien sûr, un click sur la croix de la form 1 la fait dispaître, et le programme doit être tué par le gestionnaire des tâches.

Pour pallier à cela, on modifie le programme légèrement. On ne cache plus la form 0, mais on réduit sa taille pour la recouvrir totalement par la form 1, puis on lui met un seul bouton qui réaffichera la form 1:

Citation :

label fini,reaff
border_hide 0
width 0,100
height 0,30
button 999
width 999,98
height 999,28
caption 999,"Retour"
on_click 999,reaff
form 1
command_target_is 1
button 2
top 2,10
left 2,100
caption 2,"Sortie"
on_click 2,fini
'
' ici, le reste des initialisations
'
end
fini:
'
' ici, tous les traitements de clôture
'
if (sortie refusée) then return
terminate
return : ' cette instruction ne sera jamais exécutée

reaff:
show 1
return


J'ai mis des couleurs dans ces sources pour que cela soit plus lisible. Voici la version que l'on peut prendre par copier/coller:

Code:
label fini,reaff
border_hide 0
width 0,100
height 0,30
button 999
width 999,98
height 999,28
caption 999,"Retour"
on_click 999,reaff
form 1
command_target_is 1
button 2
top 2,10
left 2,100
caption 2,"Sortie"
on_click 2,fini
'
'  ici, le reste des initialisations
'
end
fini:
'
' ici, tous les traitements de clôture
'
' if 1=1 then return
terminate
return    : ' cette instruction ne sera jamais exécutée

reaff:
show 1
return

Vous verrez, l'effet est spectaculaire. On peut enfin maîtriser la fin abrupte d'un programme. En clickant sur la croix de la form 1, celle-ci semble se fermer. En fait, elle est juste cachée et la form 0 réapparaît en-dessous. Elle contient un seul bouton "Retour" qui réaffiche la form 1, et le tour est joué. Et comme la form 0 a un border_hide 0, on ne peut pas reclicker sur la croix, par inadvertance (ou malveillance).

Alors, heureux ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyMar 8 Juin 2010 - 20:10

Klaus c'est le roi....

Je ne dirais pas combien de fois j'ai abordé ce sujet, sans jamais avoir de réponses satisfaisantes .........

Ce que tu viens de nous sortir est une révolution (pour moi en tout cas) car dans beaucoups de mes codes ce controle de la croix rouge "quitter" m'a pourri la vie.

Mon regret c'est que l'on ne s'y ai pas penché et que j'aurais pu faire mes programmes autrement si l'on m'avais éclairé. Bien sur, j'aurais pu trouver moi-même ce contournement (encore une fois j'ai manqué d'imagination ou de méthode), mais j'aurais aimé une aide (comme la tienne) plutot qu'une fin de non reçevoir.

Bravo Klaus, ta combine je l'enregistre car pour moi elle est capitale.

Grace à toi je vais encore m'accrocher, et il était temps....

A+
Revenir en haut Aller en bas
Klaus

Klaus


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

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyMar 8 Juin 2010 - 20:43

Je le sais bien, Jean Claude: j'ai suivi tes différents posts avec intérêt, et j'ai galéré longtemps avant de trouver une solution. En fait, l'astuce décrite ci-dessus est un sous-produit de mon IDE: essaie de fermer une de ses fenêtres apr leur petite croix (elles sont toutes en border_small), puis clique sur le bouton "Dock" dans la barre d'outils. Les fenêtres réapparaissent...

J'ai découvert après de longues expérimentations qu'une fenêtre Panoramic fermée par la croix (sauf la form 0 bien sûr) n'est pas supprimée, mais simplement cachée. Ce fait n'est pas mentionné dans la doc, à ma connaissance. En réalité, pour supprimer une form, il faut utiliser la commande delete, et on sait que cela entraîne quelques difficultés. Donc, je suis assez content que la croix ne fait que simuler une commande hide sur la fenêtre, et cette commande peut donc être annulée par un show. C 'est ça, ma découverte.

Mais la technique est au point depuis peu, et je viens de la réduire au minimum pour la trésenter à tous. Heureux d'avoir pu être utile.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyMer 9 Juin 2010 - 13:21

Pour enfoncer le clou, j'ai remplacé le button 2 (Sortie) par un MAIN_MENU pour que chacun puisse voir l'intérêt de ta trouvaille.

Code:
label fini,reaff

border_hide 0:width 0,220:height 0,30

button 999:width 999,220:height 999,28:caption 999,"Vous devez sortir par le Menu (Cliquez ici)"
on_click 999,reaff

form 1:command_target_is 1

main_menu 2
sub_menu 3:parent 3,2:caption 3,"Quitter":on_click 3,fini
'
'  ici, le reste des initialisations
'
end
fini:
'
' ici, tous les traitements de clôture
'
' if 1=1 then return
terminate
return    : ' cette instruction ne sera jamais exécutée

reaff:
show 1
return

A+ cheers

PS: reste à voir si l'on pourrait remplacer le bouton 999 par un message à cliquer.
Revenir en haut Aller en bas
Klaus

Klaus


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

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyMer 9 Juin 2010 - 20:49

C'est tout-à-fait cela. On voit parfaitement l'effet. Quant à un message à cliquer, on peut le faire de deux manières, sans utiliser un bouton:
1) faire un print du message directement sur la form 0, et faire le on_click sur la form 0
2) créer un alpha 999 avec le message, et faire un on_click sur ce alpha
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme EmptyJeu 10 Juin 2010 - 10:16

Un autre essai avec Alpha et un Form supplémentaire...

Code:
label fini,ouvre_1,ouvre_10,ferme_10

border_hide 0:width 0,220:height 0,30

alpha 999:width 999,220:height 999,28:top 999,8:caption 999,"  Vous devez sortir par le Menu (Cliquez ici)"
font_color 999,255,50,50
on_click 999,ouvre_1

' ------ FORM 1 ----
form 1:caption 1,"Vous êtes sur FORM 1":command_target_is 1
main_menu 2
sub_menu 3:parent 3,2:caption 3,"Terminate":on_click 3,fini
sub_menu 4:parent 4,2:caption 4,"Ouvrir FORM 10":on_click 4,ouvre_10

' ------ FORM 10 ----
' Form 101 pour controler la sortie de Form 10 (comme Form 0 pour Form 1)
form 101:border_hide 101:width 101,220:height 101,30:top 101,250:left 101,250
command_target_is 101
alpha 102:width 102,220:height 102,28:top 102,8:caption 102,"  Vous devez sortir par le Menu (Cliquez ici)"
font_color 102,255,50,50
on_click 102,ouvre_10
hide 101

form 10:top 10,250:left 10,250
caption 10,"Vous êtes sur FORM 10":command_target_is 10
main_menu 20
sub_menu 30:parent 30,20:caption 30,"Retour Form 1":on_click 30,fini
hide 10

' ---------------------
'  ici, le reste des initialisations
'
end
' =============================================================================
fini:
'
' ici, tous les traitements de clôture
'
if clicked(30)=1 then gosub ferme_10 : return
message "Merci de votre visite, à bientôt"
terminate
return    : ' cette instruction ne sera jamais exécutée

ferme_10:
' Ici tout controle à faire avant de fermer form 10
message "Le controle de fermeture de Form 10 s'est éffectué avec succès"
' Fermer 10 et réouvrir 1
hide 101:hide 10:show 0:show 1
return

ouvre_10:
' fermer 1 et ouvrir 10
hide 0:hide 1
show 101:show 10
return

ouvre_1:
show 1
return

Remarque: Pour avoir un Form, il faut en créer 2 (1 pour controler la croix Rouge, l'autre pour sa fonction)
Ce système impose d'avoir pour chaque Form de fonction crée un Label d'ouverture et un Label de fermeture.
Reste à prévoir une numérotation d'objets cohérente avec ce système.

C'est un peu lourd, mais çà fonctionne.

A+
Revenir en haut Aller en bas
Contenu sponsorisé





Astuce pour maîtriser fa fin d'un programme Empty
MessageSujet: Re: Astuce pour maîtriser fa fin d'un programme   Astuce pour maîtriser fa fin d'un programme Empty

Revenir en haut Aller en bas
 
Astuce pour maîtriser fa fin d'un programme
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» astuce MARK_ON/OFF pour 'sub_menu'
» Astuce pour une form
» Astuce : créer mémoire tampon(très utile pour CALL_DLLx())
» Astuce pour executer XP sous Windows 7 avec toutes les appli
» Astuce pour repérer les objets

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: