Documentation de Gambas - /comp/gb/object/attach

/comp/gb/object/attach

# Object.Attach (gb)

Static Sub Attach ( Object As Object, Parent As Object, Name As String )

Attache un objet à son parent.

Name est le nom utilisé pour chercher le gestionnaire d'Evènement dans l'objet Parent.

Chaque événement déclenché par un objet sera géré par le gestionnaire d'événement situé dans son parent.

Si le parent est une classe, alors les gestionnaires d'événements seront des méthodes statiques de la classe.

Le code suivant :

    hObject = NEW MyClass
    Object.Attach(hObject, ME, "EventName")

est équivalent à :

    hObject = NEW MyClass AS "EventName"

### Exemples

    PUBLIC Process1 AS Process
    ...
    Process1 = SHELL "find /" FOR READ
    Object.Attach(Process1, ME, "Process1")
    ...

    PUBLIC SUB Process1_Read()

       Message.Info("Got output from Process1!")
       ' and then read and do something with the output...

    END

L’exemple qui suit créera 16 boîtes d’image et chaque fois que l’une d’entre elle sera cliquée (évènement MouseUp) le bit de donnée sous jacent de iSwtch et l’image sont inversés.

On montre ici comment un tableau d’éléments de contrôle peut recevoir un signal ; dans cet exemple le signal est "MouseUp"

    PUBLIC pbSwtch AS Object[16]

    PUBLIC iSwtch AS Integer ' L’état des 16 interrupteurs de données

    PUBLIC imgSwtchOff AS Picture ' L’image montre un interrupteur quand elle est éteinte
    PUBLIC imgSwtchOn AS Picture ' L’image montre un interrupteur quand elle est allumée

    PUBLIC SUB Form_Show()

    DIM i AS Integer
    DIM pb AS Object

    imgSwtchOff = Picture["imgSwtchOff.png"]
    imgSwtchOn = Picture["imgSwtchOn.png"]

    FOR i = 0 TO 15
      pb = NEW PictureBox(ME) ' crée une nouvelle boîte d’image, retourne sa poignée (handle) à pb
      pb.X = 20 + 40 * (15 - i)
      pb.Y = 60
      pb.Width = 32
      pb.Height = 32

      pb.Picture = imgSwtchOff
      pb.Name = "pbSwtch"
      pbSwtch[i] = pb
      Object.Attach(pbSwtch[i], ME, "pbSwtch")
    NEXT
    END

    PUBLIC SUB pbSwtch_MouseUp()
    DIM i AS Integer
    DIM togglemask AS Integer

    i = (Mouse.ScreenX - 20) / 40 ' lequel des 16 interrupteurs à été cliqué ?

    IF i >= 0 AND i < 16 THEN
      i = 15 - i
      togglemask = Shl(1, i)
        iSwtch = iSwtch XOR togglemask
      IF iSwtch AND togglemask THEN
        pbSwtch[i].Picture = imgSwtchOn
      ELSE
        pbSwtch[i].Picture = imgSwtchOff
      ENDIF
    ENDIF
    END