FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Planétarium virtuel.
par Pedro Alvarez Aujourd'hui à 16:57

» Roues dentées
par jean_debord Aujourd'hui à 10:40

» Attention arnaque !
par mindstorm Jeu 19 Juil 2018 - 19:18

» Qui fait quoi ?
par silverman Mer 18 Juil 2018 - 15:21

» ITEM_SELECT N,L pour synedit
par silverman Mer 18 Juil 2018 - 15:20

» Boussole
par jean_debord Mer 18 Juil 2018 - 11:06

» Roue à n faces
par Marc Dim 15 Juil 2018 - 22:16

» Exemple d'une nouvelle version d'un GRID
par Jean Claude Ven 13 Juil 2018 - 10:32

» Une simple question
par Oscaribout Sam 7 Juil 2018 - 23:20

» BUG sur l'objet TAB
par Jack Sam 7 Juil 2018 - 21:12

» Monopoly moderne
par jjn4 Sam 7 Juil 2018 - 15:06

» Récapitulatif ludothèque panoramic jjn4
par jjn4 Ven 6 Juil 2018 - 17:41

» Lignes ondulées
par JL35 Ven 6 Juil 2018 - 17:39

» bug off_activate 0 : sans d'effet
par silverman Ven 6 Juil 2018 - 13:02

» Position des objets d'un conteneur dans FBPano et Panoramic
par Navigateur Ven 6 Juil 2018 - 12:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2018
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Problème de fenêtre modale.

Aller en bas 
AuteurMessage
Pedro Alvarez

avatar

Nombre de messages : 1104
Date d'inscription : 19/01/2014

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 9:57

Bonjour.

Dans le code suivant, j'aimerais que la fenêtre n° 2 s'affiche en mode modal, et que le message ne s'affiche pas.
Avez-vous une solution ?
Merci de votre aide.

Ce code étant un extrait très simplifié du code de mon programme général.

Code:
dim res%

dll_on "kgf.dll"

width 0,1600
height 0,900

afficher_f1()
afficher_f2()

message ""

end

sub afficher_f1()
    form 1
    ' res%=DLL_call2("WindowTopMost",handle(1),1)
    res%=dll_call1("BringWindowToForeground",handle(1))

    width 1,500
    height 1,500
    left 1,500
    top 1,300
end_sub

sub afficher_f2()
    form 2
    ' res%=DLL_call2("WindowTopMost",handle(2),1)
    res%=dll_call1("BringWindowToForeground",handle(2))

    width 2,100
    height 2,100
    left 2,600
    top 2,400
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 10:31

Voilà comment on fait les forms modales:
Code:
    label form1, form2, close1, close2
   
    dim res%

    dll_on "kgf.dll"

    width 0,1600
    height 0,900

    creer_f1()
    creer_f2()

    button 11 : top 11,10 :left 11,10 : caption 11,"Form 1" : on_click 11,form1
    button 12 : top 12,40 :left 12,10 : caption 12,"Form 2" : on_click 12,form2

    end

form1:
    afficher_f1()
    return
   
form2:
    afficher_f2()
    return
   
close1:
    hide 1
    active 0 : to_foreground 0
    return

close2:
    hide 2
    active 0 : to_foreground 0
    return

    sub afficher_f1()
      inactive 0
      show 1
    end_sub
   
    sub creer_f1()
        form 1
        hide 1 : on_close 1,close1
        ' res%=DLL_call2("WindowTopMost",handle(1),1)
        res%=dll_call1("BringWindowToForeground",handle(1))

        width 1,500
        height 1,500
        left 1,500
        top 1,300
    end_sub

    sub afficher_f2()
      inactive 0
      show 1
    end_sub
   
    sub creer_f2()
        form 2
        hide 2 : on_close 2, close2
        ' res%=DLL_call2("WindowTopMost",handle(2),1)
        res%=dll_call1("BringWindowToForeground",handle(2))

        width 2,100
        height 2,100
        left 2,600
        top 2,400
    end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 1104
Date d'inscription : 19/01/2014

MessageSujet: Problème d'affichage de Form.   Mer 25 Fév 2015 - 10:41

Bonjour.

Merci Klaus, mais la solution que tu me proposes est imparfaite.

En effet, le message ne devrait pas apparaître dans mon cas.
Le traitement des évènements après l'affichage de la 1ère form modale devrait être interrompu.


Code:
 label form1, form2, close1, close2

    dim res%

    dll_on "kgf.dll"

    width 0,1600
    height 0,900

    creer_f1()
    creer_f2()

    ' button 11 : top 11,10 :left 11,10 : caption 11,"Form 1" : on_click 11,form1
    ' button 12 : top 12,40 :left 12,10 : caption 12,"Form 2" : on_click 12,form2

    afficher_f1()
    message ""

    end

form1:
    afficher_f1()
    return

form2:
    afficher_f2()
    return

close1:
    hide 1
    active 0 : to_foreground 0
    return

