multiligne sur un listicongadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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...
coxco
Messages : 92
Inscription : ven. 06/juin/2008 16:04

Message par coxco »

Merci Ollivier

j'ai laissé tomber, c'est trop compliqué pour moi, mais merci pour ton aide
:)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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() 
Répondre