Gambas-it

Gambas3 => Programmazione => Topic aperto da: allegfede - 09 Agosto 2013, 12:37:19

Titolo: [RISOLTO] DRAG & Drop su una cella della TableView
Inserito da: allegfede - 09 Agosto 2013, 12:37:19
piu' o meno ho capito come funziona il drag & drop in gambas (anche guardando l'esempio presente nell'IDE come suggerito in un vecchio tread) .... pero' l'esempio faceva riferimento ad un treeview (con i suoi bei nodi ....) mentre io devo gestire le celle di una tableview.

ovviamente questo codice:

Codice: [Seleziona]
  ' If Not TableView_schedule.FindChild(Drag.x, Drag.y) Then
  '   Drag.Show(TableView_schedule, TableView_schedule.Item.x, TableView_schedule.Item.y, TableView_schedule.Current.Width, TableView_schedule.Current.Height)
  '   Else
  '     Drag.Show(TableView_schedule)
  ' Endif


  If TableView_schedule.FindChild(Drag.x, Drag.y) Then
    Drag.Show(TableView_schedule, TableView_schedule.Current.X, TableView_schedule.Current.y, TableView_schedule.Current.Width, TableView_schedule.Current.Height)
    Else
      Drag.Show(TableView_schedule)
  Endif

non funziona ....

quello commentato perche' il concetto di ITEM e' sconosciuto alla tableview :D
il secondo perche' il findchild non individua nessun oggetto figlio di tableview (le celle sono figlie di table?) .....

SUGGERIEMENTI?

PS: prelevo da una lista un item e lo devo "droppare" nella cella che sto' attraversando con il mouse ;-)

PPS: se poi riuscissi a far vedere il rettangolino con il testo dell'item che sto' draggando con il mouse non sarebbe male ..... per ora ho solu un fogliett standard
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: vuott - 11 Agosto 2013, 19:12:46

PS: prelevo da una lista un item e lo devo "droppare" nella cella che sto' attraversando con il mouse ;-)

...ho fatto qualche prova, ma mi pare che non funzioni  :-\  l'evento TableView_Drop() .

Confermate ?
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 12 Agosto 2013, 10:03:35
Citazione
Non sono ancora in ufficio, ma il drop mi sembra che me lo faccia ....
Il problema è che io vorrei riuscire a mettere il contenuto in una cella specifica (quella su cui sono al momento del rilascio del tasto del mouse). Ma non riesco o ad individuare la singola cella come figlia (findchild) del tableview ....
Oggi forko e provo la gridview ......

ok fatto un rapido test: http://sourceforge.net/projects/otva/files/2013-08-12_dragdrop_troubles/scheduler-0.0.6.tar.gz/download

in pratica ne treeview ne gridview hanno FIGLI, benche' entrambe espongano il metodo .findchild
lo stesso dovrebbe restituire NULL (se non e' stato trovato alcun figlio) oppure il puntatore as .ITEM ... ma ITEM non e' un metodo supportato da gridview o tableview ..... MHHHHH strana cosa .......
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: md9327 - 12 Agosto 2013, 17:43:04
I dati si trovano in un array interno all'oggetto, ma mi pare sia possibile indicare la singola cella usando l'oggetto stesso come array (oggetto[r,c]).
Esistono dei metodi della classe per capire qual'è la cella su cui si è fatto il click del mouse, in base alle coordinate del mouse.
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: vuott - 15 Agosto 2013, 01:36:01
Esistono dei metodi della classe per capire qual'è la cella su cui si è fatto il click del mouse, in base alle coordinate del mouse.

...exactement !
Per individuare il numero d'indice della colonna e della riga, sulle quali si è cliccato, si utilizzano rispettivamente le funzioni:
Codice: gambas [Seleziona]
.ColumnAt( X As Integer ) As Integer

e
Codice: gambas [Seleziona]
.RowAt( Y As Integer ) As Integer




Facciamo un semplice esempio:
Codice: gambas [Seleziona]

Public Sub Form_Open()

   With TableView1
     .Columns.count = 3
     .Rows.Count = 3
   End With

   TableView1[0, 0].Text = "zero e zero"
   TableView1[1, 1].Text = "uno e uno"
   TableView1[2, 2].Text = "due e due"

End


Public Sub TableView1_MouseUp()
 
   With TableView1
     Print "Colonna n. "; .ColumnAt(Mouse.X)
     Print "Riga n. "; .RowAt(Mouse.Y)

     Print "Testo raccolto: "; TableView1[.RowAt(Mouse.Y), .ColumnAt(Mouse.X)].Text
   End With

End
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 17 Agosto 2013, 12:34:25
ci provo .... cosi' sarebbe risolto (e sareste in credito per una birra a testa ;-) ) .... pero' rimane il mistero di come usare il .findchild ...... :D
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: vuott - 20 Agosto 2013, 16:46:44
.... pero' rimane il mistero di come usare il .findchild .....

La funzione in questione individua e ritorna l'eventuale oggetto "figlio" di un Contenitore, solo se tale Oggetto risulta posizionato nell'ambito delle coordinate .X  e  .Y  (ossia dei due argomenti della funzione).

Codice: gambas [Seleziona]

   If IsNull(Me.FindChild(valore_x, valore_y)) = False Then Print Object.Type(Me.FindChild(valore_x, valore_y))


Le predette coordinate possono anche avere valori minori di zero.

Nel caso in cui, poi, alle predette coordinate siano posti più Oggetti, Figli del medesimo Genitore, viene ritornato l'Oggetto posto in prevalenza gerarchica.
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 22 Agosto 2013, 13:05:19
ci provo .... cosi' sarebbe risolto (e sareste in credito per una birra a testa ;-) ) .... pero' rimane il mistero di come usare il .findchild ...... :D

ok provato il codice ed effettivamente funziona SENZA IL DRAG

Il drag&drop sembra catturare TUTTI gli eventi relativi al mouse e quindi gli eventi legati al suo movimento SE IN QUEL MOMENTO SI STA' FACENDO DRAG&DROP non restituiscono nulla.

ho dovuto mettere il try perche' senno dovevo forzare gambas ad uscire (F4) ma il seguente codice
Codice: [Seleziona]
Public Sub TableView_schedule_DragMove()

  With TableView_schedule 
    Try Debug "Colonna n. " & .Column(Mouse.x) & "  -  Riga n. " & .RowAt(Mouse.y);
  End With 
End

 non stampa nulla sulla consolle di debug se non l'errore:
Codice: [Seleziona]
 FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.Ta
bleView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_DragMove.476: FMain.TableView_schedule_Drop.449

provero' ad aggirare il drag & drop ma era comodo ......
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 22 Agosto 2013, 13:28:04
ALLELUYA ALLELUYA !!!!!

riguardando il vecchio codice mi sono accorto dell'esistenza di drag.x e drag.y !!!!!

evidentemente per intercettare gli eventi del mouse, il drag&drop cattura tutti gli eventi, ma deve ri-esporre alcune proprieta' (fortunatamente :D) e quindi il codice cambiando moouse.x con drag.x e mouse.y con drag.y funziona:

Codice: [Seleziona]
Public Sub TableView_schedule_DragMove()
Dim Riga As Integer
Dim Colonna As Integer

  Riga = TableView_schedule.RowAt(Drag.y)
  Colonna = TableView_schedule.ColumnAt(Drag.x)
 
  Debug riga & "  -  " & Colonna
 End
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: vuott - 23 Settembre 2013, 01:27:30
...magari segnaleri anche questa analoga discussione sul forum della comunità francese dei porgrammatori Gambas:

http://www.gambasforge.org/sujet-98-drop-d-une-image-sur-une-gridview-page-1.html#m1
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 03 Ottobre 2013, 13:15:02
...magari segnaleri anche questa analoga discussione sul forum della comunità francese dei porgrammatori Gambas:

http://www.gambasforge.org/sujet-98-drop-d-une-image-sur-une-gridview-page-1.html#m1

devo registrarmi :-(
Titolo: Re: DRAG & Drop su una cella della TableView
Inserito da: allegfede - 03 Ottobre 2013, 13:21:33
fatto :D
Titolo: Re: [RISOLTO] DRAG & Drop su una cella della TableView
Inserito da: vuott - 22 Ottobre 2013, 20:53:52
Sono riuscito a fare un esempio con due GridView; ed il codice adottato l'ho riportato brevemente nella nostra WIKI:

http://www.gambas-it.org/wiki/index.php?title=Drag-Drop_di_un_testo_da_una_cella_di_una_GridView_ad_una_cella_di_un%27altra_GridView
Titolo: Re: [RISOLTO] DRAG & Drop su una cella della TableView
Inserito da: allegfede - 23 Ottobre 2013, 18:08:59
mitticooooo :D