close2:
    hide 2
    active 0 : to_foreground 0
    return

    sub afficher_f1()
      inactive 0
      show 1
    end_sub

    sub creer_f1()
        form 1
        hide 1 : on_close 1,close1
        ' res%=DLL_call2("WindowTopMost",handle(1),1)
        res%=dll_call1("BringWindowToForeground",handle(1))

        width 1,500
        height 1,500
        left 1,500
        top 1,300
    end_sub

    sub afficher_f2()
      inactive 0
      show 1
    end_sub

    sub creer_f2()
        form 2
        hide 2 : on_close 2, close2
        ' res%=DLL_call2("WindowTopMost",handle(2),1)
        res%=dll_call1("BringWindowToForeground",handle(2))

        width 2,100
        height 2,100
        left 2,600
        top 2,400
    end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 11:37

Ca ne peut pas du tout marcher comme ça. Et ce n'est pas parce que tu essaies d'utiliser une fonction de la DLL que ça changera quelque chose au fonctionnement de Windows.

Le seul moyen d'interrompre une séquence linéaire de code, c'est d'ouvrir une fenêtre de dialogue. Et c'est en la quittant que l'exécution continue. Ce sont des fenêtres du genre MESSAGE_CONFIRMATION_YES_NO etc. Il y a aussi des fonctions ShowMessageModal... dans KGF.dll.

Il faut bien voir que toutes les commandes Panoramic (sauf justement celles ouvrant un dialogue, comme MESSAGE et ses clones, et FILE_NAME$) s'exécutent et passent à la suite. Donc, ce n'est pas la commande FORM ni la commande SHOW qui interrompra une suite linéaire de commandes.

Il faut concevoir son programme de sorte à avoir une séquence linéaire initiale qui prépare l'environnement Windows, les initialisations générales, etc. Puis, des actions ponctuelles, déclenchées par des évènements Windows qui sont les ON_CLICK, ON_CHANGE, ON_KEY_DOWN, ON_TIMER etc. A chaque évènement est associé une routine évènement qui est par essence une séquence de code linéaire, la plus limitée possible, et qui se termine par RETURN. Et si dans une telle séquence, il doit être interdit de cliquer ailleurs dans le programme, alors il faut appliquer la technique que j'ai montré dans mon code exemple ci-dessus, en désactivant la form 0 (et d'autres forms qui pourrraient être visibles !) et de la ou les réactiver en sortant du traitement censé être "modal". Tu auras beau essayer toutes les astuces possibles, tu ne pourras pas sortir de ce principe qui est la base du fonctionnement de Windows. Cela ne dépend pas de Panoramic.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 1104
Date d'inscription : 19/01/2014

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 13:18

Bonjour.

Merci Klaus pour toutes ces précisions.

Je continuerai donc à utiliser inactive 0, puis active 0 à la sortie.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8077
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 25 Fév 2015 - 14:45

@ Pedro,

Que doit faire ta form "modal" ?
- agit elle sur ton programme pendant son affichage ?
- Propose t' elle un choix qui modifie une voir plusieurs variables ?
- affiche t elle un résultat ?

Avec un peu plus de précisions, on pourrait, peut être, t' apporter une solution...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pedro Alvarez

avatar

Nombre de messages : 1104
Date d'inscription : 19/01/2014

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 16:27

Bonjour.

Ma form modale affiche des informations, possède les boutons OK et Annuler, puis attend la sélection d'un élément dans une combo.

Le traitement doit donc être interrompu à cet endroit.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8077
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Mer 25 Fév 2015 - 16:39

Tu peux créer un petit programme, comme un "plug in"
Tu lances par execute_wait , cela met le programme en attente.
Ton bouton "ok" passes le résultat par les fonctions de KGF.dll de communication entre programmes, puis ferme la fenêtre.
Le programme principal reprend la main et traite les données passées....

C' est peu académique mais cela peut rendre service... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 19:11

@Pedro:
J'ai mis une nouvelle version en ligne qui apporte un petit truc pour résoudre ton problème. Dans le petit exemple qui suit, le bouton effectue 3 actions:
1. afficher le message "avant'
2. lancer une form en mode modal
3. afficher le message "après"
Et le message "après" ne vient que lorsqu'on ferme la form.
Code:
' MakeFormModal.bas

label modal

dim res%

form 1 : hide 1 : caption 1,"Form devant être modale"
memo 2 : parent 2,1

button 10 : top 10,10 : left 10,10 : caption 10,"Form modale"
  on_click 10,modal


dll_on "KGF.dll"

end

modal:
  message "avant"
 
  res% = dll_call3("SetFormProperties",object_internal(1),2,1)
 
  message "après"
 
  return
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Problème de fenêtre modale.   

Revenir en haut Aller en bas
 
Problème de fenêtre modale.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» problème démarrage
» [Résolu] Problème avec psg tv
» Problème avec roll over qui "clignote"
» Mac : problème de police
» [/résolu] problème avec java à l'instalation :-/

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: