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 |
|
|
| hauteur effective de l'intérieur d'une fenêtre | |
| | |
Auteur | Message |
---|
Invité Invité
| Sujet: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 19:42 | |
| Je dois devenir gaga, car je crois que le sujet a déjà été vu. Mais je ne trouve pas le résultat. Normalement selon la résolution que l'on choisi, le bandeau s'agrandi en choisissant une résolution plus faible. Ca me revient, il faut faire la différence entre border_small ou normal et hide. Il faut encore trouver le bord du bas. J'ai regarder KGF si je trouvais mon bonheur. J'ai seulement trouvé ceci: - Code:
-
res% = DLL_call5("GetFormMetrics",hnd%,adr(gauche%),adr(haut%),adr(largeur%),adr(hauteur%)) Le résultat est l'extérieur de la fenêtre, et non l'intérieur. Ai-je loupé une dll qui donne ces données. Il est vrai que je connais la hauteur, mais je ne trouve pas sans faire des tas de manipulations, pour justement connaitre cette hauteur par programme. Ceci est utile pour pouvoir déplacer la fenêtre pour atteindre les objets selon le principe des ancres HTML. Nécessité de faire les calculs pour savoir où cliquer: page entière, ou ligne, en bas ou en haut. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 19:50 | |
| Pour avoir la taille intérieur, tu fais ceci: - Code:
-
picture 10 : fuill_space 10 print "Largeur intérieure="+str$(width(10)) print "Hauteur intérieure="+str$(height(10))
Et en faisant la soustraction entre les dimensions extérieures et intérieures, tu as le diamètre des bordures, sachant que dans tous les cas, les bordures droites, gauches eu du bas sont identiques. La bordure du haut est différente. Donc: bordure_gauche_bas_droite = (largeur_extérieur-largeur_intérieure)/2 bordure_haute = hauteur_extérieure-hauteur_intérieure-bordure_gauche-bas_droite Voilà tes mesures. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 20:02 | |
| Voir sur mon site également dans "Divers \ Astuces" ... | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 23:17 | |
| Bon je comprend, J'aurai préféré une solution plus élégante que de mettre un memo plein écran sur un programme de 220 objets, et plus. Merci je ferais avec.
@Nardo J'ai vu des dll similaires à celles de Klaus, mais rien qu'en à la dimension interne d'une fenêtre
|
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 23:21 | |
| Pour le mémo de "mesure", tu le déclares au début et tu fais un HIDE directement dessus. IUl restera invisible, mais il donnera néanmoins les bonnes dimensions. | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mar 30 Oct 2012 - 23:36 | |
| Merci Klaus. Je réfléchi mal, taper du code, et regarder la télé! J'ai pas l'habitude. |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 0:06 | |
| Je viens de faire l'essai. Alors d'abord il faut mettre à show et refaire full_space du memo. Le résultat n'est pas valable dans tous les cas.. Si on laisse à hide, la hauteur ne bouge pas. Si on fait show N puis full_space N, et hide N, on obtient la hauteur total du memo, et j'ai en exemple: 2027 pour 900. Si je mets height N, screen_y, j'obtiens 900, sauf que si je descends le bord haut de la fenêtre, j'ai encore 900. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 0:48 | |
| - cosmos70 a écrit:
- @Nardo J'ai vu des dll similaires à celles de Klaus, mais rien qu'en à la dimension interne d'une fenêtre
Hello cosmos, voir ici , le 1er code.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 1:03 | |
| Pourrais-je corriger le premier code ? - Code:
-
width 0, 500 : height 0, 100 dim caption_height%, border_width% picture 1 : full_space 1 caption_height% = 100 - height(1) border_width% = 500 - width(1) delete 1 alpha 1: caption 1,"Hauteur de la barre de titre :"+str$(caption_height%)+" pixels" : top 1,20 alpha 2: caption 2,"Largeur des bordures :"+str$(border_width%)+" pixels" : top 2,40 END devient - Code:
-
width 0, 500 : height 0, 100 dim caption_height%, border_width% picture 1 : full_space 1 border_width% = (500 - width(1)=/2 caption_height% = 100 - height(1) - border_width% delete 1 alpha 1: caption 1,"Hauteur de la barre de titre :"+str$(caption_height%)+" pixels" : top 1,20 alpha 2: caption 2,"Largeur des bordures :"+str$(border_width%)+" pixels" : top 2,40 END | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 1:11 | |
| Merci, je n'avais pas vu. Mais j'ai toujours le même problème. Dans ton exemple tu définis une hauteur de 100 pour la fenêtre, et là on peut déterminer les dimensions. Mais une fenêtre full_space, en ajoutant des objets, la hauteur s'allonge, et même si on peut savoir la hauteur de la forme , lorsqu'on déplace celle-ci, cela devient problématique. Le top de la fenêtre lorsqu'il y a dépassement et selon la position de l'ascenseurSi cela doit-être possible. Il y a des valeurs à relever au départ, pour s'en resservir après. Merci, et On se croise Klaus, et je regarderais plus profondément demain. Merci aussi. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 1:12 | |
| Merci Klaus ! Oui en effet il faut diviser par 2 le border... Je m'en vais corriger ça de suite ! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 1:16 | |
| @cosmos : oui tu stockes le résultat dans des variables que tu considères par la suite comme des constantes... donc tu peux faire ensuite tous les calculs que tu veux quelque soit la dimension de ta fenêtre... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 1:22 | |
| Tu peux aussi, au démarrage de ton programme, faire ce test sur une fenêtre avec border_normal et une autre avec border_small. Tu gardes ces deux jeux de résultats dans des variables définies au début, puis tu supprimes ces 2 fenêtres (que tu peux d'ailleurs cacher immédiatement par HIDE, juste après leur création). Tu a ainsi, comme le dit Nardo, des variables considérées comme constantes donnant les dimensions en fonction du type de bordure. Il va sans dire que dans le cas de border_hide, les épaisseurs des bordures et de la barre de tire sont zéro ! | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Mer 31 Oct 2012 - 7:33 | |
| Je vous remercie. J'en ai eu conscience dans le dernier post, et c'est la raison pour laquelle j'ai barré une partie du texte. En réalité lorsque j'ai ouvert ce post, j'étais persuadé qu'une dll avait été faite. J'ai donc pas cherché plus loin, seulement cette dll, en me demandant où elle était. |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Ven 2 Nov 2012 - 20:56 | |
| J'essaye de retourner sur Pagiciel, et revoir les problèmes de côte, mais je suis surpris du résultat: - Code:
-
dll_on "c:\PANO\DLL\kgf.dll" determine_marge(1,2)
end sub determine_marge(obj1%,obj2%)
dim_local s$ ,x%,y%,h%,x2%,y2%,w%,h2% ,w2% ,a%,r%,v%,b% ,x0%,y0%,i% ,res%, m_cote%, m_haut%, m_bas% ,t$ t$=chr$(13) form obj1%:full_space obj1% : command_target_is obj1% :' hide obj1% main_menu obj2%+1:sub_menu obj2%+2:parent obj2%+2,obj2%+1:caption obj2%+2,"teste" memo obj2%:full_space obj2% :height obj2%,2000
res% = dll_call5("GetFormMetrics",handle(obj1%),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(obj2%),adr(x2%),adr(y2%),adr(w2%),adr(h2%)) m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% s$ = "Marges gauche/droite: "+str$(m_cote%)+t$ s$ = s$+"Marge haute: "+str$(m_haut%)+t$ s$ = s$+"Marge basse: "+str$(m_bas%)+t$ message s$
s$="" x0% = left(obj1%) + width(obj1%)-m_cote% - m_cote%+2 :' -28 y0% = m_haut% :' POURQUOI? N'EST-IL PAS AU NIVEAU DU BAS DU MENU? ' x0% = left(115)+3 ' y0% = 1 i% = dll_call2("MouseLeftClick",x0%, y0%) message "regarder la souris avant de la bouger"
command_target_is 0 delete obj2%:delete obj1% dll_off end_sub Curieux la position de la souris verticalement. Normalement elle devrait être au niveau bas du menu. J'ai recopier la partie de pagiciel concernée et adapter pour le forum+ |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Ven 2 Nov 2012 - 21:58 | |
| Pour moi, le curseur se positionne bien. J'ai modifié ton source avec un clic simulé en plus en (700,100), puis un message supplémentaire qui donne les coordonnées de (x0%,y0%). Et le résultat me semble cohérent: - Code:
-
dll_on "kgf.dll" determine_marge(1,2)
end sub determine_marge(obj1%,obj2%)
dim_local s$ ,x%,y%,h%,x2%,y2%,w%,h2% ,w2% ,a%,r%,v%,b% ,x0%,y0%,i% ,res%, m_cote%, m_haut%, m_bas% ,t$ t$=chr$(13) form obj1%:full_space obj1% : command_target_is obj1% :' hide obj1% main_menu obj2%+1:sub_menu obj2%+2:parent obj2%+2,obj2%+1:caption obj2%+2,"teste" memo obj2%:full_space obj2% :height obj2%,2000
res% = dll_call5("GetFormMetrics",handle(obj1%),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(obj2%),adr(x2%),adr(y2%),adr(w2%),adr(h2%))
m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% s$ = "Marges gauche/droite: "+str$(m_cote%)+t$ s$ = s$+"Marge haute: "+str$(m_haut%)+t$ s$ = s$+"Marge basse: "+str$(m_bas%)+t$ message s$
s$="" x0% = left(obj1%) + width(obj1%)-m_cote% - m_cote%+2 :' -28 y0% = m_haut% :' POURQUOI? N'EST-IL PAS AU NIVEAU DU BAS DU MENU? ' x0% = left(115)+3 ' y0% = 1 i% = dll_call2("MouseLeftClick", 700,100) s$ = "Curseur actuellement en (700,100)"+chr$(13)+chr$(10) s$ = s$ + "Il va aller en "+str$(x0%)+" "+str$(y0%) message s$ i% = dll_call2("MouseLeftClick",x0%, y0%) message "regarder la souris avant de la bouger"
command_target_is 0 delete obj2%:delete obj1% dll_off
end_sub | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 0:11 | |
| Comment tu fais pour savoir si tu cliques sur la forme ou sur le memo? J'aurai plutôt pensé qu'on cliquait sur la forme. Si c'est le cas, ce n'est pas bon. Je ne comprend plus, je prend les mesures sur le memo, mais je clique sur le curseur de la forme. Est-ce logique?
Edit: Le point 0,0 pour toi c'est en dessous du menu de la fenêtre? |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 0:25 | |
| Regarde cette version: - Code:
-
dll_on "kgf.dll" determine_marge(1,2)
end sub determine_marge(obj1%,obj2%)
dim_local s$ ,x%,y%,h%,x2%,y2%,w%,h2% ,w2% ,a%,r%,v%,b% ,x0%,y0%,i% ,res%, m_cote%, m_haut%, m_bas% ,t$ t$=chr$(13) form obj1%:full_space obj1% : command_target_is obj1% :' hide obj1% main_menu obj2%+1:sub_menu obj2%+2:parent obj2%+2,obj2%+1:caption obj2%+2,"teste" memo obj2%:full_space obj2% : height obj2%,2000
res% = dll_call5("GetFormMetrics",handle(obj1%),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(obj2%),adr(x2%),adr(y2%),adr(w2%),adr(h2%))
m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% s$ = "Marges gauche/droite: "+str$(m_cote%)+t$ s$ = s$+"Marge haute: "+str$(m_haut%)+t$ s$ = s$+"Marge basse: "+str$(m_bas%)+t$ message s$
s$="" x0% = left(obj1%) + width(obj1%)-m_cote% - m_cote%+2 -16/2 :' -28 y0% = m_haut% :' POURQUOI? N'EST-IL PAS AU NIVEAU DU BAS DU MENU? ' x0% = left(115)+3 ' y0% = 1 i% = dll_call2("MouseLeftClick",x0%, y0%) message "regarder la souris avant de la bouger"
command_target_is 0 delete obj2%:delete obj1% dll_off
end_sub J'ai enlevé la moitié de 16 (16 ou éventuellement 15 étant la largeur de l'ascenseur vertical). C'est nécessaire pour te positionner au milieu de l'ascenseur, et non pas à sa droite... | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 0:39 | |
| Bon, je vais faire avec. Moi je pensais que le 0,0 était le coin haut d'une fenêtre, et qu'il fallait rajouter la marge haute pour que le curseur soit juste au début du memo. Ce que je ne sais pas, c'est si l'ascenseur selon toutes les versions, a la même largeur. Je pense qu'il doit y avoir une différence selon la résolution. On doit pouvoir le voir par la largeur d'un memo, avant sur dimension verticale, et après. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 0:51 | |
| La fonction MouseLeftClick utilise les coordonnées relatives de la fenêtre active. Tu es donc automatiquement à l'intérieur de la fenêtre si tu utilises (0,0). L'ascenseur est considéré comme étant à l'intérieur de la fenêtre active, et il se place systématiquement au-dessus de tout objet qui pourrait éventuellement déborder vers la droite ou vers le bas.
Ton calcul de largeur était bon. Simplement, l'ascenseur ne faisait pas partie du mémo, mais de la form, car il est provoqué par la grande hauteur de l'objet 2 (2000 pixels). Et la fonction GetFormMetrics retourne les informations concernant l'objet entier, et dans le cas d'une form, cela inclut l'ascenseur.
Donc, si tu sais qu'il y a un ascenseur vertical, il faut déduire 16 pixels (sous XP) de la largeur pour tomber à l'intérieur de la zone utile de la fenêtre, ou dans ton cas, dans le mémo. Pour viser plus précisément l'ascenseur, il faut retirer 16/2 = 8 pixels.
Tu peux déterminer la largeur précise de l'ascenseur chez toi en retirant 16 au lieu de 16/2, et tu devrais tomber juste sur la limite de l'ascenseur. Si ce n'est pas le cas, ajuste entre 12 et 20 et tu trouveras la bonne mesure, et il te suffira de diviser celle-ci par 2 pour tomber au milieu. | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 1:04 | |
| Merci Klaus, mais c'est pas le memo qui m'intéresse, c'est l'ascenseur de la forme. Si je veux faire des ancres pour atteindre tel ou tel objet, c'est en cliquant sur l'ascenseur de la fenêtre, soit la flèche pour un déplacement de ligne, ou sur le curseur, pour un déplacement de page, que je fais des clics. Si tu as vu comment fonctionne Pagiciel, tu dois comprendre le principe que je veux utiliser.
Je me donne beaucoup de mal pour être précis dans les clics, dans le cas où ce programme intéresse quelqu'un, car personnellement je pourrai être plus directe dans le code. Surement que je me donne du mal pour rien, mais une fois le principe acquit, la partie du code pourra être repris ensuite pour autre chose. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 1:07 | |
| Alors, ça marchera comme ça: s'il y a ascenseur vertical, alors il faut enlever 16/2 pixels à droite pour tomber au milieu de l'ascenseur. Et tu sauras qu'il y a ascenseur si height(no_form)>screen_y. | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 1:16 | |
| Il faudrait que tu corriges ta doc, concernant : i% = dll_call2("MouseLeftClick",x0%, y0%) tu mets que cela donne la position actuelle en haut de l'écran , alors qu'on y fait un clic. J'ai eu du mal de comprendre au début. Bonsoir, et merci. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 1:37 | |
| La doc dit: Cela montre clairement qu'il y a d'abord un positionnement, puis un clic. | |
| | | Invité Invité
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre Sam 3 Nov 2012 - 1:53 | |
| J'ai retéléchargé aujourd'hui, mais j'ai pas vérifié la doc, mais pour celle du 6 octobre je crois, sans faire de copie d'écran, mais de texte: - Code:
-
MousePosition Retour
Cette routine place la souris en position (x%,y%) en coordonnées de la form en pixels. L'appel a le format suivant:
x%, y% coordonnées de l'endroit de positionnement du curseur
res% toujours 0
Exemple: dim res%
res% = dll_call2("MousePosition",210,45)
Donc si tu as corrigé, je n'est rien dit. Par contre j'ai vu ceci: - Citation :
- Notes d'installation du syst�me d'aide KGF.hlp:
Il faut copier dans le r�pertoire de votre choix, les fichiers suivants: KGF.HLP KGF.GID KGF.CNT
Les deux premiers sont suffisants pour une utilisation manuelle. Pour une utilisation � partir d'un programme Panoramic via KGF.dll, il faut �galement le 3�me fichier Mais le premier je ne le vois pas |
| | | Contenu sponsorisé
| Sujet: Re: hauteur effective de l'intérieur d'une fenêtre | |
| |
| | | | hauteur effective de l'intérieur d'une fenêtre | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |