Conoscere le risorse possedute da una Classe: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 7: Riga 7:
   Dim s As String
   Dim s As String
   
   
  For Each s In Class.Load("Button").Symbols
  For Each s In Class.Load("Button").Symbols
    Print s
    Print s
  Next
  Next
   
   
  '''End'''
  '''End'''




Riga 25: Riga 24:
  <FONT Color=#B22222>Public</font> Procedure Prova()
  <FONT Color=#B22222>Public</font> Procedure Prova()
    
    
  Print "Testo qualsiasi"
  Print "Testo qualsiasi"
    
    
  '''End'''
  '''End'''


Ebbene, il codice della Classe principale per conoscere i simboli delle risorse della Classe secondaria ''Class1'' sarà semplicemente:
Ebbene, il codice della ''Classe'' principale per conoscere i simboli delle risorse della ''Classe'' secondaria "Class1" sarà semplicemente:
  '''Public''' Sub Form_Open()
  '''Public''' Sub Form_Open()
   
   
   Dim cl As New Class1  <FONT Color=gray>' ''Dichiariamo la variabile della Classe secondaria "Class1", anche se ai fini dell'argomento di questa pagina non è necessario''</font>
   Dim cl As New Class1  <FONT Color=gray>' ''Dichiariamo la variabile della Classe secondaria "Class1", anche se ai fini dell'argomento di questa pagina non è necessario''</font>
   Dim s As String
   Dim s As String
    
  For Each s In Class.Load("Class1").Symbols
   For Each s In Class.Load("Class1").Symbols
    Print s
    Print s
  Next
  Next
   
   
  '''End'''
  '''End'''




==Le proprietà della classe virtuale ".Symbol"==
==Le Proprietà della ''Classe'' virtuale ".Symbol"==
La Classe "Class" possiede una Classe virtuale, chiamata "''.Symbol''", che fornisce alcune Proprietà sui simboli della Classe principale.
La Classe "Class" possiede una Classe virtuale, chiamata "''.Symbol''", che fornisce alcune Proprietà sui simboli della Classe principale.


Riga 71: Riga 70:
   Me.Close
   Me.Close
    
    
'''End'''
==Usando i Puntatori per accedere alla ''Struttura'' "_CLASS" dei sorgenti di Gambas==
Una modalità più complessa e per conoscere elementi più generici, si può accedere al membro "CLASS_EVENT *event" della ''Struttura'' "_CLASS" (dichiarata nel file header "gbx_class.h").
'''Public''' Sub Main()
  Dim p As Pointer
  p = Object.Address(Me)
  Functio(p)
'''End'''
'''Private''' Function Functio(po As Pointer)
  Dim p1, p2 As Pointer
  Dim i As Integer
  p1 = Pointer@(po + SizeOf(gb.Pointer) * 5)
  p2 = Pointer@(p1)
  For i = 0 To 63
    If Byte@(p2 + i) == 0 Then
      Print
      Continue
    Endif
    Print Chr(Byte@(p2 + i));
  Next
 
  '''End'''
  '''End'''

Versione delle 13:29, 8 set 2022

Per conoscere tutti i simboli relativi alle risorse (Proprietà, Metodi e Eventi), che una Classe mette a disposizione del programmatore, si può utilizzare il seguente codice con la Classe Class.


Poniamo il caso di voler conoscere i simboli posseduti dalla Classe Button:

Public Sub Form_Open()

 Dim s As String

 For Each s In Class.Load("Button").Symbols
   Print s
 Next

End


Ugualmente è possibile conoscere i simboli delle risorse possedute da una classe specifica da noi creata, purché tali risorse siano dichiarate Pubbliche.

Poniamo il caso di aver creato nel nostro progetto una specifica classe, chiamata Class1, e che il suo codice sia il seguente:

Public alfa As Integer

Event Evento()    ' La risorsa Event è di per sé "Pubblica"


Public Procedure Prova()
 
 Print "Testo qualsiasi"
 
End

Ebbene, il codice della Classe principale per conoscere i simboli delle risorse della Classe secondaria "Class1" sarà semplicemente:

Public Sub Form_Open()

 Dim cl As New Class1   ' Dichiariamo la variabile della Classe secondaria "Class1", anche se ai fini dell'argomento di questa pagina non è necessario
 Dim s As String

 For Each s In Class.Load("Class1").Symbols
   Print s
 Next

End


Le Proprietà della Classe virtuale ".Symbol"

La Classe "Class" possiede una Classe virtuale, chiamata ".Symbol", che fornisce alcune Proprietà sui simboli della Classe principale.

Per disporre di tali Proprietà bisognerà porre il nome della Classe da caricare tra due parentesi quadre:

Public Sub Form_Open()
 
 Dim cl As Class
 
 cl = Class.Load("Color")
 
 Print cl["RGB"].Type
 
End

Di seguito un esempio più completo, nel quale vengono esclusi gli eventuali Metodi della Classe:

Public Sub Form_Open()
 
 Dim cl As Class
 Dim s As String
 
 cl = Class.Load("Color")
 
 For Each s In cl.Symbols
   If cl[s].Kind = Class.Method Then Continue
   Print Hex(Object.GetProperty(cl, s), 8), s
   Wait 0.3
 Next
 
 Me.Close
 
End


Usando i Puntatori per accedere alla Struttura "_CLASS" dei sorgenti di Gambas

Una modalità più complessa e per conoscere elementi più generici, si può accedere al membro "CLASS_EVENT *event" della Struttura "_CLASS" (dichiarata nel file header "gbx_class.h").

Public Sub Main()

 Dim p As Pointer

 p = Object.Address(Me)

 Functio(p)

End

Private Function Functio(po As Pointer)

 Dim p1, p2 As Pointer
 Dim i As Integer

 p1 = Pointer@(po + SizeOf(gb.Pointer) * 5)
 p2 = Pointer@(p1)

 For i = 0 To 63
   If Byte@(p2 + i) == 0 Then
     Print
     Continue
   Endif
   Print Chr(Byte@(p2 + i));
 Next
  
End