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
» Form(résolu)
Nouvel évènement pour FORM: ON_SHOW Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Nouvel évènement pour FORM: ON_SHOW Emptypar Marc Hier à 11:42

» Bataille navale SM
Nouvel évènement pour FORM: ON_SHOW Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Une calculatrice en une ligne de programme
Nouvel évènement pour FORM: ON_SHOW Emptypar jean_debord Ven 26 Avr 2024 - 8:01

» Gestion d'un système client-serveur.
Nouvel évènement pour FORM: ON_SHOW Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Nouvel évènement pour FORM: ON_SHOW Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Nouvel évènement pour FORM: ON_SHOW Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Nouvel évènement pour FORM: ON_SHOW Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Nouvel évènement pour FORM: ON_SHOW Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Nouvel évènement pour FORM: ON_SHOW Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Nouvel évènement pour FORM: ON_SHOW Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Nouvel évènement pour FORM: ON_SHOW Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Nouvel évènement pour FORM: ON_SHOW Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Nouvel évènement pour FORM: ON_SHOW Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Nouvel évènement pour FORM: ON_SHOW Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €

 

 Nouvel évènement pour FORM: ON_SHOW

Aller en bas 
5 participants
AuteurMessage
Klaus

Klaus


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 15:27

J'aimerais avoir un évènement ON_SHOW qui serait symétrique à ON_CLOSE, et qui reporterait au niveau Panoramic l'évènement ON_SHOW d'une FORM Delphi.

Ceci permettrait d'être averti de l'apparition d'une form par la commande SHOW. C'est particulièrement utilie là où il faut surveiller la présence de certaines fenêtres à l'écran. Je pense à Synedit_Editor, par exemple. Actuellement, je le fais par un timer qui toutes les 300 millisecondes vérifie la présence des fenêtres pour prendre les actions qui s'imposent, et c'est ce qui pose un gros problème actuellement. En Delphi pur, je n'ai pas ce problème.

Serait-ce possible ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 18:02

Bonjour, tu dis: "J'aimerais avoir un évènement ON_SHOW qui serait symétrique à ON_CLOSE, et qui reporterait au niveau Panoramic l'évènement ON_SHOW d'une FORM Delphi." Pourquoi une FORM Delphi ? Panoramic ne sait pas gérer les FORM Delpho mais les FORM Panoramic, non ? A moins que tu parles des fenêtres au sens large mais dans ce cas, il faut en connaitre l'identifiant pour que Panoramic puisse contrôler cet événement, non ?

C'est peut être moi qui n'ais pas bien compris, mais à mon avis Klaus, tu devrais développer un peu ta demande. En principe, j'appuie quasiment toutes tes demandes, mais là, je dois avouer que je ne la comprends pas (par contre, j'en comprends tout à fait l'utilité, c'est juste la demande technique que je ne comprends pas).
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 52
Localisation : Bretagne
Date d'inscription : 15/02/2010

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: re   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 18:33

Je suis pour et j' ajoute, qu' une commande qui renverrait 1, 2, etc... 
selon l' action sur le form 0 serait bien pour prendre en compte le redimensionnement d' une fenêtre, 
la fermeture par la croix, 
le hide, 
voir d' autres actions.
Revenir en haut Aller en bas
Invité
Invité




Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 19:51

Klaus, ta demande je la comprend très bie, donc +1.

Cela dit, j'ai juste regardé rapidement (5mn maxi) ton programme.
Pour une nouvelle fenêtre je ne vois pas de ON_CLICK, ce qui est généralement le cas lorsque l'on choisi une nouvelle fenêtre.

Si tu as un sous-programme qui gère cela:

(pour nouveau) form 500: on_click 500,focus
(nouveau encore): form 510 : on_click 510, focus:

focus:
  focus% = number_click
  ' gestion de cela
return

Si la form déjà est cachée, on ne peut déjà pas cliquer dessus, sinon les sauvegardes et autres sont en corrélations. Maintenant j'ai juste recherché FORM, et on_click, je ne connais pas ton programme, et certainement que tu y as pensé.
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 21:10

J'ai bien marqué que personnellement je ne comprenais pas la partie "Form Delphi". C'est le Delphi en fait que je ne comprends pas dans le demande. Comme je le mettais avant, le reste et l'utilité de la demande, ça je comprends... Mais c'est peut être logique, c'est juste que je ne vois pas le lien...
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 22:01

Pourquoi je parle d'une form Delphi ? Parce que Panoramic est surtout fait en Delphi, et le noyau Panoramic intercepte les évènements Delphi pour les rendre accessible ensuite par le mécanisme Panoramic. Il faut bien savoir que Windows ne connait pas Panoramic. Windows connaît des objets fenêtrées, dont les fenêtres (form) font partie. Et ces objets ont un certain nombre d'évènements, dont l'évènement ON_SHOW.

En fait, ce que je voudrais obtenir, c'est d'avoir un évènement chaque fois qu'une form Panoramic est mise en avant-plan, prête à recevoir une entrée (clavier ou souris). C'est certainement l'évènement OnActivate de la form qui est significatif ici. J'ai essayé d'utiliser ON_CLICK sur ces forms, mais il y a deux problèmes:
1. cet évènement ne se déclenche pas si l'on clique dans la barre de titre, ou dans n'importe quel objet placé sur la form, alors que la form devient bien la form active et passe en avant-plan
2. cet évènement ne se déclenche pas non plus,ce qui est normal, lorsqu'on fait SHOW sur la form si elle est cachée

Or, j'aimerais avoir un évènement qui se déclenche si la form passe en avant-plan, peu importe par quel moyen. Que ce soit par programme (SHOW suivi éventuellement de TO_FOREGROUND), par ALT/TAB ou par un clic de souris, et dans ce dernier cas, peu importe où le clic a lieu: dans la barre de titre, dans un espace vide de la form ou dans un objet de la form. Dans tous ces cas, la forme passe en avant-plan et devient la form active, et c'est ça qui m'intéresse.

On a un évènement ON_CLOSE, fort utile au demeurant. Il est appelé chaque fois que la form est fermé par la croix rouge. Si c'est une form "fille" (autre que form 0), la form disparaît de l'écran, mais continue à exister, avec toutes ses données. Et une commande SHOW la renvoie à l'écran telle qu'elle était. Et c'est précisément cela qui m'intéresse: je voudrais être averti qu'une form particulière, sur laquelle j'aurai défini un évènement ON_SHOW (ou ON_ACTIVATE), apparaît à l'écran.

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 22:58

Très bien répondu, Klaus. Celà met mon idée à la poubelle. Et je ne suis pas étonné.

Une autre idée (nulle évidemment). Avec HANDLE_FORM() n'y a t'il pas moyen de savoir ce qui est actif? Inutile de répondre, je pense que c'est une idée en l'air. Ce n'est pas un événement.
Revenir en haut Aller en bas
Invité
Invité




Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMar 23 Sep 2014 - 23:38

Si tu n'as pas de réponse de Jack, et en attendant, et si une dll ne peut convenir, peut-être pourrais-tu partir dans ce sens en attendant.

Code:
label fenetre , 10 , 20
dim a%,hnd

form 10:left 10,200 : top 10,500: caption 10,"form 10" : on_click 10,fenetre
form 20:left 20,400 : top 20,100: caption 20,"form 20" : on_click 20,fenetre
' les on_click sont surement pas nécessaire.

main_menu 100
sub_menu 101: parent 101,100 : caption 101,"fenêtre"
    sub_menu 102 : parent 102,101 : caption 102,"fenêtre 10": on_click 102,10 : inactive 10
    sub_menu 103 : parent 103,101 : caption 103,"fenêtre 20": on_click 103,20 : inactive 20

end
' ============
fenetre:
' finalement inutile
message click
   hnd = number_click
   caption 0,hnd
return
===============
10:
   active 10 : inactive 20 : to_foreground 10
return
===============
20:
   active 20 : inactive 10 : to_foreground 20
return

Si cela peut éviter un timer, ce ne peut qu'être bénéfice. Dans les grands programmes, c'est jamais régulier. Plus il y a d'objet ou de contrôle, plus l'intervalle doit-être long. Il n'est pas dit que sur chaque ordi, le temps d'intervention soit le même, surtout si on est dans une phase critique.

Les fenêtre sont systématiquement inactives. Seul le choix dans le menu fenêtre permet d'aller là où on veut.

Je pense que c'est un palliatif provisoire. Tout le monde comprendra le problème.

Il y aura juste à relever les points à revoir, le jour où on a les commandes qui font défaut.
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMer 24 Sep 2014 - 7:48

Merci Klaus pour l'explication, je comprends mieux techniquement ce que tu demandes. J'espère que Jack pourra te le faire Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyMer 24 Sep 2014 - 15:58

En attenant d'avoir éventuellement l'évènement ON_SHOW (ou peut-être mieux ON_ACTIVATE), j'ai doté KGF.dll de la possibilité de gérer l'évènement ON_ACTIVATE et ON_MOVESIZE. Pour le moment, je l'ai appliqué à Synedit, mais le mécanisme est plus général.

En fait, ces évènements s'appliquent à des FORMs, et non pas à des objets quelconques, comme Synedit ou Memo. J'ai donc dû trouver un moyen de gérer ces deux évènements pour la FORM parent de l'objet Synedit. Or, cette form est créé par Panoramic, et la DLL n'en connaît que le handle.

Alors, j'ai utilisé l'API SetWindowsHookEx, avec le code WH_CBT. Ceci permet d'intercepter les messages Windows pour une FORM dont on connaît le handle. J'intercepte les deux messages en question: HCBT_ACTIVATE et HCBT_MOVESIZE, je fais mon traitement et les passe ensuite à Windows pour qu'il continue à faire son traitement normal.

Le traitement que je fais, serait dans l'idéal le déclenchement d'un évènement Panoramic "parlant". Or, je ne peux pas faire cela à partir d'une DLL. Je n'ai aucun moyen de dire à Panoramic de déclencher tel ou tel évènement. Alors, j'utilise l'astuce déjà employé à d'autres endroits de la DLL: j'utilise un objet Panoramic EDIT (caché) dont le handle est passé à la DLL (lors de la création de l'objet Synedit). Et j'utilise un message Windows pour envoyer du texte dans cet EDIT. Dans le programme Panoramic, j'ai déclaré l'évènement ON_CHANGE sur cet objet EDIT. Et lorsque dans la DLL, j'envoie du texte dans cet EDIT, l'évènement ON_CHANGE se déclenche, et je peux examiner le texte de l'objet pour identifier l'évènement que je voulais vraiment créer.

Dans ce cas précis, j'envoie Annn pour HCBT_ACTIVATE, avec nnn étant le numéro de l'objet Synedit concerné. Et j'envoie Mnnn pour l'évènement HCBT_MOVESIZE. Ceci permet de savoir que le Synedit nnn a été activé ou déplacé et/ou retaillé, et de réagir en conséquence.

Pour ceux qui s'y intéressent, voici la code gérant cela:
Code:
HookSE: array [1..100] of integer;                        // liste des WND_PROC hookées
FormSE: array [1..100] of integer;                        // liste des handles des forms contenant les Synedit

function Synedit_CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
 hTemp  : HWND;
 i      : Integer;
 RetVal : Integer;
 s      : String;
begin
  hTemp := HWND(wParam);
  for i := 1 to nSE do if FormSE[i]=hTemp then break;
  case nCode of
    HCBT_ACTIVATE:
      begin
        if hTemp>0 then begin
          if FormSE[i]=hTemp then begin
            s := 'A' + RightStr('00'+IntToStr(i),3);
            SendMessage(eventSE[i],WM_SETTEXT,length(s),integer(pchar(s)));
          end;
        end;
      end;
    HCBT_MOVESIZE:
      begin
        if hTemp>0 then begin
          if FormSE[i]=hTemp then begin
            s := 'M' + RightStr('00'+IntToStr(i),3);
            SendMessage(eventSE[i],WM_SETTEXT,length(s),integer(pchar(s)));
          end;
        end;
      end;
  end;
  Result := CallNextHookEx(HookSE[i], nCode, wParam, lParam);
end;

Procedure Synedit_InitHook(xSE: integer);
var
  dwThreadID : DWORD;
begin
  dwThreadID := GetCurrentThreadId;
  HookSE[xSE] := SetWindowsHookEx(WH_CBT, @Synedit_CBT_FUNC, hInstance, dwThreadID);
  if HookSE[xSE]=0 then RaiseLastOSError;
end;

Procedure Synedit_KillHook(xSE: integer);
begin
  if (HookSE[xSE] <> 0) then UnhookWindowsHookEx(HookSE[xSE]);
end;

// et lors de la création d'une fenêtre Synedit, on fait:
...
  FormSE[nSE] := hnd;    // handle de la fenêtre hébergeant l'objet Synedit
  Synedit_InitHook(nSE);
...

// lors de la suppression d'une fenêtre Synedit, on fait:
...
    Synedit_KillHook(xSE);
    HookSE[xSE] := 0;
    FormSE[xSE] := 0;

Et voilà...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2381
Date d'inscription : 28/05/2007

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyVen 26 Sep 2014 - 15:01

Je profite d'une journée de congé pour mettre à jour PANORAMIC.

Une version instantanée est disponible sur mon Webdav (répertoire PANORAMIC_VERSION_DE_TRAVAIL), qui possède les améliorations suivantes :

1- traitement de l'événement ACTIVATE

L'événement ACTIVATE se déclenche quand un FORM prend le focus.

ON_ACTIVATE N,L
exécute le programme à partir du label L quand l'objet système numéro N prend le focus
N doit être le numéro d'un objet FORM

OFF_ACTIVATE N
ignore le traitement d'événement "activate" quand l'objet système numéro N (FORM) est activé

2 - traitement de l'événement SHOW

L'événement SHOW se déclenche quand un FORM devient visible.

ON_SHOW N,L
exécute le programme à partir du label L quand l'objet système numéro N devient visible
N doit être le numéro d'un objet FORM

OFF_SHOW N
ignore le traitement d'événement "show" quand l'objet système numéro N (FORM) devient visible

3 - dans l'évaluation d'une expression de la gauche vers la droite, la division s'effectue avant la multiplication quand ces 2 opérations ont même priorité

4 - envoi d'un mail

MAIL_SEND adresse$,titre$,corps$

Pour avoir des exemples, voir la rubrique "Ce qui est en cours" de ce forum:

https://panoramic.1fr1.net/t3797-version-instantanee-26-septembre-2014-panoramic-v-0926i1

_________________
Nouvel évènement pour FORM: ON_SHOW Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyVen 26 Sep 2014 - 16:38

C'est très chouette, Jack. Mais, ne m'en veux pas - il y a un détail qui manque: les variables système:
NUMBER_ACTIVATE
NUMBER_SHOW

J'espère que je n'abuse pas...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8610
Age : 52
Localisation : Bretagne
Date d'inscription : 15/02/2010

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: re   Nouvel évènement pour FORM: ON_SHOW EmptyVen 26 Sep 2014 - 16:45

J' espère que Jack ne va prendre cela pour de la gourmandise
mais l' appétit vient en mangeant. Laughing

Je ne peux qu' appuyer ta demande...
+1
Revenir en haut Aller en bas
papydall

papydall


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

Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW EmptyVen 26 Sep 2014 - 16:52

Merci Jack.

Jack a écrit:
Je profite d'une journée de congé pour mettre à jour PANORAMIC.

Vous aussi, profitez de ce que Jack profite d’une journée de congé  pour exposer vos souhaits !

+1
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Nouvel évènement pour FORM: ON_SHOW Empty
MessageSujet: Re: Nouvel évènement pour FORM: ON_SHOW   Nouvel évènement pour FORM: ON_SHOW Empty

Revenir en haut Aller en bas
 
Nouvel évènement pour FORM: ON_SHOW
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Nouvel évèenment pour une form
» Nouvel objet pour une form Panoramic !
» Nouvel événement
» Evènement ON_CHANGE sur une FORM
» Evènement ON_SHOW sur une FORM

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos souhaits d'amélioration de Panoramic-
Sauter vers: