Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Nouvel évènement pour FORM: ON_SHOW | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvel évènement pour FORM: ON_SHOW Mar 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 ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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). | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 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. | |
| | | Invité Invité
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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é. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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.
| |
| | | Invité Invité
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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.
|
| | | Invité Invité
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mar 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. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mer 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Mer 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à... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Ven 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 ACTIVATEL'é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 SHOWL'é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 mailMAIL_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_________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Ven 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... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 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. Je ne peux qu' appuyer ta demande... +1 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW Ven 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 | |
| | | Contenu sponsorisé
| Sujet: Re: Nouvel évènement pour FORM: ON_SHOW | |
| |
| | | | Nouvel évènement pour FORM: ON_SHOW | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |