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
» Gestionnaire de Projets Panoramic
par Minibug Aujourd'hui à 2:10

» Mah-Jong européen new-look
par jjn4 Hier à 16:35

» Button_picture
par pascal10000 Hier à 11:41

» Pourquoi le compilateur stagne
par Minibug Hier à 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Hier à 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Hier à 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Hier à 10:00

» KGF_dll - nouvelles versions
par pascal10000 Mer 13 Déc 2017 - 17:27

» track_bar circulaire
par Klaus Mar 12 Déc 2017 - 13:54

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Problème de fenêtre modale.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pedro Alvarez

avatar

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

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 11: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 : 10259
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 12: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 : 882
Date d'inscription : 19/01/2014

MessageSujet: Problème d'affichage de Form.   Mer 25 Fév 2015 - 12: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 : 10259
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 13: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 : 882
Date d'inscription : 19/01/2014

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 15: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 : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 25 Fév 2015 - 16: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 : 882
Date d'inscription : 19/01/2014

MessageSujet: Problème de fenêtre modale.   Mer 25 Fév 2015 - 18: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 : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Mer 25 Fév 2015 - 18: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 : 10259
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Problème de fenêtre modale.   Mer 25 Fév 2015 - 21: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.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» problème démarrage
» [Résolu] Problème avec psg tv
» Problème fax xp
» [Résolu] Problème affichage diapo powerpoint sous firefox
» [Résolu] problème freewifi hotspots

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: