Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 30 Gennaio 2013, 00:47:00

Titolo: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 30 Gennaio 2013, 00:47:00
Vi rappresento uno strano fenomeno che ho riscontrato facendo alcune prove con l'oggetto "Balloon".

Su un Form ho posto una semplice TextEdit. Poi ho scritto le seguenti righe di codice:
Codice: gambas [Seleziona]

Public Sub TextEdit1_Enter()

  Balloon.Info("Testo qualsiasi", Form)

End

Come è possibile vedere, volendo far apparire il Balloon sul Form, ho posto come nome del Controllo (al quale legare il Balloon) non la parola FMain, né Me; bensì proprio Form.

Ebbene, se, lanciando il progetto e aprendosi il Form, il puntatore del mouse si trova casualmente all'interno della TextEdit, si scatena ovviamente subito l'evento previsto nel codice e... compare - seppur ridimensionato - un altro Form, avente lo stesso nome del Form principale !
???
Questa cosa accade anche se faccio entrare due volte consecutivamente il puntatore del mouse all'interno della TextEdit.

Aggiungo un altro fenomeno paranormale: se all'interno della routine dell'evento _Enter() prevedo la dichiarazione ed istanziazione di un oggetto qualsiasi, con proprio genitore il Form:
Codice: gambas [Seleziona]

Public Sub TextEdit1_Enter()

  Dim bt As Button
  
  With bt = New Button(Form)
    .Y = 300
    .W = 100
    .H = 50
    .Caption= "Alibabà"
  End With

   Balloon.Info("Testo qualsiasi", Form)

End

ebbene, nel nuovo Form vedo generato quell'oggetto !



Aggiungo che:

1) se, invece di scrivere l'evento riferito alla TextEdit, pongo l'evento _Enter con riferimento al Form:
Codice: gambas [Seleziona]

Public Sub Form_Enter()

  Balloon.Info("Testo qualsiasi", Form)

End

allora basterà entrare una volta soltanto con il mouse all'interno del Form del programma, perché si generi - oltre al previsto Ballon - il nuovo Form ridimensionato.


2) se pongo questo codice:
Codice: gambas [Seleziona]
Private bt As Button


Public Sub Form_Open()
  
  With bt = New Button(Form)
    .W = 100
    .H = 100
    .Caption = "Alibabà"
  End With
  
End


Public Sub Form_Enter()

   Balloon.Info("testo qualsiasi", Form)

End

lanciando il programma, il Form del programma medesimo non presenta il Button istanziato nella routine di apertura del Form del progetto. Entrando, successivamente, con il mouse sul Form del programma, viene generato - come ormai è chiaro -  un secondo Form ridimensionato, all'interno del quale è presente quel Button !


    :rolleyes:
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: Top Fuel - 30 Gennaio 2013, 15:03:51
In effetti la cosa è curiosa, però sfruttabile. Non saprei come però. :)
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 30 Gennaio 2013, 16:06:34
In effetti la cosa è curiosa, però sfruttabile. Non saprei come però.

 E' come se io avessi scoperto una cosa nuova. Ho il diritto di attribuirle un nome: è una prerogativa riconosciuta a tutti gli scopritori.
Quel fenomeno lo chiameremo: vuottazione.   ;D

...ma forse è solo un bug !   :-X
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: Top Fuel - 30 Gennaio 2013, 16:39:05
Prova a farla vedere nella M.L.I. e facci sapere cosa ti dicono.
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 30 Gennaio 2013, 17:14:12
Prova a farla vedere nella M.L.I. e facci sapere cosa ti dicono.

Sì, ho già posto la questione, ma ancora non mi risponde nessuno.
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: md9327 - 31 Gennaio 2013, 12:32:46
E' SICURAMENTE un'anomalia...

La chiamata diretta ad un oggetto, che si presuppone non statico, non può essere fatta se questo non viene prima istanziato, ovvero creato.

Nei casi che hai verificato, è come se Form sia presente a livello statico in gambas, e quindi richiamabile come una funzione.

Quindi, a mio avviso, questa è un'anomalia, che non può essere sfruttata, in quanto può portare a conseguenze impreviste.
Se non è così, la cosa và fuori logica, a meno che non vi sia una spiegazione, che credo difficile, in quanto crea un mucchio di confusione nella programmazione, con le relative conseguenze, negative, in particolare perchè fuori controllo...
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 31 Gennaio 2013, 13:19:04
E' SICURAMENTE un'anomalia...

Condivido la tua opinione, stante anche la tua spiegazione.

Ancora ora non ho ricevuto notizie da Minisini al riguardo.  :-\

Ho riproposto la questione nella Mailing List Internazionale.
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: milio - 31 Gennaio 2013, 19:35:06
Probabilmente L'oggetto form e' statico... provate a fare questo in un modulo che sia impostato come classe di avvio:

Public Sub Main()
 
  Form.Show
 
End

Ebbene senza essere istanziata si aprira' un form...
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 31 Gennaio 2013, 19:43:55
Probabilmente L'oggetto form e' statico... provate a fare questo in un modulo che sia impostato come classe di avvio:

Public Sub Main()
 
  Form.Show
 
End

Ebbene senza essere istanziata si aprira' un form...

Confermo quanto descritto da Milio. Aggiungo anche che la dimensione del nuovo Form è identica a quella del nuovo Form ottenuto nel caso da me descritto. Inoltre, in entrambi i casi i due nuovi Form hanno il nome visibile del proprio Form principale.

Dunque...?
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 31 Gennaio 2013, 20:00:03
Ho avuto una prima risposta dalla M.L.I., seppur non da Minisini. Ve la riporto:

« I guess Gambas creates the control you are referring (Form is class, and
so, not proper object to refer).

I think Gambas should raise error instead.

Jussi
»
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: sotema - 01 Febbraio 2013, 14:41:51
Probabilmente L'oggetto form e' statico... provate a fare questo in un modulo che sia impostato come classe di avvio:

Public Sub Main()
 
  Form.Show
 
End

Ebbene senza essere istanziata si aprira' un form...

Confermo quanto descritto da Milio. Aggiungo anche che la dimensione del nuovo Form è identica a quella del nuovo Form ottenuto nel caso da me descritto. Inoltre, in entrambi i casi i due nuovi Form hanno il nome visibile del proprio Form principale.

Dunque...?

La spiegazione potrebbe consistere nel fatto che, creando un nuovo progetto grafico, Gambas istanzia una nuova FORM per disegnare la FMain; l'istanza probabilmente è chiamata Form. Da qui l'anomalia.
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 02 Febbraio 2013, 02:48:02
Probabilmente L'oggetto form e' statico... provate a fare questo in un modulo che sia impostato come classe di avvio:
Public Sub Main()
  
  Form.Show
  
End

Ebbene senza essere istanziata si aprira' un form...

Volevo aggiungere che, pur non volendo scomodare un modulo, si avrà il medesimo risultato:
Codice: gambas [Seleziona]
Public Sub Form_Open()
  
  Form.Show
  
End



Senza dover impostare un modulo, si può creare, alla bisogna (immaginate ad esempio per creare con poco codice un MessageBox personalizzato), velocemente un Form, distruttibile egualmente in modo veloce:
Codice: gambas [Seleziona]

Private bt As Button


Public Sub Button1_Click()

  Dim tl As TextLabel

   With Form
     .Show
     .Center
     .W = 400
     .H = 300
     .Background = Color.Yellow
     .Caption = "Nuovo Form ausiliario"
   End With

   With tl = New TextLabel(Form)
     .X = 200
     .Y = 200
     .W = 100
     .H = 50
     .Background = Color.Orange
     .Text = "alibaba"
   End With

   With bt = New Button(Form) As "tasto"
     .X = 20
     .Y = 20
     .W = 100
     .H = 50
     .Caption = "alibaba"
   End With

End


Public Sub tasto_Click()
  
    Print "Il Form ausiliario sarà distrutto fra 2 secondi !"

    Wait 2
  
    Form.Close
  
End
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: Top Fuel - 05 Febbraio 2013, 22:07:28
Lo sapevo che la cosa era sfruttabile. 8)
Ora vai a fare lo sborone nella M.L.I. ;D
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: allegfede - 07 Febbraio 2013, 13:46:26
ottimo lavoro ... ma se chiudono il bug ti rovinano il giochetto ;-)
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 07 Febbraio 2013, 20:15:38
ottimo lavoro ... ma se chiudono il bug ti rovinano il giochetto ;-)

Meglio un bug in meno, che una vuottazione ;D in più !
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: md9327 - 08 Febbraio 2013, 10:48:23
Ma... per creare una form statica non c'è bisogno di passare per una libreria statica, specialmente se l'implementazione è causata da un errore di base.

Il fatto che si possa utilizzare, non è di per se sintomo che sia corretto farlo, nè tantomento che sia giusto che rimanga un errore valido.
Io direi di evitare si incrementare cose su un errore...  :-\
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 08 Febbraio 2013, 10:53:36
Io direi di evitare si incrementare cose su un errore...  :-\

Continuo a condividere questa tesi; solo che Minisini non mi ha proprio risposto su questo problema !  :-\
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: sotema - 08 Febbraio 2013, 14:23:10
Io direi di evitare si incrementare cose su un errore...  :-\

se prima eravamo in due adesso siamo in tre... ;D
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 08 Febbraio 2013, 15:46:50
se prima eravamo in due adesso siamo in tre... ;D

    :rolleyes:

(http://socialdance.stanford.edu/syllabi/images/HullyGullyCover.jpg)
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: md9327 - 12 Febbraio 2013, 14:47:03
...te prego...  :rolleyes:
Titolo: Re: Ponendo Form, come Control, in una funzione Balloon crea un altro Form simile
Inserito da: vuott - 12 Febbraio 2013, 20:04:42
...te prego...  :rolleyes:

(http://alistapart.com/d/_/img/no.gif)