C'est encore moi,
Peut-on récupérer la position x, y d'un Canvas après l'avoir scrollé dans ScrollAreaGadget ?
Cela ne me semble pas possible avec GetGadgetAttribute(...
Je sais récupérer la position des Scrollbars mais uniquement quand je relâche le bouton du cureur.
Merci si vous connaissez la réponse,
JM
Obtenir la position D'un Canvas
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Obtenir la position D'un Canvas
De cette maniere par exemple
Ooops mal lu !! C'est la postion du canvas que tu souhaites et non pas les coordonnées de la souris dans le canvas !!
Code : Tout sélectionner
Declare ShowXY()
If OpenWindow(0, 0, 0, 800, 600, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 0, 0, 800, 600, 2000, 2000, 30)
CanvasGadget(1, 0, 0, 2000, 2000)
CloseGadgetList()
;trigger
BindGadgetEvent(1, @ShowXY(), #PB_EventType_MouseMove)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Procedure ShowXY()
Protected MouseX = GetGadgetAttribute(1, #PB_Canvas_MouseX)
Protected MouseY = GetGadgetAttribute(1, #PB_Canvas_MouseY)
Debug "x/y: " + MouseX + " / " + MouseY
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Obtenir la position D'un Canvas
OUI falsam,
La position de la souri, je n'ai pas encore expérimenter, je verrais plus tard. Chaque chose en son temps.
Bon, alors, peut-on récupérer la position d'un Canvas déplacé dans un ScrollAreaGadget?
Voire ma question préalable plus complète.
Merci quand même, cela me sera utile un jour, demain peut-être.
Bonne soirée,
JM
La position de la souri, je n'ai pas encore expérimenter, je verrais plus tard. Chaque chose en son temps.
Bon, alors, peut-on récupérer la position d'un Canvas déplacé dans un ScrollAreaGadget?
Voire ma question préalable plus complète.
Merci quand même, cela me sera utile un jour, demain peut-être.
Bonne soirée,
JM
Re: Obtenir la position D'un Canvas
avec :
avec ces fonctions, tu devrai pouvoir le retrouver ...
avec ce code , tu devrai pouvoir forcer l'affichage , puisqu'il est capable de changer la position des ascenseurs
tiré de ce post :
http://www.purebasic.fr/french/viewtopi ... stpos#p169
un code probablement pompé sur le forum anglais ... mais pas sur
lorsque tu as posé le canvas dans l'area , tu avais sa positionGetGadgetAttribute(): Avec une des constantes suivantes:
#PB_ScrollArea_InnerWidth : Renvoie la largeur (en pixels) de la zone interne du gadget.
#PB_ScrollArea_InnerHeight : Renvoie la hauteur (en pixels) de la zone interne du gadget.
#PB_ScrollArea_X : Renvoie la position horizontale actuelle de l'ascenseur (en pixels).
#PB_ScrollArea_Y : Renvoie la position verticale actuelle de l'ascenseur (en pixels).
avec ces fonctions, tu devrai pouvoir le retrouver ...
avec ce code , tu devrai pouvoir forcer l'affichage , puisqu'il est capable de changer la position des ascenseurs
tiré de ce post :
http://www.purebasic.fr/french/viewtopi ... stpos#p169
un code probablement pompé sur le forum anglais ... mais pas sur
Code : Tout sélectionner
Declare.l getlistpos(gadget.l)
Declare.l setlistpos(gadget.l, position.l)
Declare remplir()
Enumeration
#win
#list
#bouton
EndEnumeration
If OpenWindow(#win, 0, 0, 300, 300,"Scroll ListIconGadget", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
;If ; CreateGadgetList(WindowID(0))
ListIconGadget(#list, 0, 0, 300, 250, "Elements", 275, #PB_ListIcon_FullRowSelect)
ButtonGadget(#bouton, 0, 260, 300, 25, "Actualiser")
Remplir()
;Else
; End
;EndIf
Else
End
EndIf
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget() ; boutons, zone de texte, ...
Case #list
Case #bouton
pos = GetListPos(#list)
Debug "Premier élément visible = " + Str(pos)
ClearGadgetItemList(#list)
Debug "Liste vidée"
Remplir()
Debug "Remplissage de la liste"
; defini une position "d'origine" a 18
pos=18
SetListPos(#list, pos)
Debug "on remet à la position d'origine :" +str(pos)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
;-Procedures Zone
Procedure.l GetListPos(gadget.l)
ProcedureReturn SendMessage_(GadgetID(Gadget), #LVM_GETTOPINDEX, 0, 0)
EndProcedure
Procedure.l SetListPos(Gadget.l, Position.l)
Protected Pos.point
SendMessage_(GadgetID(Gadget), #LVM_GETITEMPOSITION, Position - 1, Pos)
SendMessage_(GadgetID(Gadget), #LVM_SCROLL, 0, Pos\y)
EndProcedure
;- Debut du test
Procedure Remplir()
; On rempli la liste
For n = 0 To 50
AddGadgetItem(1, -1, "Elément " + Str(n))
Next
EndProcedure
; Epb
Re: Obtenir la position D'un Canvas
Comme ça:
M.
Code : Tout sélectionner
Procedure scrollHV()
H=GetGadgetAttribute(0,#PB_ScrollArea_X) - GadgetX(0,#PB_Gadget_ContainerCoordinate); <=====
V=GetGadgetAttribute(0,#PB_ScrollArea_Y) - GadgetY(0,#PB_Gadget_ContainerCoordinate);<=====
Debug "Pos H du canvas dans le scrollarea :" + Str(H)
Debug "Pos V du canvas dans le scrollarea :" + Str(V)
Debug "Pos H du canvas dans la fenêtre :" + Str(GadgetX(0,#PB_Gadget_WindowCoordinate))
Debug "Pos H du canvas dans la fenêtre :" + Str(GadgetY(0,#PB_Gadget_WindowCoordinate))
Debug "Pos H du canvas dans l'écran :" + Str(GadgetX(0,#PB_Gadget_ScreenCoordinate))
Debug "Pos H du canvas dans l'écran :" + Str(GadgetY(0,#PB_Gadget_ScreenCoordinate))
Debug ""
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 400,400, 1000, 1000, 30)
CanvasGadget(1, 10, 10, 600, 600)
CloseGadgetList()
BindGadgetEvent(0,@scrollHV()); on utilise bindxxx pour avoir un retour des messages en temps réels
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Debug("Le scrollarea a envoyé un message !")
; Case 1
; Debug("Le CANVAS a envoyé un message !")
EndSelect
EndSelect
ForEver
EndIf
Re: Obtenir la position D'un Canvas
Merci à vous,
Si j'avais cherché mieux, peut-être aurais-je trouvé.
L'aide est très succincte, heureusement que ce forum existe.
BindGadgetEvent est vraiment une très bonne chose. Je commence à comprendre PB. Les propriétés de VB.NET me manquent un peux au début mais je suis fâché avec. Peut-être justement trop de propriétés. Trop de fichiers annexes. Et surement trop compliqué pour moi.
Avec 700 lignes non optimisées et beaucoup de commentaires, j'ai un début d'interface qui me convient parfaitement, à l'œil en tous cas.
Je vais poster une nouvelle question,
Bon lundi au soleil,
JM
Si j'avais cherché mieux, peut-être aurais-je trouvé.
L'aide est très succincte, heureusement que ce forum existe.
BindGadgetEvent est vraiment une très bonne chose. Je commence à comprendre PB. Les propriétés de VB.NET me manquent un peux au début mais je suis fâché avec. Peut-être justement trop de propriétés. Trop de fichiers annexes. Et surement trop compliqué pour moi.
Avec 700 lignes non optimisées et beaucoup de commentaires, j'ai un début d'interface qui me convient parfaitement, à l'œil en tous cas.
Je vais poster une nouvelle question,
Bon lundi au soleil,
JM
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Obtenir la position D'un Canvas
Bonjour Jeanmarc,
Moi je viens de Windev avec plein de possibilités et pourtant j'ai abandonné ce dernier au profit de PureBasic.
Bon il est vrai que j'ai du me créer quelques modules pour arrivé au résultat que je voulais, mais avec PureBasic j'ai plus de liberté et surtout un résultat performant.
Moi je viens de Windev avec plein de possibilités et pourtant j'ai abandonné ce dernier au profit de PureBasic.
Bon il est vrai que j'ai du me créer quelques modules pour arrivé au résultat que je voulais, mais avec PureBasic j'ai plus de liberté et surtout un résultat performant.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège