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
Nouvel événement Emptypar jjn4 Aujourd'hui à 17:49

» select intégrés [résolu]
Nouvel événement Emptypar jjn4 Aujourd'hui à 17:00

» number_mouse_up
Nouvel événement Emptypar jjn4 Aujourd'hui à 11:59

» Aide de PANORAMIC
Nouvel événement Emptypar jjn4 Aujourd'hui à 11:16

» trop de fichiers en cours
Nouvel événement Emptypar lepetitmarocain Aujourd'hui à 10:43

» Je teste PANORAMIC V 1 beta 1
Nouvel événement Emptypar papydall Aujourd'hui à 4:17

» bouton dans autre form que 0
Nouvel événement Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Nouvel événement Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Nouvel événement Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Nouvel événement Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Nouvel événement Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Nouvel événement Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Nouvel événement Emptypar leclode Sam 27 Avr 2024 - 17:59

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

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

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

 

 Nouvel événement

Aller en bas 
5 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Nouvel événement Empty
MessageSujet: Nouvel événement   Nouvel événement EmptyVen 31 Aoû 2012 - 20:18

C'est pas une demande Jack,
c'est juste une question, comme je ne savais pas dans quelle rubrique la mettre, je la met ici... Wink
(peut être dans bavardage ?)
Que pensez-vous de ceci:
Code:
PICTURE 1
ON_HOVER 1,MaProcedure
Ça peut être intéressant dans certains cas... Wink

(Évènement déclenché sur passage de la souris dessus...)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jean Claude

Jean Claude


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyVen 31 Aoû 2012 - 20:47

Oui, c"est intéressant

un peu comme HINT mais avec possibilité d'intercepter. Je verrais plutôt ON_MOUSE_OVER N,label....

+1

Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyVen 31 Aoû 2012 - 21:09

Regarde les fonctions de gestion de la souris dans KGF.dll. Tu peux, entre autres, intercepter deux évènements:
5 = souris entre dans l'objet
6 = souris sort de l' objet
Ceci sont les "types" concernés pour la routine ClickSetLink. Avec ça, tu peux changer un objet de couleur tant que le curseur est dedans, ou n'importe quoi d'autre: tu gères séparément l'entrée et la sortie de la souris.

Bon, je reconnais que c'est jour à mettre en oeuvre, mais c'est ce que j'ai trouvé de mieux pour pallier à ce manque actuel dans Panoramic. Ceci dit, la demande pour des évènements supplémentaires comme ON_MOUSE_IN et ON_MOUSE_OUT a été faite depuis longtemps.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptySam 1 Sep 2012 - 22:44

Citation :
Regarde les fonctions de gestion de la souris dans KGF.dll. Tu peux, entre autres, intercepter deux évènements
Ce que tu fais pour la souris, peux-tu le faire pour le clavier (fonction SEND)?
Si c'est le cas, ce que j'ai commencé pour le pluging de Panoramic en Autoit, pourrait se faire avec KGF. D'ailleurs en cliquant sur des endroits des icônes ou du menu, on peut déjà traiter la majorité des choses que j'ai faite, sinon l'ensemble. Mais je pose la question simplement, sans raison d'utilisation pour l'instant.

Si c'était le cas, il y aurait bien des automatismes qui pourraient être faits en Panoramic (en dehors de l'incrustation d'un objet venant d'ailleurs comme Memo Rich)
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptySam 1 Sep 2012 - 23:53

Oui, je peux le faire. Je le fais d'ailleurs à différents endroits, dans KGF.dll. La simulation des clics se fait an particulier par l'envoi de caractères par le mécanisme de l'envoi de messages de Windows, mais plus nettement encore le pilotage du browser. Je sais envoyer du texte en forme de chaînes de caractères, des caractères individuels, des caractères avec SHIFT/ALT/CTRL. Je l'utilise en interne, mais il est facile de rendre ces fonctions accessibles à partir de Panoramic. Il faut juste le handle de l'objet Panoramic (ou autre objet externe) auquel il faut l'envoyer.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 7:57

En voyant ce post: Nouvel événement, j'ai pensé à cela. Mais le Handle d'un objet, c'est pour quoi?

Je ne voyais pas si haut, sinon il y a beaucoup de chose à faire, et Panoramic deviendrait aussi un language de script. Je pensais à la possibilité d'envoi de caractères, ainsi si on envoit par programme: <CTRL A> et <CTRLC>, on copie le contenu de l'objet ayant le focus, etc... Avec les clics et les envois de caractères, je suis intervenu sur l'éditeur de Panoramic. Par contre là pour cacher les icônes, ou pour écrire dans les onglets, il faut le handle, et ceci est autre chose. Avec <ALT>, on accède au menu.

Une simple réflexion!
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 9:20

Techniquement, les routines ont besoin du handle pour cibler l'objet visé.

Si'il devait s"agir uniquement de l'objet ayant le focus, je peux trouver el handle automatiquement.

Mais c'est restrictif. Dans ce cas, on s'interdit d'envoyer des touches à d'autres objets sans aavoir besoin de changer le focus actuel, comme par exemple un objet caché par HIDE ou une autre form n'ayant pas le focus.

Mais je peux très bien faire deux jeux de fonctions;
- un jeu utilisant sustématiquement l'objet ayant le focus
- un jeu utilisant l'objet dont le handle est passé en paramètre
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 10:10

C'est une sugestion, non une demande. A toi de voir si ça t'intéresse. Pour le focus, sur un objet Panoramic, il n'est pas dure de mettre le focus sur ce qui nous intéresse. Je ne peux pas donner maintenant un exemple, je sais qu'à un moment j'ai eu besoin de ceci mais j'ai plus souvenir sur quoi.

Ainsi par programme, on met le focus sur un objet, puis en exemple <CTRL A> puis <ctrl C> ou autre, on traite, on continu. Mais ce n'ai pas une commande, c'est une réflexion.

Vois-tu, si je voulais faire une commande, j'irais à fond (ne me prends pas à la lettre, j'ai d'ailleurs pas de programme en vue pour cela):
Récupérer le handle des objets
le clavier: envoyer les touches comme pour envoyer les mots de passe
intégrer les objets ayant le handle, avec le transfert de donnée
Agir sur les ports inp ET out

Après on fait des robots.
Ce serait marrant que ce soir tu nous présentes cela dans KGF, tu pourrais prendre la relève du révérend Sun Myung Moon qui est mourant à Saïgon! Very Happy
Revenir en haut Aller en bas
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 14:27

Je pense à une chose. Est-ce que tu as un outils qui te permette de connaitre le handle, le type d'objet d'une forme, et les caractéristiques? Dans la négative, es-tu intéressé?
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 15:30

Panoramic le fait déjà. La fonction HANDLE(n) donne le handle de l'objet n pour presque tous les objets de Panoramic (saus pour ceux pour lesquels la notion de handle n'a pas de sens). Et la fonction OPJECT_TYPE(n) donne le type de l'objet numéro n.

Donc, disons que l'objet 20 a le focus. Avec une fonction envoyant un caractère systématiquement à l'objet ayant le focus, l'objet 20 recevra alors le caractère. Mais si tu veux envoyer un caractère à l'objet 25 tout en gardant le focus sur l'objet 20, il te faut une fonction à laquelle tu passes HANDLE(25) en paramètre, en plus du caractère à envoyer.

A quoi ça sert ? Tu peux par exemple saisir du texte par SCAN_CODE, et envoyer certains de ces caractères dans l'EDIT, après contrôle et formattage, et envoyer toutes les frappes dans un DLIST qui servirait de trace de saisie, par exemple. En tout cas, cela permettrait de ne pas jongler en permanence avec les commandes SET_FOCUS.

En fait, on peut se contenter d'une seule fonction, à laquelle on passe 0 à la place du handle s'il s'agit de l'objet ayant le focus:
Code:

res% = dll_call5("SendKey",hndle%,caract%,shift%,ctrl%,alt%)
avec shift%, ctrl% et alt% étant soit 0 pour une touche normale, soit 1 pour une touche avec le modificateur correspondant. Ainsi l'appel suivant:
Code:
res% = dll_call5("SendKey",0,asc("S"),0,0,1)
enverrait un Alt-S à l'objet ayant le focus. Est-ce que cette conception correspond à ton idée ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 18:17

Je répond rapidement. Je crois qu'on ne s'est pas trop compris.
Je regarderai de plus près ta réponse à un autre moment, et voir comment j'ai formulé ma question. Je ne me détourne pas de trop pour l'instant car j'ai toutes une séries de modification à faire, à différents endroits, et je dois garder le fil.
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyDim 2 Sep 2012 - 18:41

OK, je vais attendre jusqu'à ce qu'on ait tous les deux les idées un peu plus claires par rapport à ce sujet.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 0:02

Bon, les choses se sont passées autrement, j'ai reçu du monde imprévu. Cela ne me facilite pas les choses.

Je viens de relire, et finalement on est plus proche que j'avais compris. En parlant de Panoramioc qui le faisait déjà, et scancode, j'ai cru que tu parlais de lire les caractères.
Citation :

En fait, on peut se contenter d'une seule fonction, à laquelle on passe 0 à la place du handle s'il s'agit de l'objet ayant le focus:
Code:

res% = dll_call5("SendKey",hndle%,caract%,shift%,ctrl%,alt%)

avec shift%, ctrl% et alt% étant soit 0 pour une touche normale, soit 1 pour une touche avec le modificateur correspondant. Ainsi l'appel suivant:
Code:
res% = dll_call5("SendKey",0,asc("S"),0,0,1)

enverrait un Alt-S à l'objet ayant le focus
Cela me paraît une bonne idée.

Prenons 2 exemples (im)probables pour voir:
1) on ouvre la calculatrice, et la fonction envoie les caractères en remplacement de l'appui, ou le clic sur les touches. Je sais que c'est un exemple inutile, mais c'est pour voir si on comprend les choses de la même façon.

2) On a internet d'ouvert, et à intervalle régulier on veut envoyer des clics à tel emplacement, et des touches clavier de façon autonome. Si ce que tu préconises fait ces deux choses-là, on peut faire plein de choses.

Une idée tout de suite: On a du texte à traduire. Par boucle, on prend le texte, on le place dans le navigateur, et on récupère la traduction. On fait en quelque sorte un robot, je crois que le mot convient.

Je pense que les exemples sont bons. En Panoramic, aussi, je n'ai pas réussi à envoyer il y a quelque temps une touche <CTRL> ou <ALT> je ne sais plus en même temps qu'un caractère. Donc même ce cas là est bon à traiter.
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 0:33

Tous les cas que tu cites, sont couverts par la fonction que j'imagine. En fait, je fais déjà exactement ça, mais de façon interne, sans que cela soit accessible à l'extérieur de la DLL. Il ne me reste plus qu'à réaliser une légère interface autour, et le tour sera joué.

Et je dirai même plus: j'ai une fonction interne qui peut envoyer tout un texte (un mot, une ligne, même le contenu de tout un mémo) exactement de la même manière, vers l'objet ayant le focus ou vers un objet désigné par son handle.

Je vais rendre les deux types de fonctions accessibles à Panoramic.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Nouvel événement Empty
MessageSujet: re   Nouvel événement EmptyLun 3 Sep 2012 - 1:11

J'intercepte vôtre conversation, et je m'invite sur deux petites lignes ... Laughing

Klaus,Si je comprends tout ce que tu dis...

si j'ai une fenêtre internet ouverte avec, par exemple un formulaire dont un edit à remplir a le focus
et de l'autre on va dire un prog panoramic en cliquant sur un bouton du prog, on peut intercepter le handle de l'edit du formulaire de la page web et lui envoyer
un texte pour le remplir...
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 Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 1:35

Je profite de la conversation pour signaler une bricole: dans KGF_HLP.rtf,
page 5 il manque un p à impérativement
page 6, il manque un S dans Sommaire des fonctions de KGF.dll
Un petit peu en dessous, il manque un c dans Interception des clics sur un objet
Page 10 éllipse => ellipse
Page 10 region => région
Page 11 restraint => restreint
Page 13 Clis => Clics
Page 13 intecpetion => interception
Page 13: annluer => annuler
Page 14 pemettent => permettent
Page 15 creéation => création

Bon il est tard, je m’arrête là Wink A demain
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 8:20

Bonjour,

Dans le même style que Jicehel :
Dans KGF.HLP
La description de "AttachWindowToWindow" n'est pas correcte: on a la description de "SetCloseBox" à la place... Wink

Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 8:24

Citation :
Klaus,Si je comprends tout ce que tu dis...

si j'ai une fenêtre internet ouverte avec, par exemple un formulaire dont un edit à remplir a le focus
et de l'autre on va dire un prog panoramic en cliquant sur un bouton du prog, on peut intercepter le handle de l'edit du formulaire de la page web et lui envoyer
un texte pour le remplir...
Tout à fait, à la différence que d'après les explication de Klaus, si tu as le focus, tu n'auras pas besoin du handle.
Le problème est de connaitre le handle, et là pour un formulaire, il faudrait avoir quelque chose qui puisse le donner. Dans le cas d'une fenêtre ouverte il faut placer le curseur sur la partie à atteindre, et faire un clic soit physiquement, soir par la dll. Et on a le focus sur la partie recherché.
Klaus a écrit:

En fait, on peut se contenter d'une seule fonction, à laquelle on passe 0 à la place du handle s'il s'agit de l'objet ayant le focus:
Je crois qu'on déborde sur le post de Nardo avec ON_HOVER, mais je ne pensais pas en faisant la parenthèse, que le sujet continurais la dessus.
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 10:23

Un grand MERCI à Jicehel et Nardo 26 pour le signalement des anomalies dans KGF.hlp. C'est corrigé. C'est ainsi que ça peut évoluer !

@YGeronimi et Cosmos70:
C'est un petit peu plus tordu que ça. Il faut garder à l'esprit les points suivants:

1. la notion de "objet ayant le focus" ne s'applique qu'à l'intérieur de l'application Panoramic elle-même. Cela peut être une zone EDIT dans n'importe quelle form, un bouton, etc, mais toujours dans le programme lui-même. LA TOUCHE SERA ALORS ENVOYEE A CET OBJET.

2. dès qu'il s'agit d'un autre programme (browser, notepad, calculatrice, un autre programme Panoramic, ...), il faut IMPERATIVEMENT passer par le handle du programme. Et là, on distingue 2 cas:
2.1. on a le handle du programme lui-même (obtenu par la fonction HANDLE_PROGRAM par exemple) ==> la touche sera envoyé à ce programme, et Windows détermine comment cette action est gérée ensuite. En général, par des liens successifs gérés par Windows, la touche arrive à l'objet ayant le focus dans ce programme, MEME SI CE N'EST PAS LE PROGRAMME AYANT LE FOCUS ACTUEL !
2.2. ona le handle d'un objet dans une des fenêtres du programme (c'est le cas des routines de messagerie IPCxxx) ==> LA TOUCHE SERA ENVOYEE DIRECTEMENT A CET OBJET.

3. La simulation d'un clic de souris sur un programme externe CHANGE LE FOCUS DANS LE PROGRAMME EXTERNE, MAIS PAS DANS LE PROGRAMME PANORAMIC. Il faudra quand-même passer par le handle.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 12:20

Je ne sais pas comment cela marche avec Delphi. Avec un AutoIt, un programme simple pour tester:


Code:

local $w=500,$t=100

Run("F:\QtWeb\QtWeb\QtWeb.exe"); ouverture du navigateur
Sleep(10000)               ; attendre l'ouverture (méthode simplifiée)
MouseClick("left",$w,$t,5)      ; on fait un clic à 500,100
Sleep(2000)                  ; on attend 2 secondes avant de fermer ce programme
cela donne (e, limitant la zone de l'image:

Nouvel événement Saisie11

La souris se place dans la fenêtre à 500,100, sur un icône. Je rajoute que si j'avais du texte sur une zone d'édition, il aurait été incorporé. Il faut d'ailleurs faire gaffe!. Si la souris est mal programmée, et qu'on ait cliqué sur Panoramic par exemple, le texte serait dans Panoramic. Il y a aussi des précautions à prendre.
Revenir en haut Aller en bas
Yannick




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

Nouvel événement Empty
MessageSujet: re   Nouvel événement EmptyLun 3 Sep 2012 - 13:29

Je vais attendre de voir le résultat de vos réflexions... study
Revenir en haut Aller en bas
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 14:16

Oui, je suis un peu surpris aussi, il faut attendre les testes de Klaus, car si on envoi un clic sur un endroit de l'écran, cete endroit a le focus.
Ensuite, si c'est vraiment une fonction send qui simule l'envoi d'un caractère, le caractère va là où le curseur se trouve. Attendons!

Mais avec la rapidité qu'a Klaus pour résoudre les problèmes. Il n'est pas comme Jack qui ne bénéficie pas du même temps pour Panoramic. Pour moi ce n'était pas une demande, mais une curiosité. (pour l'instant, car l'occasion fait le laron!)
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 Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 14:29

C'est vrai que si ça marche Cosmos, je pense qu'Auto-It n'aura plus beaucoup d’intérêts pour toi ... Tu pourra tout faire avec le combo Panoramic + DLL
Revenir en haut Aller en bas
Klaus

Klaus


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

Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyLun 3 Sep 2012 - 15:02

Pas tout à fait, Cosmos70. Chaque programme garde la référence de son objet ayant le focus. La preuve:

Démarre un programme Panoramic, place le curseur dans un EDIT et commence à saisir. Il est clair que cet EDIT a le focus.

Maintenant, lance un autre programme quelconque pour recouvrir le programme Panoramic. Notepad par exemple. Il est tout aussi clair que c'est Notepad qui a maintenant le focus.

Qu'est-il advenu du focus sur le programme Panoramic ? Et bien, il est toujours d'actualité, mais pour le programme Panoramic seulement. Si tu arrêtes Notepad, le programma Panoramic caché en-dessous réapparaît, et comme par magie, le curseur est bien dans l'EDIT à la bonne position ! Et toute frappe au clavier continue à aller dans cet objet, sans qu'on ait besoin de repositionner la souris et cliquer dedans.

Il faut bien distinguer deux notions: la notion de "focus" et la notion "foreground". La fenêtre étant placée en foreground (par-dessus toutes les autres) recevra automatiquement toutes les touches frappées. Si - et seulement si - cette fenêtre a un objet capable de recevoir des frappes du clavier, et si cet objet a le focus, alors la fenêtre lui transmettra les caractères frappées. Sinon, ils sont perdus !

Pour mettre cela en évidence, crée un programme Panoramic avec des ALPHA et des BUTTON, par exemple. Tu cliques sur un bouton, et tu verras un encadré pointillé qui apparaît sur ce bouton. C'est maintenant lui qui a le focus. Tu peux frapper des choses au clavier - en pure perte.

Maintenant, tu ajoutes un EDIT à ce programme. A priori, il est susceptible de recevoir les touches. Mais clique sur un bouton, puis frappe des touches - encore aucune réaction ! Seulement après avoir cliqué dans le EDIT, tu peux frapper des touches qui seront reçues par le EDIT.

Ceci montre comment les touches dont transmises par Windows. De façon simplifiée, chaque évènement "touche" suit le chemin suivant:
1. Windows cherche la fenêtre "foreground" (celle qui est signalée comme fenêtre active dans la barre de tâches). Par "fenêtre", on entend ici la fenêtre principale (form 0) du programme en question.
2. Windows lui envoie le message avec ce caractère
3. le programme détermine quelle est sa propre fenêtre active (form 0, ou une autre form), et si ce n'est pas ce qui correspond à la form 0, le programme transmet le message à cette form.
4. la form destinataire regarde quel objet a le focus. Si aucun objet n'a le focus, le message est simplement écarté, et tout s'arrête.
5. la form destinataire transmet alors le message à l'objet ayant le focus.
6. l'objet destinataire vérifie s'il est capable de recevoir un caractère. Si ce n'est pas le cas (un bouton, un CHECK, un OPTION, ...), il écarte simplement le message, et tout s'arrête.
7. si l'objet destinataire est capable de recevoir le caractère, alors il est pros en charge selon l'état de l'objet, le caractère envoyé, etc.

Et à travers toute cette chaîne, j'ai employé plusieurs fois le terme "envoyer". Ceci ce fait par un mécanisme de "messages" Windows qui sont TOUJOURS adressés à un handle. Sans exception. Et ces messages sont placés dans une file d'attente propre à chaque objet (programme, form, container, objet, ...). Et chaque objet traite les messages arrivant dans sa propre file d'attente, les gère localement et les élimine, ou les réexpédie à un autre destinataire via un autre handle.

Bon, et maintenant, j'en arrive à mes routines.

J'ai deux ensembles de routines.

Le premier n'a pas besoin qu'on lui fournisse un handle. Ses fonctions le trouvent elles-mêmes. Il s'agit de fonctions dont la cible est OBLIGATOIREMENT l'objet ayant le focus à l'intéreur du MEME programme. Il y a un mécanisme spécial dans Windows que j'exploite dans cet objectif. Et je peux ainsi envoyer un caractère à un EDIT du même progremme, MEME si le programme est recouvert à l'écran par un autre, comme Notepad par exemple ! Le caractère n'ira PAS dans le Notepad, mais bien da s le EDIT du programme Panoramic émetteur.

Le second ensemble a besoin d'un handle, soit d'une form, soit d'un objet. Et ces fonctions vont alors courtcircuiter une partie du mécanisme de dispatching des messages, en plaçant le message DIRECTEMENT dans la file d'attente de l'objet visé par le handle. Comme une lettre envoyé par un coursier et remise en main propre. Cela marche évidemment aussi pour l'objet ayant le focus dans le même programme, mais cela marche pour n'importe quel destinataire. Il suffit de connaitre le handle. Si le handle est celui d'une zone de saisie (ce qui est peu probable dans le cas d'un programme externe car on ne peut pas le connaître facilement), le caractère sera transmis directement à cette zone. Mais si plus probablement le handle est celui de la form principale d'un autre programme, le caractère sera envoyé à cette form, et c'est elle qui aura alors la responsabilité de poursuivre le dispatching selon l'algorithme décrit ci-dessus. C'est comme une lettre remise par coursier à la réception d'un grand hotel, pour un client de l'hotel.

Oufffff ! Je sais que j'ai été long, et j'espère avoir apporté un peu d'éclairage au lieu de tout embrouiller. En tout cas, Cosmos70, j'ai parfaitement saisi ce que tu suggérais, et il y aura prochainement les deux jeux de fonctions dans KGF.dll, avec une doc explicite et des exemples.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement EmptyMar 4 Sep 2012 - 9:30

Jicehel a écrit:
C'est vrai que si ça marche Cosmos, je pense qu'Auto-It n'aura plus beaucoup d’intérêts pour toi ... Tu pourra tout faire avec le combo Panoramic + DLL
Bonjour, J'avais pas vu ton message.

En fait moins j'utilise Auto It, mieux je me porte. C'est d'ailleurs la raison pour laquelle j'oriente Klaus (ou un autre) à remplacer mes codes Auto It. J'avoue: j'aime pas Auto It, et s'il y en a qui l'utilisent et qui me lisent, je suis désolé.
Mais AutoIt est un language de script, et permet de faire plein de choses, dont certaines, je n'arriverai jamais à faire. Il a un language proche du basic, avec des fonctions pas toujours évidentes à comprendre, et je dois dire que Panoramic sera loin de pouvoir faire ce que fait AutoIt dans sa spécialité. Ainsi, va essayer d'inclure comme je l'ai fait un RichEdit dans la forme Panoramique, et de pouvoir agir dessus. Mais il y en a des tas d'autres. J'espère seulement ne pas en avoir besoin. Cela dit, Panoramic a d'autres atouts qu'AutoIt n'a pas. Et tu les connais.
Revenir en haut Aller en bas
Contenu sponsorisé





Nouvel événement Empty
MessageSujet: Re: Nouvel événement   Nouvel événement Empty

Revenir en haut Aller en bas
 
Nouvel événement
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Nouvel évènement pour FORM: ON_SHOW
» Evènement USER_EVENT
» Déclarer une routine évènement par son nom
» Appel d'événement en dehors du END
» Déclarer une routine évènement par son nom

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: