Autore Topic: Creare un clone di un oggetto  (Letto 2429 volte)

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo
Creare un clone di un oggetto
« il: 27 Maggio 2016, 18:26:36 »

Salve a tutti,
ho una domanda da sottoporvi. Supponiamo di avere una Form che contiene un Frame al cui interno vi sono due Button. E' possibile creare un clone della Frame contenente i due Button ed attaccarla alla Form in modo che il risultato finale sia una Form che contiene due Frame identiche? Ovviamente copiarla, non ridisegnarla passo passo da codice.

Grazie anticipatamente

Giovanni Grandi

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Creare un clone di un oggetto
« Risposta #1 il: 27 Maggio 2016, 21:14:35 »
Ovviamente copiarla, non ridisegnarla passo passo da codice.
.....avrai comunque bisogno di utilizzare del codice per ottenere il clone: il problema - a mio avviso - è che deve essere creato un nuovo oggetto.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Creare un clone di un oggetto
« Risposta #2 il: 28 Maggio 2016, 00:48:17 »
.........in vero puoi ottenere, sì, un "clone", ma dei puri dati contenuti dalle Strutture che i file header sorgente i Gambas prevedono per la creazione di un oggetto, ed in particolare - in questo caso - di un Frame:

Mi spiego con un semplice esempio (è necessario porre sul Form un Frame ed una TextArea):
Codice: [Seleziona]
Public Sub Button1_Click()

  Dim d, i As Integer
  Dim clone As Pointer
  Dim st As Stream

'  Assegna alla variabile "b" la dimensione della Struttura principale del "Frame" da clonare: '
    d = Object.SizeOf(Frame1)
 
' Alloca un'area di memoria pari a quella occupata dalla Struttura principale del "Frame" da clonare: '
    clone = Alloc(d)

' Crea una variabile di tipo "Stream", per scrivere dei dati del "Frame" da clonare
' nell'area di memoria puntata dal Puntatore "clone": '
    st = Memory clone For Write
   
' Scrive mediante i "Memory Stream" nell'area di memoria puntata dal Puntatore "clone"
' i dati del "Frame" da clonare (leggendoli dalla sua Struttura principale):'
    For i = 0 To d - 1
      Write #st, Byte@(Object.Address(Frame1) + i) As Byte
    Next
    st.Close

' Mostra semplicemente i dati presenti ora nell'area di memoria puntata dal Puntatore "clone",
' i quali sono perfettamente corrispondenti ai dati del "Frame" clonato: '
    For i = 0 To d - 1
      TextArea1.Text &= i & Space(6) & Hex(Byte@(clone + i), 2) & Chr(10)
    Next
    TextArea1.text &= "L'oggetto clonato in area di memoria è un:  " & String@(Pointer@(Pointer@(clone) + 24))
   
' Distrugge l'oggetto "Frame1"... '
    Frame1.Delete

' ...ma.... l'area di memoria puntata dal Puntatore "clone" continua ad esistere ed ovviamente a contenere
' una copia precisa dei dati della Struttura principale del "Frame" originario clonato: '
   TextArea1.text &= Chr(10) & "Indirizzo di memoria del Puntatore 'clone':  " & CStr(clone)

End



« Ultima modifica: 28 Maggio 2016, 00:50:00 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo
Re:Creare un clone di un oggetto
« Risposta #3 il: 30 Maggio 2016, 10:49:52 »

Grazie mille per la risposta, mi hai insegnato cose che non conoscevo e che andrò a sperimentare.
Il succo della domanda era capire se esisteva un modo semplice per copiare un'oggetto, ma vedo che non è possibile se non con artifici.

Ciao,
Giovanni Grandi

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Creare un clone di un oggetto
« Risposta #4 il: 30 Maggio 2016, 22:22:13 »
Ma l'ereditarietà non mette nell'oggetto figlio le stesse caratteristiche dell'oggetto padre?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Creare un clone di un oggetto
« Risposta #5 il: 31 Maggio 2016, 00:02:04 »
Ma l'ereditarietà non mette nell'oggetto figlio le stesse caratteristiche dell'oggetto padre?
Se l'ereditarietà nella teoria della  programmazione orientata agli oggetti si riferisce ad una relazione che si stabilisce fra due Classi, determinando così una gerarchia di Classi, mi domando se essa sia applicabile anche agli Oggetti quali elementi, istanze particolari di una Classe.   
Se è vero che una Classe può ereditare da un'altra Classe, un Oggetto di una determinata Classe, può ereditare da un'altro Oggetto di quella medesima Classe ? E' amessa, insomma, l'ereditarietà fra Oggetti della medesima Classe ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »