Gambas-it

Gambas3 => Programmazione => Topic aperto da: allegfede - 02 Febbraio 2017, 14:17:24

Titolo: [RISOLTO] Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 02 Febbraio 2017, 14:17:24
Esigenza:
fare un widget che rappresenti i giorni della settimana sotto forma di "interruttore" che possono essere accesi o spenti e che abbiano nome "etichetta" il nome del giorno della settimana.

Interessante sarebbe che in base alla localizzazione, il primo pulsante del vettore i oggetti (di 7 elementi), si chiami Lunedi' in italia, ma Sunday in America del nord.
Infatti per gli anglosassoni il primo giorno della settimana e' domenica.

Qualcuno ha mai avuto un'esigenza del genere?

Qualche trucchetto interessante?

PS: questa "maschera di valiidita'" verra' salvata come binario 1001001 nel db a rappresentare quando il giorno N-simo e' abilitato (1) o no (0) :D
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: vuott - 02 Febbraio 2017, 16:56:22
Non debbo certo dirti io di cominciare almeno a proporre un possibile codice dell'aggeggio che vuoi realizzare.




Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 02 Febbraio 2017, 17:44:48
Prima di mettermi a ragionare su un componente nuovo vorrei chiederti:
Dovrebbe essere una specie di ibrido fra un ToogleButton e un MenuButton dal quale scegliere il nome del bottone?
Altrimenti occorre che ti spieghi meglio.

 :ciao:
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 02 Febbraio 2017, 17:49:30
non un vero e proprio componente, una sub veloce per fare questo comodo inserimento.

Per ora ho fatto cosi':

Codice: [Seleziona]
' Gambas class file
Public WeekButton As New ToggleButton[7]  'vettore dei bottoni di validita' settimanale

Public Sub SetInterface()
Dim i As Integer
Dim Bottone As ToggleButton
Dim GiorniDellaSettimana As String[] = Split("lunedì martedì mercoledì giovedì venerdì sabato domenica", " ")

  'creazione bottoni weekday
  WeekButton = New ToggleButton[7]
  For i = 0 To 6
     With bottone = New ToggleButton(Frame_Strategy) As "Tasto"
       .Text = GiorniDellaSettimana[i]
       .Width = 70
       .Height = TextBox_Nome.Height
       .Top = TextBox_Nome.Top
       .Value = True
       If i = 0 Then
          bottone.Left = TextBox_Nome.Left + TextBox_Nome.Width + 5
          Else
            bottone.Left = WeekButton[i - 1].Left + WeekButton[i - 1].Width + 5
       Endif
     End With
     WeekButton[i] = bottone
  Next

end

ma come e' evidente e' tutto un po' hard-coded ....
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 02 Febbraio 2017, 17:58:55
Ok do un'occhiata e poi ti faccio sapere se posso aiutare.

 :ciao:
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 02 Febbraio 2017, 18:08:16
ho anche aggiunto la gestione dell'evento click per il vettore di oggetti :D

Codice: [Seleziona]
Public Sub tasto_Click()
Dim indice As Integer

  indice = WeekButton.find(Last)
 
  If indice = -1 Then Return

  WeekButton[indice].Font.Bold = WeekButton[indice].Value
End
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: vuott - 02 Febbraio 2017, 18:12:55
Alcuni chiarimenti:

1) questo "Frame_Strategy", che suppongo sia un Oggetto Frame, va posto sul Form ? Voglio dire: chi è il suo Genitore ?

2) circa " Public WeekButton As New ToggleButton[7] ", avendo riutilizzato la parola-chiave "New" nella sotto-procedura, puoi anche evitare di creare quell'array di oggetti ToggleButton qui all'esterno. Puoi scegliere, insomma, come hai fatto appunto con l'oggetto "Bottone".

3) circa " Dim GiorniDellaSettimana As String[] = Split("lunedì martedì mercoledì giovedì venerdì sabato domenica", " ") ", ma... perché non effettui più semplicemente una dichiarazione esplicita e diretta dell'array ?  ???  Ossia:
 
Codice: [Seleziona]
Dim GiorniDellaSettimana As String[] = ["lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica"]
    :-\



Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: vuott - 02 Febbraio 2017, 18:18:14
...devo aggiungere che non riesco a vedere apparire nessun tasto.

Scusami, puoi allegare il progetto funzionante di quel semplice codice ?
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 02 Febbraio 2017, 18:26:21
...devo aggiungere che non riesco a vedere apparire nessun tasto.

Scusami, puoi allegare il progetto funzionante di quel semplice codice ?

+ 1  ;D
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 02 Febbraio 2017, 18:36:47
si e' un frame ... fanne uno qualunqu su un form.

tutto il codice e' grosso e dipende da moduli esterni, database etc.

si e' vero, potrei fare direttaemnte il vettore, ma vorrei avere una primitiva interna che mi dica in base al "locale":
1) da che giorno della settimana parte l'utente tipo (gb.firsdayofweek)
2) una funzione che in base al "locale" mi dica se 0=lunedi o 0=dominca etc tipo weekdayname(i)=stringa_opportuna :D
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 02 Febbraio 2017, 20:06:34
Scusa ma sto per uscire e potrò rivedere la cosa domani, ma tanto per capirci tu vorresti qualcosa di simile? Che facesse cosa?

Codice: [Seleziona]
' Gambas class file

Private $sGiorni As String[] = ["Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"]
Private $sDay As String[] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
Private $sWeek As String[]

Public Sub Form_Open()

  If System.Language = "it_IT.UTF-8" Then
    $sWeek = $sGiorni
  Else
    $sWeek = $sDay
  Endif
  SpinBox1.Value = 1

End

Public Sub SpinBox1_Change()
 
  ' simula ciò che decide il n. giorno
 
  If SpinBox1.Value = 0 Then SpinBox1.Value = 1
  ToggleButton1.Text = $sWeek[SpinBox1.Value - 1]

End

Public Sub ToggleButton1_Click()

  ' Cosa deve fare?

End
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: vuott - 02 Febbraio 2017, 22:13:22
tutto il codice e' grosso e dipende da moduli esterni, database etc.
T'ho capito, ma....... cioè...... mettiti nei nostri panni.   :violent:

Cerca di scrivere qualcosa di breve e funzionante. Eh !
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 02 Febbraio 2017, 22:15:54
tutto il codice e' grosso e dipende da moduli esterni, database etc.
T'ho capito, ma....... cioè...... mettiti nei nostri panni.   :violent:

Cerca di scrivere qualcosa di breve e funzionante. Eh !

 :rotfl:

Io mi accontenterei di capire cosa caspita vuole fare, possibilmente senza codice  :angel:
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 03 Febbraio 2017, 12:43:40
moh, capire mi sembra un po' troppo ...
al limite potete intuirmi :D

allegato mini test

PS: gianluigi, buona idea, ma sarebbe figa una cosa "generalizzata" in base al paese del mondo (arabo, russo, greco, etc :D)

PPS: un file delle stringhe come android? ed i riferiemnti alle label/text che puntano alla stringa n-esima?
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 03 Febbraio 2017, 15:48:28
Qualcosa ho fatto e qualcosa non ho capito

 :ciao:

Ok, ora ho capito e per me va bene anche l'allineamento  :ok:

Sei d'accordo? Non trovi che così possa funzionare bene?
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 03 Febbraio 2017, 17:25:37
grazie del supporto Gianluigi

e' un buon punto di partenza.

Comunque ho dato un occhio alla scheda "progetto" di gambas e ho notato che si puo' settare un progetto per traducibile.
E che nella stessa tendina del menu dell'ide di gambas c'e una voce "traduci".

In questo modo e' possibile abilitare una "tabella di conversione" delle stringhe da una lingua a l'altra ed il sistema si preoccupa di tradurre le label da una linguia al'altra.

Interessante. Non risolve la questione del primo giorno della settimana, ma sui nomi gia' ci aiuta parecchio :D
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 03 Febbraio 2017, 17:33:52
grazie del supporto Gianluigi

e' un buon punto di partenza.

Comunque ho dato un occhio alla scheda "progetto" di gambas e ho notato che si puo' settare un progetto per traducibile.
E che nella stessa tendina del menu dell'ide di gambas c'e una voce "traduci".

In questo modo e' possibile abilitare una "tabella di conversione" delle stringhe da una lingua a l'altra ed il sistema si preoccupa di tradurre le label da una linguia al'altra.

Interessante. Non risolve la questione del primo giorno della settimana, ma sui nomi gia' ci aiuta parecchio :D

Scusa non capisco ma l'esempio che ti ho inviato dovrebbe proprio risolvere come hai detto entrambe le cose, no?

O non capisco cosa chiedi?

Per essere più chiari le mie variazioni permettono di distinguere il mondo anglosassone (che parte con Sunday) dal resto (che parte con Mondey) e poi ho impostato le traduzioni.
Se poi ci sono mondi dove la settimana parte da altri giorni invece che un if usi un select e il gioco è fatto.
 :ciao:

A proposito System.Language = "en_US.UTF-8" mi potete dire se è corretto?
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 03 Febbraio 2017, 17:57:05
si si e' perfetto Gianluigi. Con il select e adatti ai vari usi e costumi :D

era una divagazione sul tema
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: Gianluigi - 04 Febbraio 2017, 15:02:13
si si e' perfetto ...

 :D Esagerato  ;D

Ho apportato dei cambiamenti che reputo più in stile Gambas (vedi Form1.class), bisogna ricordarsi che se si vuole fare un programma internazionale deve poter essere visibile anche su schermi piccoli e antiquati.

Se la prima casella di testo è una casella di invito potresti usare il componente InvBox.  :P

 :ciao: :ciao:

P.S. Avevo lasciato la variabile giorni come globale ma non serviva, scusate.
Titolo: Re:Generazione automatica di vettore di bottoni con etichetta localizzata
Inserito da: allegfede - 06 Febbraio 2017, 11:49:16
PERFETTO gianluigi:

Codice: [Seleziona]
  Dim ob As Object
  Dim b As Byte
  Dim sDaysWeek As String[]
 
  Select Case System.Language
    Case "en_US.UTF-8", "he_IL.UTF-8"
      sDaysWeek = [("Sunday"), ("Monday"), ("Tuesday"), ("Wednesday"), ("Thursday"), ("Friday"), ("Saturday")]
    Case "ar_SA.UTF-8"
      sDaysWeek = [("Saturday"), ("Sunday"), ("Monday"), ("Tuesday"), ("Wednesday"), ("Thursday"), ("Friday")]
    Case Else
      sDaysWeek = [("Monday"), ("Tuesday"), ("Wednesday"), ("Thursday"), ("Friday"), ("Saturday"), ("Sunday")]
  End Select
  For Each ob In ToolBar1.Children
    If Object.Type(ob) = "ToggleButton" Then
      Inc b
      If ob.Name = "ToggleButton" & b Then
         ob.Text = sDaysWeek[b - 1]
         ob.Value = True
      Endif
    Endif
  Next

il tuo codice mi sembra molto bello e completo :D