Gambas-it

Gambas3 => Programmazione => Topic aperto da: dex - 07 Aprile 2012, 22:59:21

Titolo: [risolto]Inserire form in un Array
Inserito da: dex - 07 Aprile 2012, 22:59:21
Ciao raga
era da parecchio che non usavo gambas e mi sono arrugginito, poi con il 3 le cose sono peggiorate.
Devo inserire i Form in un Array ma non riesco a capire dove toppo.

Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 00:11:52
... non hai dichiarato, né istanziato la classe FMid nella classe principale FMain.
Poi credo si debbano togliere tutte quelle dichiarazioni "Static"...
...forse dovresti anche istanziare il modello dei Form nella classe FMdi...
...credo anche mettere Public MyForm As New Object[]...  :-\
...MyForm.add = ...non va bene...




Ho fatto una prova da me, ma non so se è proprio quello che vuoi ottenere tu. Creo un array (che può teoricamente anche essere illimitato) di Form, e poi li mostro.

In FMain.Class:
Codice: gambas [Seleziona]

' dichiaro la classe secondaria
Public seconda As CSeconda


Public Sub Form_Open()

' istanzio la classe secondaria
   seconda = New CSeconda As "seconda"

End


Public Sub Button1_Click()

' vado a creare e riempire l'array:
' ogni clic è un Form in più a disposizione:
    seconda.creaform()

End



Public Sub Button2_Click()

' mostro i Form dell'array uno ad uno ad ogni clic:
    seconda.verifica()

End


Public Sub  Button3_Click()

' poi sadicamente li distruggo tutti, tranne il form principale:
    seconda.formDelendaSunt()

End



Nella classe secondaria CSeconda.Class:
Codice: gambas [Seleziona]

Private obja As New Object[]
Private k As Integer
Private j As Byte

Public Sub creaform()
  
  Dim fo As Form
  
' istanzio un Form:
    fo = New Form As "fo"
  
' lo aggiungo ad un elemento dell'array:
    obja.Add(fo)
  
End


Public Sub verifica()
  
  Dim box As New Form

' evito di superare il numero di elementi dell'array:
  If j > obja.max Then Return

  k = k + 30

  box = obja[j]
  
' vado a mostrare di fatto un form:
  With box
    .W = 150
    .H = 150
    .X = k
    .Y = k
    .Show
    .TopOnly = True
  End With
  
  Inc j
    
End


Public Sub formDelendaSunt()
  
  Dim formelle As Form

' i form creati vengono distrutti immediatamente:
    For Each formelle In obja
       formelle.Close
    Next
  
   Print "Form secondari tutti kaput ! "

End

Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 01:20:11
... non hai dichiarato, né istanziato la classe FMid nella classe principale FMain.
Poi credo si debbano togliere tutte quelle dichiarazioni "Static"...
...forse dovresti anche istanziare il modello dei Form nella classe FMdi...
...credo anche mettere Public MyForm As New Object[]...  :-\
...MyForm.add = ...non va bene...

ho provato a togliere static ma va in errore
se .add non và bene, come faccio a far caricare l'array?
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 01:28:35
ho provato a togliere static ma va in errore
..ma... io l'ho dovuto togliere dovunque, se no avevo errore.


se .add non và bene, come faccio a far caricare l'array?
Add va bene, ma non con il segno =
Guarda l'esperimento che ho fatto sopra. In particolare nel codice della classe secondaria c'è un esempio con add(...)
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 01:39:28
ho provato a togliere static ma va in errore
..ma... io l'ho dovuto togliere dovunque, se no avevo errore.


se .add non và bene, come faccio a far caricare l'array?
Add va bene, ma non con il segno =
Guarda l'esperimento che ho fatto sopra. In particolare nel codice della classe secondaria c'è un esempio con add(...)

strano = ? mi sara sfuggito.

non riesco a far funzionare il tuo esempio, in questo punto non ho capito seconda di cosa si tratta.
Citazione
Public Sub Form_Open()  
  
' istanzio la classe secodaria  
  seconda = New CSeconda As "seconda"  
  
End  

in pratica io apro dei form (non creati da codice) con show e man mano che li apro li dovrei caricare nell'array.

Edit: avevi ragione, nel copiare il codice ho lasciato =.
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 01:45:06

non riesco a far funzionare il tuo esempio, in questo punto non ho capito seconda di cosa si tratta.

Perdonami, avevo cambiato delle cose, ed ora ho aggiustato il codice qui nel forum. Riprova a copiarlo e a farlo funzionare.
Ah, ricordati di porre come "Public" nelle Opzioni del programma i Controlli del Form e pure (ad abundatiam) i simboli dei moduli.



in questo punto non ho capito seconda di cosa si tratta.
E' una classe secondaria (oltre a quella principale FMain).
L'interfaccia per scrivervi il codice la crei nelle modalità consuete in alto a sinistra, io l'ho chiamata CSeconda. Poi la dichiari ed istanzi in FMain, come da codice sopra.
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 01:49:46
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.

In Form1 io ho cambiato così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  FMain.mdi.MyNaF = Form1

  FMain.mdi.InsForm()
    
End


Tieni conto che quel nome "mdi" è il nome che ho dato alla classe FMdi.Class all'atto della sua istanziazione in FMain:
Codice: [Seleziona]
Public mdi As FMdi


Public Sub Form_Open()

  mdi = New FMdi As "mdi"

End
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 01:59:15
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.

In Form1 io ho cambiato così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  FMain.mdi.MyNaF = Form1

  FMain.mdi.InsForm()
    
End


Tieni conto che quel nome "mdi" è il nome che ho dato alla classe FMdi.Class all'atto della sua istanziazione in FMain:
Codice: [Seleziona]
Public mdi As FMdi


Public Sub Form_Open()

  mdi = New FMdi As "mdi"

End

provato a fare le correzioni ma va sempre in errore.

Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 02:04:10
Ho provato il codice che hai postato, funziona, carica il form nell'array, solo che tu crei un form da codice, come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 02:07:53
...come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?
...scusami, ma non ho capito bene  :-\ quello che vuoi fare. Puoi spiegarti meglio, più in dettaglio ?
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 02:18:47
...come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?
...scusami, ma non ho capito bene  :-\ quello che vuoi fare. Puoi spiegarti meglio, più in dettaglio ?

Be io ho il main (Fmain) e tanti form gia creati tipo:  clienti, personale, magazzino ecc.

Quando dal main apro il form clienti nell'array devo caricare clienti, poi quando apro altri form si devono aggiungere nell'array.
alla fine quando li ho aperti tutti nell'array devo avere:

indice  form
0        clienti
1        personale
2        magazzino
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 02:26:17

provato a fare le correzioni ma va sempre in errore.


Allora.. nella classe secondaria FMdi.class aggiungi la parola New qui, così:

Public MyForm As New Object[]
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 02:31:53

provato a fare le correzioni ma va sempre in errore.


Allora.. nella classe secondaria FMdi.class aggiungi la parola New qui, così:

Public MyForm As New Object[]

Vuott perdonami se approfitto della tua pazienza sorpatutto stasera che è festa.
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

Su gambas 2 avevo realizzato un piccolo programma per getire dei form tipo MDI, ora lo volevo usare su gambas 3 e sono non riesco ad uscirne.
ti allego il progetto fatto con gambas 2
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 02:36:59
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

E' strano, a me non dà errore solo se aggiungo New.
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 02:40:14
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

E' strano, a me non dà errore solo se aggiungo New.
esatto con new non da errore, ma non entra nel codice.

in FMdi dopp
Citazione
If (Not Object.IsValid(MyForm) Or IsNull(MyForm)) Then

prova a mettere un print
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 02:45:44

Su gambas 2 avevo realizzato un piccolo programma per getire dei form tipo MDI, ora lo volevo usare su gambas 3 e sono non riesco ad uscirne.


A me dice che manca qualche componente gb.info ed un altro.
Poi PrintPdf.show mi dice che è sconosciuto.
Poi errore di sintassi qui: Static Public MyForm As Object[20].... magari cambialo così: Public MyForm[20] As Object
Poi errori determinati dalla presenza della parola "Static"...
Attenzione però ! Io lavoro conGambas 3 !!!
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 02:53:37

Su gambas 2 avevo realizzato un piccolo programma per getire dei form tipo MDI, ora lo volevo usare su gambas 3 e sono non riesco ad uscirne.


A me dice che manca qualche componente gb.info ed un altro.
Poi PrintPdf.show mi dice che è sconosciuto.
Poi errore di sintassi qui: Static Public MyForm As Object[20].... magari cambialo così: Public MyForm[20] As Object
Poi errori determinati dalla presenza della parola "Static"...
Attenzione però ! Io lavoro conGambas 3 !!!

SU gambas 2 funzionava, sul 3 anche a me dice le stesse cose.
gb.info: si puo evitare
PrintPdf.show: per ragioni di dimensione ho tolto il form ed ho dimenticato di toglierlo, lo puoi spuntare
Per errori di sintassi è proprio li che non riesco ad uscirne.
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 03:01:26
Per errori di sintassi è proprio li che non riesco ad uscirne.

Public Sub Codabar(xpos As Float, ypos As Float, code As String, Optional starts As String = "A", Optional Ends As String = "A", Optional basewidth As Float = 0.35, Optional height As Float = 16)

Qua non va bene quell' Ends . Devi modificargli il nome. Basta aggiungere una lettera.
Non ricordo se ho dovuto aggiungere pure una virgola, tra un parametro e l'altro.


Aggiunta:
FMdi.MaxForm mi dà errore. Forse perché la classe non è dichiarata né istanziata....
Ho fatto come prima: le ho dato nome: mdi.

Sono arrivato ad un punto in cui non ho errori, ma non succede niente... cosa dovrebbe accadere quando lancio il tuo programma ?  ???
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 03:16:13
Per errori di sintassi è proprio li che non riesco ad uscirne.

Public Sub Codabar(xpos As Float, ypos As Float, code As String, Optional starts As String = "A", Optional Ends As String = "A", Optional basewidth As Float = 0.35, Optional height As Float = 16)

Qua non va bene quell' Ends . Devi modificargli il nome. Basta aggoingere una lettera.
Non ricordo se ho dovuto aggiungere pure una virgola, tra un parametro e l'altro.


Aggiunta:
FMdi.MaxForm mi dà errore. Forse perché la classe non è dichiarata né istanziata....
Ho fatto come prima: le ho dato nome: mdi.

Sono arrivato ad un punto in cui non ho errori, ma non succede niente... cosa dovrebbe accadere quando lancio il tuo programma ?  ???

per questo errore
Citazione
Public Sub Codabar(xpos As Float, ypos As Float, code As String, Optional starts As String = "A", Optional Ends As String = "A", Optional basewidth As Float = 0.35, Optional height As Float = 16)

è in PdfWriter, puoi anche eliminare la classe, è stata gia corretta da golia per gambas 3
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 03:18:49
Per errori di sintassi è proprio li che non riesco ad uscirne.

Public Sub Codabar(xpos As Float, ypos As Float, code As String, Optional starts As String = "A", Optional Ends As String = "A", Optional basewidth As Float = 0.35, Optional height As Float = 16)

Qua non va bene quell' Ends . Devi modificargli il nome. Basta aggoingere una lettera.
Non ricordo se ho dovuto aggiungere pure una virgola, tra un parametro e l'altro.


Aggiunta:
FMdi.MaxForm mi dà errore. Forse perché la classe non è dichiarata né istanziata....
Ho fatto come prima: le ho dato nome: mdi.

Sono arrivato ad un punto in cui non ho errori, ma non succede niente... cosa dovrebbe accadere quando lancio il tuo programma ?  ???

quando si apre il main apri altri form, poi riduci il main ad icona se anche gli altri form si riducono ad icona funziona, se invece glialtri form restano sullo schermo vuol dire che l'array non è stato caricato.
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 03:21:09
quando si apre il main apri altri form, poi riduci il main ad icona se anche gli altri form si riducono ad icona funziona, se invece glialtri form restano sullo schermo vuol dire che l'array non è stato caricato.
A me non si apre niente, non vengono sollevati errori, ma non si apre alcun Form.
Evidentemente c'è ancora qualche problema !  :-\
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 03:23:58
quando si apre il main apri altri form, poi riduci il main ad icona se anche gli altri form si riducono ad icona funziona, se invece glialtri form restano sullo schermo vuol dire che l'array non è stato caricato.
A me non si apre niente, non vengono sollevati errori, ma non si apre alcun Form.
Evidentemente c'è ancora qualche problema !  :-\

prova ad aprire il form clienti, per ragioni di dimensioni ho dovuto togliere molti form.
Titolo: Re: Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 03:33:47
Comunque volevo dirti che in via generale sono riuscito a caricare nell'array anche dei form già esistenti (nell'esempio 2 form).
Sono partito dal sorgente bozza da te allegato nei primissimi messaggi.
Il procedimento è sostanzialmente identico a quello fatto da me per i form creati da codice

Nel sorgente allegato posso vedere il nome dei due Form esistenti (non creati da codice) e posso ridimensionarli, prendendo il loro riferimento dall'array nel quale essi sono caricati.
Titolo: Re: Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 11:43:23
Comunque volevo dirti che in via generale sono riuscito a caricare nell'array anche dei form già esistenti (nell'esempio 2 form).
Sono partito dal sorgente bozza da te allegato nei primissimi messaggi.
Il procedimento è sostanzialmente identico a quello fatto da me per i form creati da codice

Nel sorgente allegato possono vedere il nome dei due Form esistenti (non creati da codice) e posso ridimensionarli, prendendo il loro riferimento dall'array nel quale essi sono caricati.

Provato e funziona, ora mi metto all'opera e cerco di adattarlo al mio programma.

Grazie Vuott

ps. come mai gabas 3 non tollera le funzioni static?
Titolo: Re: [risolto]Inserire form in un Array
Inserito da: dex - 08 Aprile 2012, 22:32:28
risolto
grazie alla pazienza di vuott sono riuscito a correggere il mio codice, ora funziona tutto.

Titolo: Re: [risolto]Inserire form in un Array
Inserito da: vuott - 08 Aprile 2012, 22:41:27
risolto
grazie alla pazienza di vuott sono riuscito a correggere il mio codice, ora funziona tutto.
Sono contento.  :coder:
Ti confesso che non avrei mai scommesso di poter essere d'aiuto fattivo  :o in una questione complessa come quella da te posta !
Titolo: Re: [risolto]Inserire form in un Array
Inserito da: dex - 15 Aprile 2012, 00:25:57
risolto
grazie alla pazienza di vuott sono riuscito a correggere il mio codice, ora funziona tutto.
Sono contento.  :coder:
Ti confesso che non avrei mai scommesso di poter essere d'aiuto fattivo  :o in una questione complessa come quella da te posta !

Mi hai aiutato a capire dove toppavo.

in allegato il programmino che grazie a te ho risolto.