Autore Topic: Aggiornare il contenuto di una linguetta TabStrip  (Letto 1277 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Aggiornare il contenuto di una linguetta TabStrip
« il: 10 Luglio 2014, 15:21:24 »
Ancora difficoltà con le TabStrip. Ho cercato discussioni sull'argomento, ma non ho trovato niente che riguardasse come andare ad aggiornare una delle proprietà di una linguetta intermedia.

Supponiamo che ad un certo punto del lavoro, mi trovi una TabStrip con 6 linguette. Clicco su una di esse, per es. la terza, in modo da attivarla. Essa viene posta in primo piano e diventa immediatamente visibile. Agendo su un pulsante esterno alla TabStrip, scateno un evento che ha il compito di modificare il colore di foregrouand di una TextLabel ed il testo di una Label della linguetta correntemente attiva.

Ebbene, non cambia niente. Le proprietà modificate sono sempre quelle dell'ultima linguetta presente nella TabStrip. Sono intervenuto in diversi modi, anche forzando da codice il valore TabStrp.Index. La label modificata è sempre quella dell'ultima linguetta della TabStrip.
Ecco il codice scritto:
Codice: [Seleziona]
Print "TabSchede.countx= '" & TabSchede.count & "'"
 Print "TabSchede.index= '" & TabSchede.index & "'"
 Print "TabSchede.CoVoceCassa.Text= '" & CoVoceCassa.Text & "'"
 TabSchede.index = 3
 Label2.Text = "Prova"
 IdCassa.Foreground = iColorSfo
 For i = 0 To TabSchede.count - 1
   TabSchede.index = i
   Print "TabSchede.index= '" & TabSchede.index & "'"       
   Print "Label2.Text = '" & Label2.Text & "'"
   Print "IdCassa.Foreground = " & IdCassa.Foreground
Next

Citazione
TabSchede.countx= '6'
TabSchede.index= '2'

TabSchede.index= '3'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '1'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '2'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '3'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '4'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '5'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656

il Text "Prova"  è stato scritto una sola volta, mentre le Print lo riportano tante volte quanti sono  le schede di Tabstrip, così pure il colore del testo della IdCassa.
Pur cambiando Il puntamento TabSchede.index ogni volta, i valore riportati nelle Print sno sempre uguali.

C'è sisuramente qualcosa o qualche parametro che mi sfugge, eppure la documentazione di Gambas.org si esprime così nei riguardi della proprietà TabStripIndex
Citazione
TabStrip.Index (gb.qt4)
Property Index As Integer
Returns or sets the index of the current tab.

:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #1 il: 10 Luglio 2014, 18:50:11 »
Una possibile soluzione è quella che segue:


Codice: gambas [Seleziona]
Public Sub Form_Open()

  Dim j As Byte
  Dim tl As TextLabel
  Dim l As Label

' Inseriamo sei linguette:
  TabStrip1.Count = 6

  For j = 0 To 5

' Intestiamo ciascuna linguetta:    
    TabStrip1[j].Text = CStr(j)
' Prendiamo in considerazione la linguetta n. j :
    TabStrip1.Index = j
' Inseriamo una "TextLabel" nella linguetta in considerazione:
    With tl = New TextLabel(TabStrip1)
      .X = 40
      .Y = 100
      .W = 100
      .H = 50
      .Text = "TextLabel " & CStr(j)
      .Border = Border.Plain
    End With
    
' Inseriamo una "Label" nella linguetta in considerazione:
    With l = New Label(TabStrip1)
      .X = 40
      .Y = 200
      .W = 100
      .H = 50
      .Text = "Label " & CStr(j)
      .Border = Border.Plain
    End With
 
  Next

' Infine, mostriamo in primo piano la prima linguetta:
  TabStrip1.Index = 0

End


Public Sub Button1_Click()

  Dim ob As Object

' Prendiamo in considerazione gli oggetti posti sulla linguetta attualmente in primo piano:
  For Each ob In TabStrip1[TabStrip1.Index].Children
    Select Case Object.Type(ob)
      Case "TextLabel"
        ob.Foreground = Color.Red
      Case "Label"
        ob.Text = "Nuovo testo"
    End Select
  Next

End
« Ultima modifica: 10 Luglio 2014, 19:03:33 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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #2 il: 10 Luglio 2014, 22:12:28 »

Ebbene, non cambia niente. Le proprietà modificate sono sempre quelle dell'ultima linguetta presente nella TabStrip. Sono intervenuto in diversi modi, anche forzando da codice il valore TabStrp.Index. La label modificata è sempre quella dell'ultima linguetta della TabStrip.
Ecco il codice scritto:
Codice: [Seleziona]
Print "TabSchede.countx= '" & TabSchede.count & "'"
 Print "TabSchede.index= '" & TabSchede.index & "'"
 Print "TabSchede.CoVoceCassa.Text= '" & CoVoceCassa.Text & "'"
 TabSchede.index = 3
 Label2.Text = "Prova"
 IdCassa.Foreground = iColorSfo
 For i = 0 To TabSchede.count - 1
   TabSchede.index = i
   Print "TabSchede.index= '" & TabSchede.index & "'"       
   Print "Label2.Text = '" & Label2.Text & "'"
   Print "IdCassa.Foreground = " & IdCassa.Foreground
Next

Citazione
TabSchede.countx= '6'
TabSchede.index= '2'

TabSchede.index= '3'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '1'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '2'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '3'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '4'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656
TabSchede.index= '5'
Label2.Text = 'Prova'
IdCassa.Foreground = 16776656

il Text "Prova"  è stato scritto una sola volta, mentre le Print lo riportano tante volte quanti sono  le schede di Tabstrip, così pure il colore del testo della IdCassa.
Pur cambiando Il puntamento TabSchede.index ogni volta, i valore riportati nelle Print sno sempre uguali.

C'è sisuramente qualcosa o qualche parametro che mi sfugge, eppure la documentazione di Gambas.org si esprime così nei riguardi della proprietà TabStripIndex
Citazione
TabStrip.Index (gb.qt4)
Property Index As Integer
Returns or sets the index of the current tab.




...scusami ma il codice che hai postato non potrebbe comportarsi diversamente, infatti tu referenzi Label2.Text e IdCassa.Foreground che altro non sono se non i nomi.proprietà di due oggetti presenti in una ed una sola delle TAB, in pratica qualunque sia la tab attiva tu stai impostando le proprietà di quei due oggetti specifici.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #3 il: 11 Luglio 2014, 15:34:45 »
@ vuott:

Ti ringrazio per l'ampia codifica che mi hai suggerito come esempio, ma io non devo costruire una nuova linguetta, bensì aggiornare uno o più oggetti di una linguetta già esistente. In ogni caso, la prova che mi suggerisci
Codice: [Seleziona]
 Label2[indSk].Text = "Prova"
è stata già fatta è alla sua esecuzione mi viene segnalato l'errore
Citazione
Not an array

...scusami ma il codice che hai postato non potrebbe comportarsi diversamente, infatti tu referenzi Label2.Text e IdCassa.Foreground che altro non sono se non i nomi.proprietà di due oggetti presenti in una ed una sola delle TAB, in pratica qualunque sia la tab attiva tu stai impostando le proprietà di quei due oggetti specifici.

Forse io non ho capito come funziona una TabStrip, e se è così ogni chiarimento sarà più che gradito.
Secondo quanto capito dai documenti trovati e dal suo impiego pratico, mi pare che TabStrip sia considerabile un array grafico. Per la generazione degli oggetti interni a ciascuna linguetta, sono costretto a richiamare una procedura che si occupa di creare dentro gli oggetti che, nel mio caso, sono sempre gli stessi, per cui l'oggetto  Label2.Text non è definito una sola volta, bensì tutte le volte occorrenti, tante quante sono le linguette, via via generate:
Codice: gambas [Seleziona]

Public Sub _new(vTbParIn As Variant[])     ' costruttore della Form07.class
---- bla ---- bla _--- bla ----
 For i = 1 To vDatiTabStrip[0]
    CarTabStripCorr(i)
  Next
---- bla ---- bla _--- bla ----
End

Private Sub CarTabStripCorr(NumScheda As Integer)
---- bla ---- bla _--- bla ----
  If NumScheda = 1 Then
    ix = 0
  Else
    ix = (NumScheda - 1) * 17
  Endif
  If vDatiTabStrip[ix + 1] <> 999999999 Then
      AggiungiScheda(NumScheda)                 'inserisce la nuova linguetta
-------------------------------------------------------------------------   Le prossime istruzioni sono uno stralcio del metodo impiegato per la valorizzazione di alcune delle proprietà degli oggetti ---------------------------------------------------------------------------------   contenuti in una linguetta della Tabstrip
      IdCassa.Text = vDatiTabStrip[ix + 1]    ' IdMovvgg
      iCoVoce = vDatiTabStrip[ix + 2]
      EditNumCto = New EdtNumCto(iCoVoce)
      CoVoceCassa.Text = EditNumCto.$NuVoCto
      $DtCalend = Str(vDatiTabStrip[ix + 3])
      DtCont.Text = Right($DtCalend, 2) & "." & Mid($DtCalend, 5, 2) & "." & Left($DtCalend, 4)    ' DtCoMovg
      ProMovim.Text = vDatiTabS
---- bla ---- bla _--- bla ----
End

Private Sub AggiungiScheda(inuProSk As Integer)
'-----------------------------------------------------------
  With TabSchede
        .Count = inuProSk + 1   'aggiungo una nuova scheda
        .Index = .Count - 1     'predispongo l'azione sulla nuova scheda
        .Text = "Sk n." & CStr(inuProSk)
  End With

'--------------------------   disegno oggetti relativi al movimento di Cassa
  With Label2 = New Label(TabSchede) As "Label2"
        .X = 30
        .Y = 8
        .Width = 80
        .Height = 24
        .Alignment = 1      'Left
'        .Alignment = 3      'Center
        .Font.Name = "Sans Serif"
        .Font.Size = 11
        .Text = "Codice Id"
  End With
  With IdCassa = New TextLabel(TabSchede) As "IdCassa"
        .X = 32
        .Y = 29
        .Width = 62
        .Height = 24
        .Background = iColorFondo
        .Alignment = 3      'Center
        .Border = 2   'Sunken
        .Font.Name = "Sans Serif"
        .Font.Size = 10
        .Font.Bold = True
  End With
---- bla ---- bla _--- bla ----
End


Quindi, per tornare alla tua riflessione, Tutte le linguette contengono una label chiamata Label2 ed una TextLabel chiamata IdCassa.
Considerando, perciò, che la TabStrip è un array grafico e considerando che tutti le linguette contengono una TextLabel.IdCassa, riportante sempre lo stesso ordine gerarchico, ho cercato di capire come individuare quella appartenente ad una delle linguette già disegnate e definite via codice. Mi è tornata in aiuto la documentazione interattiva di Gambas, relativa alla proprietà Index dove si legge:
Citazione
Property Index As Integer
Returns or sets the index of the current tab.

Ho perciò creduto di potere indirizzare sia in lettura che in scrittura/aggiornamento una linguetta impostando l valore della proprietà .Index su di essa.

Io credo benissimo di sbagliare qualcosa, ma non ho capito come e dove. Forse, ora che ho riportato un pò più di codice,. potrete illustrarmi più dettagliatamente la corretta soluzione.
 ;D
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #4 il: 11 Luglio 2014, 17:54:53 »
Ti ringrazio per l'ampia codifica che mi hai suggerito come esempio, ma io non devo costruire una nuova linguetta, bensì aggiornare uno o più oggetti di una linguetta già esistente.
...Ma, in effetti, la parte essenziale, fondamentale del codice che t'ho suggerito è solo quella relativa alla routine dell'evento Button1_Click(); ove - appunto - avviene la modifica di una specifica proprietà per ciascuna dei due oggetti presenti nella linguetta in quel momento posta in primo piano.
La prima parte, che costruisce le linguette e i due oggetti su di esse posti, è stata riportata solo per completezza.


la prova che mi suggerisci
Codice: [Seleziona]
 Label2[indSk].Text = "Prova"
Perdonami, ma non vedo nel mio codice la riga ove t'ho suggerito una cosa di quel genere.  ???
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #5 il: 11 Luglio 2014, 22:15:21 »
@ vuot

Si scusa, non mi ero accorto. L'approntamento delle nuove istruzioni mi sta prendendo troppa attenzione e mi sfuggono le cose più lampanti.
Comunque, ora che ho visto il tuo suggerimento
Codice: [Seleziona]
For Each ob In TabStrip1[TabStrip1.Index].Children  
   Select Case Object.Type(ob) 
     Case "TextLabel" 
       ob.Foreground = Color.Red 
     Case "Label" 
       ob.Text = "Nuovo testo" 
   End Select 
 Next 
non mi pare che faccia al caso mio, perchè andrebbe a modificare tutte le label e tutte le Textlabel della linguetta attiva.
Grazie lo stesso.
:ciao:

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #6 il: 11 Luglio 2014, 22:17:15 »
credo che il problema non risieda nel funzionamento di TabStrip, ma nella gestione degli oggetti.
Con il tuo codice crei un dato numero di oggetti identici a cui assegni lo stesso nome, posizionandoli in diverse Tab del contenitore TabStrip.
Ora quando selezioni la Tab con TabStrip.Index = index, effettivamente quella Tab viene attivata, ma il comando per impostare il testo della label o il colore della textlabel, agiscono sull'ultimo oggetto , label o textlabel, instanziato dall'istruzione NEW, poichè il puntatore interno agli oggetti è impostato su quello.
In pratica per agire sugli oggetti della Tab attiva dovresti, dopo aver creato la nuova tab e le nuove Label o TextLabel:

Codice: [Seleziona]
Public Sub Button1_Click()
Dim o As Object
  tbs1.Index = 0
  For Each o In tbs1[0].Children
    If (String.Comp(o.Name, "idcassa", gb.IgnoreCase) = 0) Then
      o.Text = "idcassa"
      Else If (String.Comp(o.Name, "label2", gb.IgnoreCase) = 0) Then
        o.BackGround = Color.Red
    Endif
  Next
End
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #7 il: 12 Luglio 2014, 09:31:00 »
quando selezioni la Tab con TabStrip.Index = index, effettivamente quella Tab viene attivata, ma il comando per impostare il testo della label o il colore della textlabel, agiscono sull'ultimo oggetto , label o textlabel, instanziato dall'istruzione NEW, poichè il puntatore interno agli oggetti è impostato su quello.
???
Può darsi che io sia limitato, ma, dal mio punto di vista, non posso dire che Gambas sia intuitivo.

In pratica il codice che mi hai proposto è simile a quello già suggeritomi da vuott. Ho adeguato  il mio criterio di puntamento alla vostra soluzione e, a parte qualche piccolo dettaglio da affinare, sono riuscito ad ottenere l'effetto, secondo me, più opportuno per i miei scopi.
Riporto per completezza il codice aggiunto:
Codice: gambas [Seleziona]

 For Each oggetto In TabSchede[TabSchede.Index].Children
    Select Case Object.Type(oggetto) 
            Case "MsgNoTrov" 
            Case "IconMsgErro" 
            Case "Label15" 
              oggetto.Text = "M O V I M E N T I    C A N C E L L A T I"
            Case "Label16" 
              oggetto.Enabled = False
              oggetto.Visible = False
            Case Else 
              oggetto.Enabled = False
    End Select 
  Next 


Grazie a tutti e due per le vostre miratissime e, come sempre, corrette soluzioni.
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #8 il: 12 Luglio 2014, 19:26:31 »
Riporto per completezza il codice aggiunto:
Codice: gambas [Seleziona]

 For Each oggetto In TabSchede[TabSchede.Index].Children
    Select Case Object.Type(oggetto)  
            Case "MsgNoTrov"  
            Case "IconMsgErro"  
            Case "Label15"  
              oggetto.Text = "M O V I M E N T I    C A N C E L L A T I"
            Case "Label16"  
              oggetto.Enabled = False
              oggetto.Visible = False
            Case Else  
              oggetto.Enabled = False
    End Select  
  Next  
Scusa, ma non capisco  :-\ come da questa istruzione:
Codice: gambas [Seleziona]
Object.Type(oggetto)

tu possa aspettarti risultati come quelli che hai inserito: "MsgNoTrov", "IconMsgErro", "Label15", "Label16".

Il metodo Object.Type() non restituisce il Nome dell'oggetto, bensì il nome della Classe dell'oggetto.

Infatti, se io pongo su un Form tre Label (Label1, Label2, Label3), ed inserisco questo codice:
Codice: gambas [Seleziona]
Public Sub Form_Open()

  Dim ob As Object

   For Each ob In FMain.Children
     Print Object.Type(ob)
   Next

End

in console avrò semplicemente questo risultato:
Label
Label
Label
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #9 il: 14 Luglio 2014, 23:06:15 »
 :rolleyes:

Certo è che la TabStrp mi sta impegnando oltremodo. Non immaginavo di dovere soffrire tanto per modificare qualche proprietà al suo interno. Comunque in gran parte è andata. Dopo i vostri suggerimenti e l'ultima osservazione di vuott, ho cercato di entrare ancor più nel merito di codesto oggetto. Avevo notato qualche imperfezione nell'esecuzione in prova, ma non mi ero potuto soffermare sull'anomalia intravista, anomalia che rispecchiava perfettamente l'osservazione di vuott.
Tutte le linguette della mia TabStrip, riportano al loro interno gli stessi oggetti. Essi, a loro volta, sono organizzati in insiemi più piccoli come Panel e Frame e la modifica di alcune propietà come Text e Picture mi hanno dato veramente fiolo da torcere. Oggi ho quasi risolto; devo ancora modificare la picture di  un controllo pictureBox, interna all'unica Frame della linguetta.
A maggioor chiarimento di quanto fatto ed ancora da fare allego il file con le immagini della linguetta in modifica. La prima è l'immagine congelata prima del richiamo della procedura di modifica, la seconda è quella ottenuta dopo l'esecuzione delle istruzioni relative:
Codice: gambas [Seleziona]

Dim oObj As Object 
Dim oObj1 As Object

Dim $Grigio40 As String = "&H008F8F8F&"         'Grigio 40%"
Dim iColorSfo As Integer

Dim vNmFrame As Variant
Dim vNome As Variant

  For Each oObj In TabSchede[indSk].Children
    Select Case Object.Type(oObj) 
            Case "Frame"
              iColorSfo = Val($Grigio40)
              oObj.Background = iColorSfo
              vNmFrame = Object.GetProperty(oObj, "Name")
              For Each oObj1 In oObj.Children
                Select Case Object.Type(oOBj1)
                        Case "Label"
                          vNome = Object.GetProperty(oObj1, "Name")
                          If vNome = "Label15" Then
                              Object.SetProperty(oObj1, "Text", "R E C O R D S    C A N C E L L A T I")
                          Else
                            vNome = Object.GetProperty(oObj1, "Name")
                            If vNome = "Label16" Then
                                oObj1.Enabled = False
                                oObj1.Visible = False 
                            Endif
                          Endif
                        Case Else
                          vNome = Object.GetProperty(oObj1, "Name")
                          Object.SetProperty(oObj1, "Picture", "Picture.Load(user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png)")
                End Select
              Next
            Case Else 
              oObj.Enabled = False
    End Select 
  Next 


Non riesco ancora a capire come agire per caricare una nuova picture al posto di quella già attiva. Ricevo sempre l'errore
Citazione
Type mismatch: wanted Picture, got String instead

 :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #10 il: 14 Luglio 2014, 23:44:23 »
....devo ancora modificare la picture di  un controllo pictureBox, interna all'unica Frame della linguetta.

Codice: gambas [Seleziona]

.....
   Case Else
     vNome = Object.GetProperty(oObj1, "Name")
     Object.SetProperty(oObj1, "Picture", "Picture.Load(user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png)")
End Select


Non riesco ancora a capire come agire per caricare una nuova picture al posto di quella già attiva. Ricevo sempre l'errore
Citazione
Type mismatch: wanted Picture, got String instead

Ma se fai più semplicemente così ?
Codice: gambas [Seleziona]
...  
...  
   Case Else
     oObj1.Picture = Picture.Load("/percorso/del/file/immagine")
End Select
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #11 il: 15 Luglio 2014, 09:12:24 »
@ vuott:

Hp provato come hai proposto:
Codice: [Seleziona]
 oObj1.Picture = Picture.Load("user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png")
Io non ci avevo pensato, tuttavia non ha funzionato. Ora il messaggio di errore è diventato:
Citazione
Unable to load Picture

Ho provato anche con:
Codice: [Seleziona]
Dim vPictureLoad As Variant = "Picture.Load(user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png)"
---- bla ---- bla ----
Object.SetProperty(oObj1, "Picture", vPictureLoad)
É  però ritornato il messaggio di errore precedente:
Citazione
Type mismatch: wanted Picture, got String instead

A questo punto penso che opterò per creare un secondo oggetto pictuireBox, con l'assegnazione della nuova immagine, che attiverò quando mi servirà al posto di quella iniziale, anche se la soluzione non è brillante.  ;)


:ciao:

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #12 il: 15 Luglio 2014, 09:29:07 »
:rolleyes:


Codice: gambas [Seleziona]

  ...
              For Each oObj1 In oObj.Children
                Select Case Object.Type(oOBj1)
                        Case "Label"
                          vNome = Object.GetProperty(oObj1, "Name")
                          If vNome = "Label15" Then
                              Object.SetProperty(oObj1, "Text", "R E C O R D S    C A N C E L L A T I")
                          Else
                            vNome = Object.GetProperty(oObj1, "Name")
                            If vNome = "Label16" Then
                                oObj1.Enabled = False
                                oObj1.Visible = False  
                            Endif
                          Endif
                        Case Else
                          vNome = Object.GetProperty(oObj1, "Name")
                          Object.SetProperty(oObj1, "Picture", "Picture.Load(user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png)")
                End Select
              Next
            Case Else  
              oObj.Enabled = False
    End Select  
  Next  



 credo anche che, per semplificare il codice, tu possa scrivere:

Codice: gambas [Seleziona]

Dim oObj As Object
...
For Each oObj In Me.Controls
  Select Case oObj.Name
    Case "Label15"
          Object.SetProperty(oObj, "Text", "R E C O R D S    C A N C E L L A T I")  
...
  End Select
Next


per quanto riguarda la picture:
Codice: gambas [Seleziona]
Dim vPictureLoad As String = User.Home &/ "mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png""
 ...
    Case "pic1"
          Object.SetProperty(oObj, "Picture", Picture.Load(vPictureLoad))


tieni presente che la variabile User.Home viene tradotta nel percorso della home dell'utente, ma se la inserisci all' interno di una stringa non viene tradotta:
User.Home = /home/emanuele
"User.Home" = User.Home
« Ultima modifica: 15 Luglio 2014, 15:04:15 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #13 il: 15 Luglio 2014, 14:27:46 »
Hp provato come hai proposto:
Codice: [Seleziona]
 oObj1.Picture = Picture.Load("user.home" & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png")
Io non ci avevo pensato, tuttavia non ha funzionato. Ora il messaggio di errore è diventato:
Citazione
Unable to load Picture

Come ha accennato sotema, c'è un problema di percorso del file immagine, in quanto la riga di comando da me suggerita è in sé corretta. Infatti il metodo tenta di caricare i dati dell'immagine.
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Aggiornare il contenuto di una linguetta TabStrip
« Risposta #14 il: 15 Luglio 2014, 14:59:43 »
Relativamente alle istruzioni suggerite
1. da vuott: oObj1.Picture = Picture.Load(vPictureLoad) 

2.  da sotema: Object.SetProperty(oObj1, "Picture", Picture.Load(vPictureLoad)) 
[/quote]

vi confermo che funzionano entrambi. Per completezza riporto la riga di dichiarazione della Dim...variant:
Codice: [Seleziona]
Dim vPictureLoad As Variant = user.home & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png"

Ora va tutto bene.

credo anche che, per semplificare il codice, tu possa scrivere:

Codice: gambas [Seleziona]

Dim oObj As Object
...
For Each oObj In Me.Children   
  Select Case oObj.Name
    Case "Label15"
          Object.SetProperty(oObj, "Text", "R E C O R D S    C A N C E L L A T I") 
...
  End Select
Next


Codesto codice invece non funziona, perchè considera solamente gli oggetti a livello elementare contenuti nella Form; quindi,
 TabSchede senza tutti i livelli sottostanti, partire dalle linguette aggiunte durante l'esecuzione del programma,
PulsAnnull
per quanto riguarda la picture:
Codice: gambas [Seleziona]
Dim vPictureLoad As String = User.Home &/ "mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/draw-eraser.png""
 ...
    Case "pic1"
          Object.SetProperty(oObj, "Picture", Picture.Load(vPictureLoad))


tieni presente che la variabile User.Home viene tradotta nel percorso della home dell'utente, ma se la inserisci all' interno di una stringa non viene tradotta:
User.Home = /home/emanuele
"User.Home" = User.Home

:ciao: