Autore Topic: Progetto MDI  (Letto 799 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Progetto MDI
« il: 12 Novembre 2010, 13:43:37 »
ciao raga

vorrei provare a creare un progetto MDI con i form children inseriti nel Main, su Gambas nei suggerimenti al n° 12 c'è

Citazione
Con Gambas puoi fare in modo che qualsiasi form venga racchiuso in un altro form!
Per fare una cosa così utile devi soltanto inizializzare il form passando un contenitore padre come ultimo argomento nel costruttore.
Per esempio :
DIM hForm AS MyDialog
DIM hSuperControl AS MyForm

' Crea un dialogo
hForm = NEW MyDialog
' Inserisce un form in questo dialogo
' Nota che questo form riceve due parametri prima del contenitore
hSuperControl = NEW MyForm(Param1, Param2, MyDialog)
' Muove e ridimensiona il form
hSuperControl.Move(8, 8, 128, 64)
Ricorda che: un form racchiuso in un altro continua ad essere un form e quindi osservatore di eventi di se stesso.


Non riesco a capire cosa sono: Param1, Param2

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Progetto MDI
« Risposta #1 il: 12 Novembre 2010, 18:45:51 »
ciao raga

vorrei provare a creare un progetto MDI con i form children inseriti nel Main, su Gambas nei suggerimenti al n° 12 c'è

Citazione
Con Gambas puoi fare in modo che qualsiasi form venga racchiuso in un altro form!
Per fare una cosa così utile devi soltanto inizializzare il form passando un contenitore padre come ultimo argomento nel costruttore.
Per esempio :
DIM hForm AS MyDialog
DIM hSuperControl AS MyForm

' Crea un dialogo
hForm = NEW MyDialog
' Inserisce un form in questo dialogo
' Nota che questo form riceve due parametri prima del contenitore
hSuperControl = NEW MyForm(Param1, Param2, MyDialog)
' Muove e ridimensiona il form
hSuperControl.Move(8, 8, 128, 64)
Ricorda che: un form racchiuso in un altro continua ad essere un form e quindi osservatore di eventi di se stesso.


Non riesco a capire cosa sono: Param1, Param2

Param1 e Param2 sono degli eventuali parametri che passeresti al form che stai creando...in pratica l'esempio ti dice che per "inglobare" il form in un altro form, devi solo passarli il contenitore come ultimo parametro...se hai 2 parametri allora il conenitore dovrà essere il terzo, se hai 10 parametri dovrà essere l'undicesimo...capito?

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Progetto MDI
« Risposta #2 il: 12 Novembre 2010, 19:39:43 »
@dex

dopo il tuo post precedente mi sono messo a cercare, ho trovato l'help a cui accennavi e ho provato...mi esce una form nella form, ma senza bordo..e nessuna capacità di spostamento

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Progetto MDI
« Risposta #3 il: 12 Novembre 2010, 19:54:50 »
Spero di non dire grosse cavolate... e di non essere OT.  :-[
Da quanto ho capito grazie ai molteplici aiuti di Milio per creare una piattaforma MDI bisogna:

1) creare l'FMain con il WorkSpace dentro...

2) poi... creare tutte le Form che servono.

3) Nella creazione di ogni form è preferibile nella loro dichiarazione di apertura mettere un progressivo, che si fa dal _new(IdForm as Integer)

4) Quando andate ad aggiungere ogni form nel WorkSpace... dovete istanziare la form con tanto di progressivo...

Ad esempio:
Clicchi sul bottone "aggiungi_Form1" --> il codice sarà di questo tipo:

Public Frm as Form1

nel _new del FMain
Dim Id As Integer

Id = 0

Frm = New Form1(Id)  'As "Frm"   --> As "Frm" mettetelo se volete raggrupparle e richiamare i loro eventi dall'FMain, altrimenti potete non metterlo

Se volete aggiungere altri cloni della stessa Form basterà aumentare l'Id... E come si fa?
Appena instanziata la frm dategli un nome. In questo modo togliendo "Finestra" al nome saprete quale è il suo Id... Quindi basterà richiamare l'ultima istanza inserita e, togliendo "Finestra", vi rimane l'Id... che incrementate di +1 per la successiva aggiunta.

Frm.Name = "Finestra" & Id
Frm.Title = "FinestraContatti" (il titolo che vi piace...  ;) )

PS: io ho sofferto non poco a capire il tutto (anche perché non conosco proprio la programmazione) però adesso posso dire che ne è falsa la pena. Un progetto MDI è proprio bello! Magari rileggetevi attentamente il thread che avevo aperto qualche giorno fa sullo stesso argomento.
« Ultima modifica: 12 Novembre 2010, 19:59:04 da perseo »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Progetto MDI
« Risposta #4 il: 12 Novembre 2010, 21:18:44 »
@dex

dopo il tuo post precedente mi sono messo a cercare, ho trovato l'help a cui accennavi e ho provato...mi esce una form nella form, ma senza bordo..e nessuna capacità di spostamento

scusa mi posti il codice che hai usato?
da codice  tutto si può spostare sia panel che form senza bordo

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Progetto MDI
« Risposta #5 il: 12 Novembre 2010, 21:21:01 »
@perseo

ho seguito il tuo post, interessante ma personalmente non preferisco i workspace in quanto sono statici, preferisco i form che posso aprire simultaneamente posizionarli e dimensionarli come voglio.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Progetto MDI
« Risposta #6 il: 12 Novembre 2010, 22:19:48 »
 :) :ok:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Progetto MDI
« Risposta #7 il: 12 Novembre 2010, 22:33:20 »
@Ceskcho

Si l'esempio è chiaro e per l'ultimo argomento basta passargli il Main.

Ma i parametri che siano 2 0 10 cosa sono? coordinate x e y oppure W e H, le ho provate tutte ma andavano in errore, ho provato anche a non passare nessun parametro solo l'ultimo argomento ma nada.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Progetto MDI
« Risposta #8 il: 12 Novembre 2010, 22:50:40 »
@Ceskcho

Si l'esempio è chiaro e per l'ultimo argomento basta passargli il Main.

Ma i parametri che siano 2 0 10 cosa sono? coordinate x e y oppure W e H, le ho provate tutte ma andavano in errore, ho provato anche a non passare nessun parametro solo l'ultimo argomento ma nada.

Quando istanzi un nuovo form puoi passare dei parametri che potranno essere utili per diversi motivi...se ad esempio vuoi che il nuovo form venga posizionato nel punto x= 5 e y= 8 allora puoi fare una cosa tipo

Codice: gambas [Seleziona]
frmForm as Form

frmForm = NEW FormBase(5, 8)
frmForm.Show()


Successivamente nella sub _new() di FormBAse inserisci una cosa tipo, ad esmpio:

Codice: gambas [Seleziona]
PUBLIC SUB _new($x As Integer, $y As Integer)
   Me.ScreenX = $x
   Me.screenY = $y
END


Ecco a cosa servono i parametri....ovviamnete puoi farci di tutto con i parametri....

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Progetto MDI
« Risposta #9 il: 12 Novembre 2010, 23:49:49 »
amici miei al vs codice non ci avevo lontanamente pensato, sono ancorato a quello che conosco , me devo evolvere :'(

Codice: [Seleziona]
PUBLIC SUB Button1_Click()

  DIM hSuperControl AS Form
  hSuperControl = NEW Form(FMain)
  WITH hSuperControl
  .Width = 100
  .Height = 100
  .Background = &H0000FF00&
  .Border = 2
  .Text = "test"
  .top = 100
  .Left = 100
  .Show
  END WITH  

END

premesso che è una mia carenza ma l'esempio non mi è chiaro manco un po'
« Ultima modifica: 12 Novembre 2010, 23:52:30 da andy60 »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Progetto MDI
« Risposta #10 il: 15 Novembre 2010, 01:19:31 »
Raga niente da fare, usando questo codice il form inserito nel main perde il bordo e la possibilità di spostarlo. diventa  simile a un Panel.
A questo punto meglio utilizzare direttamente un Panel e spostarlo da codice.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Progetto MDI
« Risposta #11 il: 15 Novembre 2010, 06:46:29 »
Raga niente da fare, usando questo codice il form inserito nel main perde il bordo e la possibilità di spostarlo. diventa  simile a un Panel.
A questo punto meglio utilizzare direttamente un Panel e spostarlo da codice.

per fortuna il design non è tutto, io mi sono messo il cuore in pace, speedcrm sara' con unica form principale, barra laterale e a dx workspace

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto MDI
« Risposta #12 il: 15 Novembre 2010, 15:11:57 »
Provato a mettere WorkSpace all'interno di una ScrollBox?