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 |
|
|
| Atteindre un objet dans une grande fenêtre | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Atteindre un objet dans une grande fenêtre Jeu 8 Nov 2012 - 19:50 | |
| Je mets une démo montrant la possibilité d'atteindre un objet quelconque (ici des memo), parmi toute une série d'autre, dans une grande fenêtre. Dans le menu, il y a une partie contrôle afin de voir si les clics se font à la bonne place, selon la résolution de l'écran, ou de Windows. Ensuite dans le menu "Atteindre", en cliquant sur l'un des items, on doit atteindre le bon objet. - Code:
-
' teste scroll de la fenêtre label menu , page_bas,ligne_bas,page_haut,ligne_haut , ecran dim handle% , InfoMini%,InfoMaxi%,InfoPosi%,hauteur% dim a%, g%(20,1) , clic% ,t% , obj% ,xx%,yy%,res%
dll_on "C:\PANO\DLL\KGF.dll" : width 0,630
main_menu 1:sub_menu 2:parent 2,1:caption 2,"Atteindre" ' d'abord remplir la fenêtre d'objet memo 3:height 3,1000:item_add 3,"MEMO 3":for a%=1 to 50:item_add 3,str$(a%)+":memo 3":next a%:g%(3,0)=top(3):g%(3,1)=g%(3,0)+height(3)+10 sub_menu 4:parent 4,2:caption 4,"memo 3" :on_click 4,menu
memo 5:height 5,1000:item_add 5,"MEMO 5":top 5,g%(3,1):for a%=1 to 50:item_add 5,str$(a%)+":memo 5":next a% :g%(5,0)=g%(3,1):g%(5,1)=g%(5,0)+height(5)+10 sub_menu 6:parent 6,2:caption 6,"memo 5" :on_click 6,menu
memo 7:height 7,1000:item_add 7,"MEMO 7":top 7,g%(5,1):for a%=1 to 50:item_add 7,str$(a%)+":memo 7":next a% :g%(7,0)=g%(5,1):g%(7,1)=g%(7,0)+height(7)+10 sub_menu 8:parent 8,2:caption 8,"memo 7" :on_click 8,menu
memo 9:height 9,1000:item_add 9,"MEMO 9":top 9,g%(7,1):for a%=1 to 50:item_add 9,str$(a%)+":memo 9":next a% :g%(9,0)=g%(7,1):g%(9,1)=g%(9,0)+height(9)+10 sub_menu 10:parent 10,2:caption 10,"memo 9" :on_click 10,menu ' réglage sub_menu 11:parent 11,1:caption 11,"_______________controle" sub_menu 12:parent 12,11:caption 12,"page haut" :on_click 12,page_haut sub_menu 13:parent 13,11:caption 13,"ligne haut":on_click 13,ligne_haut sub_menu 14:parent 14,11:caption 14,"page bas" :on_click 14,page_bas sub_menu 15:parent 15,11:caption 15,"ligne bas" :on_click 15,ligne_bas sub_menu 16:parent 16,11:caption 16,"dans forme":on_click 16,ecran
form 19:left 19,950 : top 19,50 :height 19,500 memo 20:parent 20,19: full_space 20 rem finalement g%(x,1) ne sert pas ici end ' ======================================================================== menu: clic% = number_click item_add 20,"clic%="+str$(clic%) select clic% case 4 :obj%=3 case 6 :obj%=5 case 8 :obj%=7 case 10:obj%=9 end_select scroll() return ' ----- sub info()
handle%=handle(0) : xx%=left(0)+width(0)-30 res% = dll_call6("GetScrollBarInfo",handle%,1,adr(InfoMini%),adr(InfoMaxi%),adr(InfoPosi%),adr(hauteur%)) caption 0,"InfoMini%="+str$(InfoMini%)+" InfoMaxi%="+str$(InfoMaxi%)+" InfoPosi%="+str$(InfoPosi%)+" hauteur%="+str$(hauteur%)+" xx%="+str$(xx%) end_sub ' ========================= sub print_() item_add 20,"objet: "+str$(obj%) item_add 20, "g%(" + str$(obj%) + ",0)=" + str$(g%(obj%,0)) +" top("+str$(obj%)+")="+str$(top(obj%)) item_add 20,"--------------" end_sub ' ======================================================================== sub scroll() info() dim_local i% print_() if top(obj%)>10 if top(obj%) > hauteur% then scroll_bas() else if top(obj%) < hauteur%/2 then scroll_haut() end_if ' -----------ligne if top(obj%)>10 ' ligne bas yy%=hauteur%-10 repeat res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) print_() ' message "ligne bas until t%<5" if i%= t% then exit_repeat i%=t% until t% < 5 or scancode = 27 else if top(obj%)<5 ' ligne haut repeat res%= dll_call2("MouseLeftClick",xx%,5) :pause 1 t%=top(obj%) print_() ' message "ligne haut until t%>10 or t%=0" until t% > 10 or t%=0 or scancode = 27 end_if end_if end_sub
' ============================================================================== sub scroll_haut() a%=1 repeat ' l'objet est trop bas res%= dll_call2("MouseLeftClick",xx%,22) :pause 1 t%=top(obj%) print_() ' message "page haut until t% > 0" a%=a%+1:if a%=15 then exit_repeat :' normalement inutile until t% >= 0 or scancode = 27 end_sub
' ============================================================================== sub scroll_bas() yy%=hauteur%-25 a%=1 repeat ' l'objet est trop haut res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) print_() ' message "page bas: until t% < hauteur%/2 " a%=a%+1:if a%=8 then exit_repeat until t% < hauteur%/2 or scancode = 27 end_sub
' ====================testes partie réglage initiale=============== ecran: ' contrôle que le clic se fait bien dans l'écran info() :set_focus 0:pause 10 res%= dll_call2("MouseLeftClick",250,100) return ' ===================================================== page_haut: ' voir si clic en dessous de la flèche pour saut de page info() :set_focus 0 res%= dll_call2("MouseLeftClick",xx%,22) :pause 100 return ligne_haut: ' voir si le clic se fait sur la flèche du haut. info():set_focus 0 res%= dll_call2("MouseLeftClick",xx%,2) :pause 100 return page_bas: ' voir si le clic se fait au dessus de la flèche du bas. info() :yy%=hauteur%-25 res%= dll_call2("MouseLeftClick",xx%,yy%):wait 100 return ligne_bas: ' voir si le clic se fait au dessus de la flèche pour saut de page info() :yy%=hauteur%-10 res%= dll_call2("MouseLeftClick",xx%,yy%):pause 100 return
J'ai revu le système. Il n'est pas indispensable de remettre l'écran en haut pour pouvoir savoir où on se trouve. Selon le cas, on remonte, ou on descend pour atteindre l'objet. Mémoriser le top d'un objet n'a plus besoin d'être relevé, mais le programme étant commencé comme cela, j'ai laissé. (concerne g%() ) |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Atteindre un objet dans une grande fenêtre Ven 9 Nov 2012 - 0:11 | |
| | |
| | | Invité Invité
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 14:49 | |
| Je remets une version simplifié, plus facilement utilisable par Severin. - Code:
-
' teste scroll de la fenêtre label menu dim handle% , InfoMini%,InfoMaxi%,InfoPosi%,hauteur% dim a%, g%(20,1) , clic% ,t% , obj% ,xx%,yy%,res% ,x_orig% , y_orig%
dll_on "C:\PANO\DLL\KGF.dll" : width 0,630
main_menu 1:sub_menu 2:parent 2,1:caption 2,"Atteindre" ' d'abord remplir la fenêtre d'objet memo 3:height 3,1000:item_add 3,"MEMO 3":for a%=1 to 50:item_add 3,str$(a%)+":memo 3":next a% g%(3,0)=top(3):g%(3,1)=g%(3,0)+height(3)+10 sub_menu 4:parent 4,2:caption 4,"memo 3" :on_click 4,menu :' pour atteindre le memo 3
memo 5:height 5,1000:item_add 5,"MEMO 5":top 5,g%(3,1):for a%=1 to 50:item_add 5,str$(a%)+":memo 5":next a% g%(5,0)=g%(3,1):g%(5,1)=g%(5,0)+height(5)+10 sub_menu 6:parent 6,2:caption 6,"memo 5" :on_click 6,menu :' pour atteindre le memo 5
memo 7:height 7,1000:item_add 7,"MEMO 7":top 7,g%(5,1):for a%=1 to 50:item_add 7,str$(a%)+":memo 7":next a% g%(7,0)=g%(5,1):g%(7,1)=g%(7,0)+height(7)+10 sub_menu 8:parent 8,2:caption 8,"memo 7" :on_click 8,menu :' pour atteindre le memo 7
memo 9:height 9,1000:item_add 9,"MEMO 9":top 9,g%(7,1):for a%=1 to 50:item_add 9,str$(a%)+":memo 9":next a% g%(9,0)=g%(7,1):g%(9,1)=g%(9,0)+height(9)+10 sub_menu 10:parent 10,2:caption 10,"memo 9" :on_click 10,menu :' pour atteindre le memo 9 end ' ======================================================================== menu: clic% = number_click select clic% case 4 :obj%=3 :' clic sur le s/menu 4 pour atteindre le memo 3 case 6 :obj%=5 :' clic sur le s/menu 4 pour atteindre le memo 5 case 8 :obj%=7 :' clic sur le s/menu 4 pour atteindre le memo 7 case 10:obj%=9 :' clic sur le s/menu 4 pour atteindre le memo 9 end_select res% = dll_call2("GetAbsoluteMousePosition",adr(x_orig%),adr(y_orig%)) :' récupère la position au départ scroll() res% = dll_call2("MousePosition",x_orig%,10) :' remèt le curseur près du clic sur le menu return
' ======================================================================== sub scroll() handle%=handle(0) : xx%=left(0)+width(0)-30 res% = dll_call6("GetScrollBarInfo",handle%,1,adr(InfoMini%),adr(InfoMaxi%),adr(InfoPosi%),adr(hauteur%))
dim_local i% ' print_() if top(obj%)>10 if top(obj%) > hauteur% yy%=hauteur%-25 : a%=1 repeat ' l'objet est trop haut res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) : a%=a%+1:if a%=8 then exit_repeat until t% < hauteur%/2 or scancode = 27 end_if else if top(obj%) < hauteur%/2 : ' déplacement par PAGE a%=1 repeat ' l'objet est trop bas res%= dll_call2("MouseLeftClick",xx%,22) :pause 1 t%=top(obj%) : a%=a%+1 : if a%=15 then exit_repeat :' normalement inutile until t% >= 0 or scancode = 27 end_if end_if
' -----------ligne par ligne--------------- if top(obj%)>10 yy%=hauteur%-10 : ' ligne bas repeat res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) : if i%= t% then exit_repeat i%=t% until t% < 5 or scancode = 27 else if top(obj%)<5 : ' ligne haut repeat res%= dll_call2("MouseLeftClick",xx%,5) :pause 1 t%=top(obj%) until t% > 10 or t%=0 or scancode = 27 end_if end_if end_sub |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 15:33 | |
| @Cosmos70
Danke. Ich bin noch beim Übersetzen.
Frage: Kann ich die memo entfernen? Ich brauche nur den Kern für die Bar Vertikal und Horizontal, für eine Form.
Thank you. I'm still in translation.
question: Can I remove the memo? I just need the core for vertical and horizontal bar, for a mold.
Merci. Je suis toujours en traduction.
question: Puis-je supprimer le mémo? J'ai juste besoin de l'âme pour la barre verticale et horizontale, pour un moule.
| |
| | | Invité Invité
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 17:19 | |
| Je ne peux pas reprendre le programme maintenant. Si tu as des objets dans ta fenêtre à différente position dans celle-ci, tu peux t'en servir. On peut aussi faire un picture à HIDE qui a toute la hauteur de la fenêtre, qui sert de référence par rapport au top du picture. Si tu cliques en bas de l'ascenseur de la fenêtre, le top(picture) devient négatif. J'essayerai de regarder ce soir, malgré que je pensais continuer mon programme. exemple: - Code:
-
label controle picture 3:height 3,5000:hide 3 end controle: caption 0,top(3) return Tu fais l'essai de cliquer sur l'ascenseur, et de cliquer sur la fenêtre 0 pour voir le résultat. On peut reprendre le programme en se servant de cette méthode. @+ |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 18:13 | |
| @Cosmos70 Das Programm hat einen Fehler. Die Variablen x_orig% y_orig% sind nicht mit einem Wert gefüllt. Kannst du bitte die Variablen Prüfen ? Kanst du bitte auch die Variablen beschreiben ? @ Cosmos70 Le programme a un bug. les variables x_orig% y_orig% ne sont pas remplis avec une valeur. Pouvez-vous s'il vous plaît vérifier les balises? Vous pouvez répondre, s'il vous plaît également décrire les variables? - Code:
-
' Tests das Fenster scrollen ' teste scroll de la fenêtre label menu
dim handle% :' <--- dim InfoMini% :' <--- dim InfoMaxi% :' <--- dim InfoPosi% :' <--- dim hauteur% :' <---
dim a% :' <--- variable de comptage Zählvariable dim g%(20,1) :' <--- Forme Hauteur totale Summe Formhöhe dim clic% :' <--- dim t% :' <--- dim obj% :' <--- Mémo propriété Objekt Memo dim xx% :' <--- dim yy% :' <--- dim res% :' <--- dim x_orig% :' <--- ? pas de paramètres keine Werte dim y_orig% :' <--- ? pas de paramètres keine Werte
' ******************************************************************************
' dll_on "C: \ PANO \ DLL \ KGF.dll" width 0,630 dll_on "KGF.dll" : width 0,630
' ****************************************************************************** ' Form 0000 top 0000,0 left 0000,0 ' height 0000,1000 width 0000,630
' *** main_menu 1:sub_menu 2:parent 2,1:caption 2,"Atteindre" ' First füllen Sie das Fenster-Objekt ' d'abord remplir la fenêtre d'objet
memo 3:height 3,1000:item_add 3,"MEMO 3":for a%=1 to 50:item_add 3,str$(a%)+":memo 3":next a%
' Berechnung Höhe von Memo 3 ' g%(3,0)=top(3) g%(3,1)=g%(3,0)+height(3)+10
sub_menu 4:parent 4,2:caption 4,"memo 3" :on_click 4,menu :' pour atteindre le memo 3 ' memo, um die drei zu erreichen
memo 5:height 5,1000:item_add 5,"MEMO 5":top 5,g%(3,1):for a%=1 to 50:item_add 5,str$(a%)+":memo 5":next a%
' Berechnung Höhe von Memo 3 ' g%(5,0)=g%(3,1) g%(5,1)=g%(5,0)+height(5)+10
sub_menu 6:parent 6,2:caption 6,"memo 5" :on_click 6,menu :' pour atteindre le memo 5 ' memo, um die fünf zu erreichen
memo 7:height 7,1000:item_add 7,"MEMO 7":top 7,g%(5,1):for a%=1 to 50:item_add 7,str$(a%)+":memo 7":next a%
' Berechnung Höhe von Memo 3 ' g%(7,0)=g%(5,1) g%(7,1)=g%(7,0)+height(7)+10
sub_menu 8:parent 8,2:caption 8,"memo 7" :on_click 8,menu :' pour atteindre le memo 7 ' Memo bis 7 erreicht
memo 9:height 9,1000:item_add 9,"MEMO 9":top 9,g%(7,1):for a%=1 to 50:item_add 9,str$(a%)+":memo 9":next a%
' Berechnung Höhe von Memo 3 ' g%(9,0)=g%(7,1) g%(9,1)=g%(9,0)+height(9)+10
sub_menu 10:parent 10,2:caption 10,"memo 9" :on_click 10,menu :' pour atteindre le memo 9 ' bis 9 memo erreichen
end ' ======================================================================== menu: clic% = number_click select clic% case 4 :obj%=3 :' clic sur le s/menu 4 pour atteindre le memo 3
case 6 :obj%=5 :' clic sur le s/menu 4 pour atteindre le memo 5
case 8 :obj%=7 :' clic sur le s/menu 4 pour atteindre le memo 7
case 10:obj%=9 :' clic sur le s/menu 4 pour atteindre le memo 9 end_select
' erhält die Startposition ' récupère la position au départ res% = dll_call2("GetAbsoluteMousePosition",adr(x_orig%),adr(y_orig%))
scroll()
' gibt den Cursor in die Nähe Sie auf das Menü ' remèt le curseur près du clic sur le menu res% = dll_call2("MousePosition",x_orig%,10) return
' ======================================================================== sub scroll() handle%=handle(0) : xx%=left(0)+width(0)-30 res% = dll_call6("GetScrollBarInfo",handle%,1,adr(InfoMini%),adr(InfoMaxi%),adr(InfoPosi%),adr(hauteur%))
dim_local i% ' print_() if top(obj%)>10 if top(obj%) > hauteur% yy%=hauteur%-25 : a%=1 repeat
' Das Objekt ist zu hoch ' l'objet est trop haut
res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) : a%=a%+1:if a%=8 then exit_repeat until t% < hauteur%/2 or scancode = 27 end_if else
' Verschiebung PAGE ' déplacement par PAGE
if top(obj%) < hauteur%/2 a%=1 repeat
' Das Objekt ist zu niedrig ' l'objet est trop bas
res%= dll_call2("MouseLeftClick",xx%,22) :pause 1
' normalerweise unnötige ' normalement inutile
t%=top(obj%) : a%=a%+1 : if a%=15 then exit_repeat until t% >= 0 or scancode = 27 end_if end_if
'------------ Zeile für Zeile --------------- ' ----------- ligne par ligne --------------- if top(obj%)>10
' Strich ' ligne bas
yy%=hauteur%-10 repeat res%= dll_call2("MouseLeftClick",xx%,yy%) :pause 1 t%=top(obj%) : if i%= t% then exit_repeat i%=t% until t% < 5 or scancode = 27 else
' Line up ' ligne haut
if top(obj%)<5 repeat res%= dll_call2("MouseLeftClick",xx%,5) :pause 1 t%=top(obj%) until t% > 10 or t%=0 or scancode = 27 end_if end_if end_sub | |
| | | Invité Invité
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 20:44 | |
| Je me suis branché juste pour voir le programme de ce soir (télévision) Pour pouvoir répondre efficacement, j'ai besoin de savoir si dans ta fenêtre (FORM) tu n'a qu'un objet que tu veux atteindre à différents endroits, ou plusieurs objets qui se suivent. Si ce sont des objets qui se suivent, il suffit de remplacer les caractéristiques des memos de démonstrations, pour les mettre sur tes objets. Je parle de g%(x,0) et g%(x,1).
Je ne sais pas ce que donne le traducteur, et si on peut se comprendre. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 20:52 | |
| Je crois, que ce qu'il veut, s'est de pouvoir défiler, via l'ascenseur vertical, une fenêtre qui est beaucoup plus longue que l'écran, indépendamment des objets sur cette fenêtre. Imagine une fenêtre de 4000 pixels de hauteur, dans laquelle tu as un edit 10 avec top 10,3800, par exemple. | |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: Atteindre un objet dans une grande fenêtre Dim 30 Déc 2012 - 21:37 | |
| @Cosmos70 Entschuldige das ich dich gestört habe. Sorry that I did too. Désolé que j'ai fait trop. | |
| | | Contenu sponsorisé
| Sujet: Re: Atteindre un objet dans une grande fenêtre | |
| |
| | | | Atteindre un objet dans une grande fenêtre | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |