Page 3 sur 3
Publié : dim. 22/juin/2008 16:24
par Ollivier
Heu... Coxco, n'hésite pas à exprimer tes impressions. Tu as besoin d'une option qui, a priori n'est pas disponible.
J'opte pour la solution un peu bourrin qui consiste à refaire un tableau, mais je ne sais pas si c'est ce que tu souhaites.
Peut-être qu'il te faut quelque chose de plus simple d'utilisation?
Publié : mar. 24/juin/2008 16:16
par Ollivier
Bon Coxco, je renonce à moins que ça tu aies vraiment besoin de ça parce que la suite, elle est raide.
En tout cas, ça soulève une limite que je n'avais pas fait gaffe concernant les gadgets... Personnellement, je ne les utilise pas énormément. Donc ça n'est pas un gros problème.
Si un moyen de substitution à la ListIcon te motive, je continue. Le cas contraire, je ne vais pas de temps. C'est un peu logique...
Publié : jeu. 26/juin/2008 15:45
par coxco
Merci Ollivier
j'ai laissé tomber, c'est trop compliqué pour moi, mais merci pour ton aide

Publié : jeu. 26/juin/2008 22:56
par Ollivier
Pour ce problème particulier et avec ma réponse personnelle, oui c'est vrai que ça ne semble pas simple...
Je vais répondre complètement à ta question quand même d'ici à quelques jours, même si tu n'y porte plus d'intérêt actuellement.
Publié : jeu. 23/avr./2009 16:54
par Ollivier
Remis à jour ce mic-mac en lisant une remarque de Gnozal sur le retour de WindowFromPoint_()
Code : Tout sélectionner
;***************************************************************
; Grille pour Coxco - PB 4.30
;***************************************************************
#HorizBar = 0
#VertBar = 1
#MoveBar = 2
Structure BAR ; Pour chaque barre, on aura :
Hnd.L ; un handle (n° unique que l'OS attribue à chaque objet qui le compose)
Dir.L ; Direction : 0 = Horizontale ; 1 = Vertical
EndStructure
Procedure Tabloide()
HorizontalCurs = LoadCursor_(0, 32645) ; horiz
VerticalCursor = LoadCursor_(0, 32644) ; verti
; Quelques réglages...
; ********************
; Position de la fenêtre
wx = 10
wy = 100
; Dimensions de la fenêtre
ww = 512
wh = 384
; Dimensions d'une cellule (au démarrage...)
celh.L = 24
celw = 64
; Dimensions du tableau (en pixels)
tw = 10000
th = 10000
; Allocation d'un tableau (dans le sens du langage)
Global Dim Bar.BAR(9999) ; 9999 est un nombre large qu'il faudra préciser clairement plus tard
; 2 lignes horizontales et verticales pour la fabrication
; de la grille, le tout stocké dans 2 images
horiLine = CreateImage(-1, tw, 1)
vertLine = CreateImage(-1, 1, th)
; Une fenêtre
win = OpenWindow(-1, wx, wy, ww, wh, "", $cf0000)
; Un gadget général
G0 = ScrollAreaGadget(-1, 0, 0, ww, wh, tw, th, 16, 8)
; La fabrication de la grille
HndBarCount = 0
For x = 0 To tw - 1 Step 64
; Ici on enregistre le handle de chaque barre verticale
Bar(HndBarCount)\Hnd = ImageGadget(-1, x, 0, 1, th, ImageID(VertLine) )
Bar(HndBarCount)\Dir = #VertBar
HndBarCount + 1 ; Et HndBarCount contiendra le total des handles à tester
Next
For y = 0 To th - 1 Step 24
; Ici on enregistre le handle de chaque barre horizontale
Bar(HndBarCount)\Hnd = ImageGadget(-1, 0, y, tw, 1, ImageID(HoriLine) )
Bar(HndBarCount)\Dir = #HorizBar
HndBarCount + 1
Next
HndBarCount - 1 ; Au final, il y en a un de trop, donc on corrige...
; La boucle principale
Define GetGadget.RECT
Repeat
; Attend un événement
Event0 = WaitWindowEvent()
DMx.I = DesktopMouseX()
DMy.I = DesktopMouseY()
If EventMouse = 0
Action = 0
Temporaire.Q = DMx << 32 + DMy
hWnd = GetParent_(WindowFromPoint_(Temporaire) )
If hWnd <> GadgetID(G0)
hWnd = GetParent_(hWnd)
EndIf
If hWnd = GadgetID(G0)
GetWindowRect_(hWnd, GetGadget)
Mx = GetGadgetAttribute(G0, #PB_ScrollArea_X) + DMx - GetGadget\Left
My = GetGadgetAttribute(G0, #PB_ScrollArea_Y) + DMy - GetGadget\Top
For i = 0 To HndBarCount
If Bar(i)\Dir = #VertBar
If Abs(GadgetX(Bar(i)\Hnd) - Mx) < 5
SetCursor_(VerticalCursor)
Action = #VertBar | #MoveBar
EventBar = i
Break
EndIf
EndIf
If Bar(i)\Dir = #HorizBar
If Abs(GadgetY(Bar(i)\Hnd) - My) < 5
SetCursor_(HorizontalCurs)
Action = #HorizBar | #MoveBar
EventBar = i
Break
EndIf
EndIf
Next
EndIf
Else
Mx = GetGadgetAttribute(G0, #PB_ScrollArea_X) + DMx - GetGadget\Left
My = GetGadgetAttribute(G0, #PB_ScrollArea_Y) + DMy - GetGadget\Top
EndIf
; Vérifie que l'événement fait partie de notre fenêtre
If EventWindow() = win
; si oui, de quoi s'agit-il?
Select Event0
; on veut quitter
Case 16
wQuit | 1
; on veut déformer la fenêtre
Case #PB_Event_SizeWindow
ww = WindowWidth(win)
wh = WindowHeight(win)
ResizeGadget(G0, 0, 0, ww, wh)
; on clique sur la souris
Case #WM_LBUTTONDOWN
EventMouse = 1
Case #WM_LBUTTONUP
EventMouse = 0
EndSelect
If EventMouse = 1
; Est-ce une action de déplacement de barre ? (= déformation de cellule)
If Action & #MoveBar ; oui...
If (Action & 1) = #HorizBar
yDelta = My - GadgetY(Bar(EventBar)\Hnd)
For i = EventBar To HndBarCount
If Bar(i)\Dir = #HorizBar
ResizeGadget(Bar(i)\Hnd, #PB_Ignore, GadgetY(Bar(i)\Hnd) + yDelta, #PB_Ignore, #PB_Ignore)
EndIf
Next
Else
xDelta = Mx - GadgetX(Bar(EventBar)\Hnd)
For i = EventBar To HndBarCount
If Bar(i)\Dir = #VertBar
ResizeGadget(Bar(i)\Hnd, GadgetX(Bar(i)\Hnd) + xDelta, #PB_Ignore, #PB_Ignore, #PB_Ignore)
EndIf
Next
EndIf
EndIf
EndIf
EndIf
Until wQuit
EndProcedure
Tabloide()