Autore Topic: MessageBox.Fai-da-Te vuole diventare sempre più automatica  (Letto 694 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Dopo avere superato l'ostacolo "costruire una MessageBox.Fai-da-Te", ho pensato che sarebbe bello potere richiamare l'oggetto col messaggio da visualizzare in qualsiasi Form di un programma. Per ottenere ciò ho immaginato una nuova Classe dentro la quale dovrei disegnare, esclusivamente e rigorasamente tramite codice, un contenitore Frame, al cui interno tracciare sia la textEdit che il Button "OK". Naturalmente occore  passare alla suddetta nuova classe i parametri relativi alla Form chiamante, alle coordinate,  all'altezza ed alla larghezza della TextEdit da visualizzare. Ho anche approcciato il codice necessario per arrivare intanto alla visualizzazione del nuovo oggetto. Volevo fare una bella sorpresa a tutti Voi, ma ho cozzato ancora contro il muro della mia ignoranza  :hard:, per cui sono qui per apprendere da chi ha già realizzato il disegno di un oggetto come una Form, una TextBox, un Button, una Label, .... con la sola scrittura di codice Gambas, il metodo di realizzazione.
Io ho scritto intanto le righe di codice necessario per chiamare la nuova classe:
Codice: gambas [Seleziona]

Dim iX As Integer
Dim iY As Integer
Dim iH As Integer
Dim iW As Integer

Dim MsgBoxMio As MessageBoxMio

  $MsgMio = "<TABLE>" &
  "<TR><TD width=100% align=center colspan=2> <B>ATTENZIONE!</b>< HR SIZE = 3 WIDTH = 100%></TD></TR>" &
  "<Tr><TD width=3% rowspan=2><IMG src= /home/piero/gambas3-sorgenti/comp/src/gb.form.stock/stock/scalable/warning.svg HEIGHT=48 WIDTH=48></TD>" &
      "<TD width=97%> <BR>Nessun Conto inizia col NOME digitato</TD></TR>" &
  "<TR><TD width=97%>------------------ Correggi ------------------</TD></TR></TABLE>"
  iX = Me.X
  iY = Me.Y
  iH = Me.H
  iW = Me.W
  MsgBoxMio = New MessageBoxMio(Me, iX, iY, iH, iW, $MsgMio)


e fin qui non ho avuto difficoltà, perché le istuzioni sono state eseguite e la classe "MessageBoxMio" é stata chiamata puntualmente. Essa, svegliata dalla chiamata, ha cominciato ad esguire il codice che vi ho inserito:
Codice: gambas [Seleziona]


Public Sub _new(FormAct As Object, iX As Integer, iY As Integer, iH As Integer, iW As Integer, $Msg As String)
Dim MsgMioFrame As Object
Dim MsgMio As Object
Dim MsgMioOk As Object
'----------------------------------------
 With FormAct.Frame
   .Name = MsgMioFrame
   .W = iW 
   .H = iH + 40
   .X = iX 
   .Y = iY
   .visible = True
   .enabled = True 
 End With 
  With FormAct.MsgMioFrame.TextEdit"Unknown symbol 'Frame' in class 'Form71' in MessageBoxMio:8."
   .Name = MsgMio
   .W = iW 
   .H = iH
   .X = iX 
   .Y = iY
   .visible = True
   .enabled = True 
 End With 
 With FormAct.MsgMioFrame.Button
   .Name = MsgMioOk
   .W = iW 
   .H = iH
   .X = iX + (iH / 2)
   .Y = iY + iH + 5
   .visible = True
   .enabled = True 
 End With 
End

Il problema é sorto subito. L'unica cosa che ha funzionato é il riconoscimento della Form ricevuta come oggetto in "FormAct"
ma, all'esecuzione dell'istruzione  With FormAct.Frame ricevo al seguente segnalazione di errore:
Citazione
"Unknown symbol 'Frame' in class 'Form71' in MessageBoxMio:8."
Capisco che Gambas non riconosce l'ordine di disegnare una frame coi parametri indicati all'intermo dell'istruzione Width, perché la parola fFame gli risulta sconosciuta o gli risulta incomprensibile l'azione che gli sto chiedendo.  ???
 :(
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: MessageBox.Fai-da-Te vuole diventare sempre più automatica
« Risposta #1 il: 12 Ottobre 2012, 10:06:06 »
Prova a usare le proprietà AutoResize, Arrangement, Expand, Margin, Spacing, Padding...

Prova a giocare con questi parametri, tra gli oggetti grafici.

In alternativa, devi tener presente che gli oggetti figli devono far riferimento alle proprietà CLient<qualcosa> dell'oggetto parent, e non sulle dimensione reali dell'oggetto parent, altrimenti hai errori grafici visibili.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: MessageBox.Fai-da-Te vuole diventare sempre più automatica
« Risposta #2 il: 12 Ottobre 2012, 18:47:10 »
Prova a usare le proprietà AutoResize, Arrangement, Expand, Margin, Spacing, Padding...

Prova a giocare con questi parametri, tra gli oggetti grafici.
Non ho capito granché come provare le proprietà a cui ti riferisci. Sono quelle legate alla Frame o alla Form genitrice?

Citazione da: md9327
In alternativa, devi tener presente che gli oggetti figli devono far riferimento alle proprietà CLient<qualcosa> dell'oggetto parent, e non sulle dimensione reali dell'oggetto parent, altrimenti hai errori grafici visibili.
Cioé? Mi potresti fare un esempio? Io, purtroppo, come sai, per capire ho bisogno di tempo e tante, ... tante spiegazioni.  :-\
 :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: MessageBox.Fai-da-Te vuole diventare sempre più automatica
« Risposta #3 il: 15 Ottobre 2012, 18:16:40 »
SPiegare una cosa così grafica è un pò problematico...

Le proprietà cui faccio riferimento sono più o meno comuni a tutti gli oggetti grafici.
Tieni presente che gli oggetti Frame (ad esempio le Form, xBox, Frame, ecc.) hanno proprietà e abilitazioni per poter condizionare il dimensionamento dei propri oggetti. Di contro, gli oggetti figli hanno proprietà analoghe, ovvero possono rispondere a eventi di ridimnsionamento scatenate dal parent, e modificare le proprie caratteristiche in base a determinate regole. Ovviamente per alcune, le condizioni sono limitate a determinate opzioni.

Combiando oggetti frame, e proprietà varie, puoi gestire l'aspetto grafico di una finestra.
Dirti come fare, qui nel forum, o anche con un esempio la vedo dura, anche perchè non sò esattamente cosa vuoi ottenere.
In alcuni casi, su cui magari non si riesce a risolvere solo con l'impostazioni delle sole proprietà, allora si può agire a livello di codice, attraverso la creazione degli stessi, all'apertura della Form, oppure allo scatenarsi di determinati eventi.

Per poteri dare una valida mano, dovresti descrivere meglio cosa vuoi ottenere...  :-\

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: MessageBox.Fai-da-Te vuole diventare sempre più automatica
« Risposta #4 il: 15 Ottobre 2012, 18:59:55 »
SPiegare una cosa così grafica è un pò problematico...

Per poteri dare una valida mano, dovresti descrivere meglio cosa vuoi ottenere...  :-\

Mi rendo conto. Rivedrò allora più approfonditamente quello che ho scritto, associandovi il tuo concetto, e dopo ... ti dirò.  :)
Intanto, graaazie!  :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: MessageBox.Fai-da-Te vuole diventare sempre più automatica
« Risposta #5 il: 16 Ottobre 2012, 12:34:45 »
Fatti una form di prova, e giocaci...  :D
Vedrai che scopri parecchie cosette...