Gambas-it

Gambas3 => Programmazione => Topic aperto da: kicco - 19 Maggio 2016, 19:57:42

Titolo: Bottone in una TableView
Inserito da: kicco - 19 Maggio 2016, 19:57:42
È possibile inserire un bottone in una cella di una TableView?
In giro non ho trovato niente! :-\
 :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 19 Maggio 2016, 20:45:05
Una tableview è una gridview con in più una textbox o una combobox per gli inserimenti, forse usando come campione il codice di Minisini che puoi vedere in gb.form si potrebbe fare.
Ma a cosa ti servirebbe fare una cosa così, se è lecito chiedere, magari c'è un'altra soluzione.
 :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Golia - 19 Maggio 2016, 21:24:35
Una soluzione potrebbe essere quella di inserire un'immagine del tasto.
Ti ho fatto un'esempio in velocità
Titolo: Re:Bottone in una TableView
Inserito da: kicco - 19 Maggio 2016, 22:19:53
Citazione
Ma a cosa ti servirebbe fare una cosa così, se è lecito chiedere, magari c'è un'altra soluzione.
Allora, ho una tabella nella quale su ogni riga ho i dati di di un dispositivo che interrogo via USB, mi serve avere uno storico  di questi risultati (pensavo a 5 dati che corrispondono a 5 righe) che vorrei vedere cliccando su un pulsante che ovviamente sia in relazione alla riga analizzata. Ho provato ad usare pulsanti esterni alla TextView e tutto funziona a patto che la tabella non si allunghi e diventi scorrevole con i cursori laterali. A quel punto la corrispondenza va persa.
Citazione
Una soluzione potrebbe essere quella di inserire un'immagine del tasto.
La soluzione sarebbe perfetta se già non usassi l'evento  TableView_click per effettuare l'editing di alcuni campi della tabella.
Dovrei forse provare a filtrarli...

Gianluigi, proposte alternative ben vengano!
 :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 19 Maggio 2016, 22:35:12
Intanto che penso a qualcosa di alternativo, ti allego il file di Golia che mi sono permesso di cambiare, magari ti può servire da spunto.
 :ciao:

Per forza occorre usare tableview_click ma puoi aggiungere un pulsante che ti pone una variabile globale a es. True quando devi editare e false quando vuoi usare il pulsante.
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 20 Maggio 2016, 01:13:02
Intanto che penso a qualcosa di alternativo, ti allego il file di Golia che mi sono permesso di cambiare, magari ti può servire da spunto.
Il tuo codice può contenere il problema paventato da kicco (" tutto funziona a patto che la tabella non si allunghi e diventi scorrevole con i cursori laterali. A quel punto la corrispondenza va persa."), qualora la tabella interna della TableView nel tuo programma venga as assumere una dimensione (data dalla somma delle altezze di tutte le righe presenti) superiore all'oggetto TableView (determinando così la comparsa dei cursori laterali e la capacità di scorrere in alto ed in basso).
La TableView, come anche la GridWView, possiede come proprio oggetto Children una ScrollArea, la quale consente - muovendo i cursori laterali in basso ed in alto - di poter osservare tutta la TableView, qualora la somma delle altezze delle righe in essa presenti superi l'altezza della TableView medesima.
Se si presenta questa circostanza anche con il tuo codice, la corrispondenza del Button con una determinata cella si perde facendo scivolare con i cursori laterali la ScrollArea della TableView in basso o in alto.

Ad ogni modo si dovrà utilizzare proprio l'oggetto figlio della TableView, ossia la ScrollArea, come base sulla quale porre eventuali oggetti (come appunto i Button), avendo cura di ancorarli saldamente per evitare la perdita di corrispondenza con lo scorrere in alto ed in basso della ScrollArea.

Propongo questo codice:
Codice: [Seleziona]
Private bt As Button
Private sa As ScrollArea


Public Sub Form_Open()

  Dim b As Byte
  Dim obs As Observer

  With TableView1
    .Columns.Count = 4
' Volutamente creiamo una "TableView" la cui altezza sia minore della somma delle altezze delle righe in essa contenute:'
    .Rows.Count = 30
  End With

  sa = TableView1.Children[0]

  obs = New Observer(sa) As "Scrollo"

' Creiamo due Button da porre nella "TextView":'
  For b = 1 To 2
    With bt = New Button(sa) As "Tasto"
      .X = 0
      .Y = TableView1.Rows[b].Y
      .W = 40
      .H = TableView1.Rows.H
      .Name = CStr(b)
      .Text = CStr(b)
    End With
  Next

End


Public Sub Tasto_Click()
 
  Print "E' stato premuto il tasto: "; Last.Name
 
End


Public Sub Scrollo_Scroll()

  Dim ob As Object
  Dim b As Byte
 
  For Each ob In sa.Children
    Inc b
  ' Le risorse, che ci servono, sono le proprietà ".ScrollY" e ".ScrollX" della "ScrollArea" '
    ob.Y = TableView1.Rows[b].Y - sa.ScrollY
    ob.X = TableView1.Columns[0].X - sa.ScrollX
  Next
 
End
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 20 Maggio 2016, 11:37:10
@vuott
hai ragione, il codice da me proposto è sbagliato.
Vedrò se posso rimediare.
@Kicco
allego proposta alternativa
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 20 Maggio 2016, 15:44:45
@vuott
hai ragione, il codice da me proposto è sbagliato.
Vedrò se posso rimediare.

Forse ho rimediato, vedere allegato prego.
 :ciao: :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 20 Maggio 2016, 17:28:49
Forse ho rimediato
Non ancora: dopo aver fatto apparire il tasto in una cella della TextView, se si fa scorrere qualunque dei due cursori, il tasto scompare.
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 20 Maggio 2016, 17:40:10
Forse ho rimediato
Non ancora: dopo aver fatto apparire il tasto in una cella della TextView, se si fa scorrere qualunque dei due cursori, il tasto scompare.

È fatto volutamente altrimenti rimarrebbe lo stesso tasto di quella cella vecchia, mentre credo che Kicco voglia poter inviare a un file il contenuto di quello che contiene la cella o la riga corrente.
Credo, almeno io ho capito così  :-\

Piuttosto prima che mi bacchetti ulteriormente ti dico già che la mia "proposta alternativa" è super bacata  :P
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 20 Maggio 2016, 18:18:10

@Kicco
allego proposta alternativa
 :ciao: :ciao:

Ora funziona in modo semplice e mi sembra quello giusto.
Con questo salvi le righe che vuoi con "Sciacca pomello" le celle che vuoi.
Di più nin so
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: kicco - 20 Maggio 2016, 19:35:01
 :ciao:
Mi avete letteralmente ricoperto di esempi :D
Quello che cercavo è nel codice che Vuott a postato. Effettivamente cercavo proprio di mettere un pulsante dentro la cella di una colonna in ogni riga. I tuoi esempi Gianluigi sono interessanti ma fanno un'altra cosa, per questo li ho messi per ora da parte, potrebbero venire comodi per un altra parte del programma!
Vuott, faccio il rompiballe, ho impiegato nella tabella le intestazioni (TableView1.Header=3), così vedo sia l'intestazione delle colonne sia quella delle righe. Quando scorro in verticale i bottoni mi vanno a finire sull'intestazione.
Adesso devo preparare la cena per la truppa poi do un'occhiata!

Grazie a tutti! :-* :-* :-*
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 20 Maggio 2016, 19:55:53
...
 Effettivamente cercavo proprio di mettere un pulsante dentro la cella di una colonna in ogni riga.
...

Vuoi dire che se hai 10000 righe inserisci 10000 pulsanti  :o

 :ciao:
Aggiungo una adattamento a SciaccaPomello che forse non hai considerato, o proprio non riesco a capire?  :rolleyes:
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: kicco - 20 Maggio 2016, 22:00:26
Citazione
Vuoi dire che se hai 10000 righe inserisci 10000 pulsanti
Sììììììììììì, un mare di pulsanti che salgono e scendono dalle onde! :P
No Gianluigi, lo so che giocando coi database sei abituato a maneggiare tanti e tanti record.
Io nella lista ho al massimo massimo 50 righe. Nella realtà di norma non sono che una decina, e come piegavo sono relativa ognuna ad una apparecchiatura che interrogo via USB e raccolgo i messaggi di risposta che aggiorno in ogni riga (relativa ad una apparecchiatura). IL pulsante mi serve per aprire una TextAea nella quale riporto gli ultimi 5 record che mi servono per capire, se c'è stato un problema pregresso senza andare ad analizzare il log generale, che ha tutte le informazioni, ma che vanno spulciate con pazienza. Così invece capisco al volo se nel corso di una giornata il messaggio di malfunzionamento è già arrivato.
La frequenza dei messaggi di malfunzionamento puo essere anche di 4 ore, giusto per intenderci.
 :ciao: :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 20 Maggio 2016, 23:44:24
...ho impiegato nella tabella le intestazioni (TableView1.Header=3), così vedo sia l'intestazione delle colonne sia quella delle righe. Quando scorro in verticale i bottoni mi vanno a finire sull'intestazione.
Mostrami il codice dell'Evento _Scroll() dell'oggetto Figlio: "ScrollArea", perché la questione si risolve al suo interno.
Inoltre mi devi dire se i tasti vengono posti tutti in un'unica colonna o se vengono posti in colone diverse.
 
Titolo: Re:Bottone in una TableView
Inserito da: kicco - 21 Maggio 2016, 19:13:52
Credo e spero di averti allegato le cose giuste!
A parte il fatto che praticamente è tutto codice tuo!  :)
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 21 Maggio 2016, 20:19:24
I Button, da come si puòvedere, restano ancorati alla riga della TableView, ove sono stati impostati. Pertanto, in questo il mio codice è pienamente efficace producemdo l'effetto voluto.

...sì, ho notato che da un punto di vista visivo i Button, quando si trovano al di sopra della prima riga si mostrano al di sopra della riga di Intestazione (header) della TableView.
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 21 Maggio 2016, 21:13:38
...attualmente non so come creare l'effetto del passaggio degli oggetti al di sotto della riga dell'header della TableView.
Nel frattempo possiamo ricreare più o meno un effetto "sparizione/apparizione" degli oggetti, quando si trovano nei pressi dell'header con un codice che va a modificare, come segue, l'ultima routine del codice che hai allegto:

Codice: [Seleziona]
Private c As Short          '  Va aggiunta questa variabile Globale ! '

.......
.......

Public Sub Scrollo_Scroll()
     
  Dim ob As Object
  Dim b As Byte

  c += sa.ScrollY

  For Each ob In sa.Children
    Inc b
    ob.Visible = True
    If ob.Y < TableView1.Rows[1].Y - (ob.H / (TableView1.Rows[1].Y * 0.3)) Then ob.Visible = False
    ob.Y = TableView1.Rows[b].Y - sa.ScrollY
    ob.X = TableView1.Columns[4].X - sa.ScrollX + 40
  Next

' Forse questo passaggio si può semplificare un po'.....  :-D
  If sa.Children[0].Y < (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3)) Then sa.Children[0].Visible = False
  If (sa.Children[0].Y > (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3))) And (sa.Children[1].Y >= TableView1.Rows[1].H) Then sa.Children[0].Visible = True
     
End
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 22 Maggio 2016, 14:42:06
Citazione
Vuoi dire che se hai 10000 righe inserisci 10000 pulsanti
Sììììììììììì, un mare di pulsanti che salgono e scendono dalle onde! :P
No Gianluigi, lo so che giocando coi database sei abituato a maneggiare tanti e tanti record.
Io nella lista ho al massimo massimo 50 righe. Nella realtà di norma non sono che una decina, e come piegavo sono relativa ognuna ad una apparecchiatura che interrogo via USB e raccolgo i messaggi di risposta che aggiorno in ogni riga (relativa ad una apparecchiatura). IL pulsante mi serve per aprire una TextAea nella quale riporto gli ultimi 5 record che mi servono per capire, se c'è stato un problema pregresso senza andare ad analizzare il log generale, che ha tutte le informazioni, ma che vanno spulciate con pazienza. Così invece capisco al volo se nel corso di una giornata il messaggio di malfunzionamento è già arrivato.
La frequenza dei messaggi di malfunzionamento puo essere anche di 4 ore, giusto per intenderci.
 :ciao: :ciao: :ciao:

 :ok: Finalmente, buon ultimo, ho capito anch'io  :P

...attualmente non so come creare l'effetto del passaggio degli oggetti al di sotto della riga dell'header della TableView.
Nel frattempo possiamo ricreare più o meno un effetto "sparizione/apparizione" degli oggetti, quando si trovano nei pressi dell'header con un codice che va a modificare, come segue, l'ultima routine:

Codice: [Seleziona]
Private c As Short          '  Va aggiunta questa variabile Globale ! '

.......
.......

Public Sub Scrollo_Scroll()
     
  Dim ob As Object
  Dim b As Byte

  c += sa.ScrollY

  For Each ob In sa.Children
    Inc b
    ob.Visible = True
    If ob.Y < TableView1.Rows[1].Y - (ob.H / (TableView1.Rows[1].Y * 0.3)) Then ob.Visible = False
    ob.Y = TableView1.Rows[b].Y - sa.ScrollY
    ob.X = TableView1.Columns[4].X - sa.ScrollX + 40
  Next

' Forse questo passaggio si può semplificare un po'.....  :-D
  If sa.Children[0].Y < (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3)) Then sa.Children[0].Visible = False
  If (sa.Children[0].Y > (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3))) And (sa.Children[1].Y >= TableView1.Rows[1].H) Then sa.Children[0].Visible = True
     
End

Purtroppo non ho ancora approfondito, ma ti comunico che io di questo codice potrei farne a meno che funziona lo stesso.
Codice: [Seleziona]
' Forse questo passaggio si può semplificare un po'.....  :-D
  If sa.Children[0].Y < (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3)) Then sa.Children[0].Visible = False
  If (sa.Children[0].Y > (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3))) And (sa.Children[1].Y >= TableView1.Rows[1].H) Then sa.Children[0].Visible = True
:ciao: :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 22 Maggio 2016, 15:11:14
... ti comunico che io di questo codice potrei farne a meno che funziona lo stesso.
Codice: [Seleziona]
' Forse questo passaggio si può semplificare un po'.....  :-D
  If sa.Children[0].Y < (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3)) Then sa.Children[0].Visible = False
  If (sa.Children[0].Y > (TableView1.Rows[1].Y - (sa.Children[0].H * 0.3))) And (sa.Children[1].Y >= TableView1.Rows[1].H) Then sa.Children[0].Visible = True

Hai ragione.
Evidentemente nei vari aggiustamenti del codice sovrastante, avevo trovato la soluzione e non mi ero accorto che era sufficiente.  :D
Titolo: Re:Bottone in una TableView
Inserito da: kicco - 22 Maggio 2016, 17:08:29
 :ciao:
Intanto grazie!
Le due righe di codice apparentemente inutili, a me risultano decisive altrimenti dopo lo scorrimento verso il basso nella prima riga scompare il pulsante.
V'è anche da notare che l'altezza della TableView dovrà essere un multiplo esatto di righe altrimenti diventa dura la gestione grafica di un mezzo-tasto.
Lo scrivo come considerazione per successivi lettori-utenti.
 :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 22 Maggio 2016, 17:18:04
Le due righe di codice apparentemente inutili, a me risultano decisive altrimenti dopo lo scorrimento verso il basso nella prima riga scompare il pulsante.
Sì, è vero: se si effettua il ritorno in alto del cursore laterale, il primo tasto (in alto) non ricompare. Questo problema a me avviene, pro, solo quando il ritono in alto è effettuato velocemente. Al contrario, se viene effettuato lentamente, il prmo tasto ricompare regolarmente.
Probabilmente, quando ho deciso di inserire quelle due righe in basso, l'ho fatto perché facendo risalire velocemente il cursore laterale, non ricompariva il primo Button.
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 22 Maggio 2016, 18:23:20
Le due righe di codice apparentemente inutili, a me risultano decisive altrimenti dopo lo scorrimento verso il basso nella prima riga scompare il pulsante.
Sì, è vero: se si effettua il ritorno in alto del cursore laterale, il primo tasto (in alto) non ricompare. Questo problema a me avviene, pro, solo quando il ritono in alto è effettuato velocemente. Al contrario, se viene effettuato lentamente, il prmo tasto ricompare regolarmente.
Probabilmente, quando ho deciso di inserire quelle due righe in basso, l'ho fatto perché facendo risalire velocemente il cursore laterale, non ricompariva il primo Button.

Con o senza le due righe di codice, ma più accentuato senza se agisco sulla barra della scroll velocemente mi da problemi specialmente in giù vedi immagine.
Non sempre un po si un po no
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 10 Ottobre 2016, 18:01:58
Il post spagnolo sulle checkbox (http://www.gambas-it.org/smf/index.php?topic=5164.msg39124#msg39124) in una gridview mi ha fatto riconsiderare il suggerimento di Golia.
Allego progetto funzionante, e già che c'ero ho inserito una modifica per spostarsi fra le celle con tasto TAB.

 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Golia - 11 Ottobre 2016, 14:37:00
Ciao Gianluigi
Ho letto il post spagnolo e appunto volevo chiedere se si può risolvere il discorso del tab, che (almeno per me) è molto utile per spostarsi nella griglia.
Non ho fatto in tempo a scrivere che già avevi preso in considerazione il problema  :)

Non si può intercettare il tab?
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 11 Ottobre 2016, 14:45:32
...volevo chiedere se si può risolvere il discorso del tab, che (almeno per me) è molto utile per spostarsi nella griglia.

Non si può intercettare il tab?
...questione interessante.   (http://www.timelessgaming.com/timeless/forum/images/smilies/thinking.gif)
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 11 Ottobre 2016, 14:50:02
Ciao Gianluigi
Ho letto il post spagnolo e appunto volevo chiedere se si può risolvere il discorso del tab, che (almeno per me) è molto utile per spostarsi nella griglia.
Non ho fatto in tempo a scrivere che già avevi preso in considerazione il problema  :)

Non si può intercettare il tab?

Modestamente "so mago"  ;D

Tieni conto che con invio (basta abituarsi) ottieni la stessa cosa, è vero però che siamo tutti abituati a spostarci con tab e visto che ti interessa proverò ancora con qualche esperimento.
È chiaro comunque che Gambas anticipa anche Observer e allora... forse mettendolo pubblico?
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 11 Ottobre 2016, 15:04:11
Bastava mettere prima un normale Stop Event:
Codice: [Seleziona]
Public Sub TableView_KeyPress()  
  ' Per impedire a questi eventi di scatenare il '
  ' click quando passano alla riga successiva. '
  Select Case Key.Code   
    Case Key.Right, Key.Return, Key.Enter
      If TableView1.Column = 3 Then     
        $bNoEvent = True
      Endif
    ' Lo so che il tab è usato dalle form per passare da un controllo ad un altro'
    ' Ma volevo vedere se riuscivo a catturarlo solo per la TableView.'
    Case Key.Tab
      Stop Event     
      Desktop.SendKeys("\n")     ' <-----Ora con stop event funziona'
  End Select 
 
End
:ciao: :ciao:

PS Ho aggiornato il post precedente e l'allegato, ora, quanto detto poi, sembra un discorso surreale  ;D
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 11 Ottobre 2016, 20:14:11
Ciao Gianluigi
Ho letto il post spagnolo e appunto volevo chiedere se si può risolvere il discorso del tab, che (almeno per me) è molto utile per spostarsi nella griglia.
Non ho fatto in tempo a scrivere che già avevi preso in considerazione il problema  :)

Non si può intercettare il tab?

Sull'argomento Tab per spostare il cursore in una TableView il buon Vuott ha scritto una pagina (http://www.gambas-it.org/wiki/index.php?title=Utilizzare_il_tasto_Tab_della_tastiera_per_spostare_il_cursore_del_mouse_fra_le_celle_di_una_TableView) wiki

Questa soluzione purtroppo presenta il difetto che poi il Tab nella Form non si comporta come dovrebbe.
Ci stiamo studiando su, ogni suggerimento è gradito
Intanto abbiamo scoperto che la classe Watcher non serviva, comunque prima di aggiornare ButtonDraw aspetto di vedere se si riesce a migliorarne il codice.
 :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Golia - 11 Ottobre 2016, 20:25:48
Mi sembra funzionare, non ho provato con altri oggetti del form
Già che ci siamo.....BackTab  ;)
Avevo scritto una classe, molto simile a gridbox e avevo aggirato il problema Tab e BackTab in maniera assurda ??? Questo è più interessante.
Nella classe GridBox di Milio i due pulsanti funzionano bene nella griglia, saltano la colonna "Check" senza variare il contenuto, ma non ho proprio capito come ha fatto :rolleyes:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 11 Ottobre 2016, 20:32:20
Mi sembra funzionare
Io e Gianluigi - in privato - ci stiamo consultando per trovare altre eventuali soluzioni (ci sarebbe pure una mia leggera variante), ma quella sua originaria resta per ora ancora la migliore.   (http://forum.ubuntu-it.org/images/smilies/sisi.gif)




Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 11 Ottobre 2016, 20:45:58
..
Già che ci siamo.....BackTab  ;)

ci avevo già pensato  :P
Vedremo ora penso a tab...
Citazione
Nella classe GridBox di Milio i due pulsanti funzionano bene nella griglia, saltano la colonna "Check" senza variare il contenuto, ma non ho proprio capito come ha fatto :rolleyes:

Darò un occhiata, grazie.
 :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 11 Ottobre 2016, 22:30:20
Siccome sto per andare a dormire, vi aggiorno su un piccolo passetto in avanti, ma solo per quanto riguarda ButtonDraw:
Codice: [Seleziona]
Public Sub TableView_KeyPress()  
  ' Per impedire a questi eventi di scatenare il
  ' click quando passano alla riga successiva. 
 
  Select Case Key.Code   
    Case Key.Right, Key.Return, Key.Enter
      If TableView1.Column = 3 Then     
        $bNoEvent = True
      Endif   
    ' Serve per spostarsi con Tab.
    Case Key.Tab     
      If Application.ActiveControl = TextBox1 Then       
        If TableView1.Row = -1 Then         
          Desktop.SendKeys("\t")
          Return
        Endif     
        If TableView1.Row = TableView1.Rows.Count - 1 And TableView1.Column = TableView1.Columns.Count - 2 Then         
          Desktop.SendKeys("\t")
        Else
          Stop Event
          Desktop.SendKeys("\n")
        Endif
      Endif     
  End Select 
 
End
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button
Buonanotte  :sleepy:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 11 Ottobre 2016, 22:52:56
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button

Ma tu vuoi che sia così, o no ?
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 12 Ottobre 2016, 12:57:14
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button

Ma tu vuoi che sia così, o no ?

Certo, ma questo codice funziona solo con TableView1.EditWith(TextBox1) non avevo capito che tu avevi già trovato la soluzione per l'esempio della wiki.
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 13 Ottobre 2016, 18:21:19
Aggiorno alla terza versione (http://www.gambas-it.org/smf/index.php?topic=4921.msg39146#msg39146), adesso non scatena l'evento click neanche a ritroso col tasto Left.
Ho inserito una combo per una lista di colonna e il tab la attraversa normalmente.
Purtroppo per quanto riguarda BackTab niente da fare almeno con questa impostazione.  :'(
Ho provato sia in TableView_KeyPress che con TextBox1_KeyPres ma non sono riuscito a nulla.
Se provate ad aggiungere questo codice vedrete che con qualcosa scritto nelle textbox si evidenzierà il testo.
Questo sta ad indicare che lo Stop Event coinvolge solo il tab e non shift, infatti è lo stesso comportamento che avremmo usando i tasti Shift + Left.
Codice: [Seleziona]
Public Sub TextBox1_KeyPress()
 
  If Key.Code = Key.BackTab Then
    Stop Event   
    'If Key.Shift Then Stop Event
    If TableView1.Column = 0 And TableView1.Row = 0 Then
    Else
      'Print "LEFT"
      Desktop.SendKeys("[Left]")
    Endif
  Endif
 
End

 :ciao: :ciao: :ciao:
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 14 Ottobre 2016, 02:23:36
 :)
