Autore Topic: [RISOLTO] DRAG & Drop su una cella della TableView  (Letto 1214 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
[RISOLTO] DRAG & Drop su una cella della TableView
« il: 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
« Ultima modifica: 22 Ottobre 2013, 12:37:37 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #1 il: 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 ?
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #2 il: 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 .......
« Ultima modifica: 12 Agosto 2013, 11:56:08 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #3 il: 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.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #4 il: 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
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #5 il: 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
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #6 il: 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.
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #7 il: 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 ......
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #8 il: 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
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #9 il: 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
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #10 il: 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 :-(
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: DRAG & Drop su una cella della TableView
« Risposta #11 il: 03 Ottobre 2013, 13:21:33 »
fatto :D
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] DRAG & Drop su una cella della TableView
« Risposta #12 il: 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
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: [RISOLTO] DRAG & Drop su una cella della TableView
« Risposta #13 il: 23 Ottobre 2013, 18:08:59 »
mitticooooo :D
se corri, morirai stanco (motto degli sniper)