Titolo: Re:Bottone in una TableView
Inserito da: Golia - 14 Ottobre 2016, 18:14:57
Io risolverei così.. anche se è poco elegante
Citazione
Public Sub TableView_KeyPress() 
Dim i As Integer

  Select Case Key.Code
    Case Key.Right, Key.Left, Key.Return, Key.Enter
      If TableView1.Column = $colCheck - 1 Or $colCheck + 1 Then
        $bNoEvent = True
      Endif
 
    Case Key.Tab
      Stop Event
      Desktop.SendKeys("\n")
     
 
 
    Case Key.BackTab
       Stop Event
          If TableView1.row = 0 And TableView1.Column = 0 Then
              Return 
          Endif
        i = TableView1.Column
        If TableView1.Column = 0 Then
          i = TableView1.Columns.Max + 1
          TableView1.Row = TableView1.Row - 1
        Endif
        If TableView1.Column = $colCheck + 1 Then
            $bNoEvent = True
            TableView1.MoveTo(TableView1.Row, i - 2)
          Else
            TableView1.MoveTo(TableView1.Row, i - 1)
        Endif
        TableView1.Edit
       
       
       
       
  End Select
 
End

Allego esempio
Titolo: Re:Bottone in una TableView
Inserito da: vuott - 14 Ottobre 2016, 19:15:34
Bravo, Golia.
Poiché il tuo esempio comunque comporta due particolarità (salto delle celle occupate dagli oggetti e BackTab) ho ritenuto utile riportare (...se non sei contrario a posteriori  :) ) il tuo codice nella pagina che stiamo scrivendo della WIKI.


Mostriamo, dunque, anche agli altri membri dove - per ora - siamo arrivati:

http://www.gambas-it.org/wiki/index.php?title=Utilizzare_il_tasto_Tab_della_tastiera_per_spostare_il_cursore_del_mouse_fra_le_celle_di_una_TableView
Titolo: Re:Bottone in una TableView
Inserito da: Gianluigi - 14 Ottobre 2016, 21:38:53
Ciao Golia,
prima cosa complimenti per la soluzione anche se purtroppo non si adatta a mio ButtonDraw. :'(
A proposito, perché non hai fatto un esempio con button qui, visto il titolo, e uno con check la?  :P
A me la tabulazione rimane confinata all'interno della tableview, non c'è il sistema di farla uscire in modo da ottenere il comportamento atteso da chi non usa il mouse?

Ti suggerisco questo cambiamento che oltre a tutto fa uscire il BackTab dalla tableview e sposta il focus sul pulsante (se non vuoi uscire dai confini della tableview basta rispostare Stop Event prima di If):
Codice: [Seleziona]
    Case Key.BackTab      
      If TableView1.row = 0 And TableView1.Column = 0 Then
        Return 
      Endif
      Stop Event
      Select Case TableView1.Column
        Case 0
          TableView1.MoveTo(TableView1.Row - 1, TableView1.Columns.Max)
        Case 4
          '$bNoEvent = True ' Qui non serve
          TableView1.MoveTo(TableView1.Row, TableView1.Column - 2)
        Case Else
          TableView1.MoveTo(TableView1.Row, TableView1.Column - 1)
      End Select     
      TableView1.Edit
:ciao: :ciao: :ciao:

PS Non ho risposto prima perché oggi da noi, paurosa tromba d'aria che ci ha tenuti oltre che in apprensione anche senza energia elettrica e naturalmente il portatile era quasi scarico.  ;D
Perché non hai messo il codice fra cancelletti? Voi anziani dovete dare l'esempio  :violent:
Titolo: Re:Bottone in una TableView
Inserito da: Golia - 18 Ottobre 2016, 14:32:45
Citazione
A proposito, perché non hai fatto un esempio con button qui, visto il titolo, e uno con check la?  :P
:-\Mi viene più naturale pensare a un check dentro la griglia che un button....  :-\
Citazione
A me la tabulazione rimane confinata all'interno della tableview, non c'è il sistema di farla uscire in modo da ottenere il comportamento atteso da chi non usa il mouse?
Si è vero anche quà al mio punto di vista va bene così, basta mettere dei controlli per uscire dal focus della griglia, premendo un tasto a scelta tipo che ne so.. F2
Citazione
Perché non hai messo il codice fra cancelletti? Voi anziani dovete dare l'esempio  :violent:
:D siamo abbastanza giovani e quindi sbadati  :P :-*