Simulate drag & drop on buttons for tablet

Simulate drag & drop on buttons for tablet

Postby Silvio.Falconi » Thu Jan 17, 2019 12:27 am

Please I need to make the drag and drop from one xbrowse to another pressing buttons because on tablet I can Have the possibility to use a mouse

I made this sample test
on oLbx must be allways 4 records and 5 columns
on olbx2 the items can be erased ( but not added to olbx)

With the mouse run perfectly
the button aBtnDropBrw[1] "Drop in"" run

the button aBtnDropBrw[2] "Drop out"" run bad because erase allways the first record and not that on the position
and not I understood How resolve the problem

the test code
Code: Select all  Expand view  RUN

    #include "FiveWin.ch"
    #include "xbrowse.ch"

 function Main()
       local oDlg, oCursor, oLbx, oLbx2,oFont
       local cItem:=""
       local aData := Array( 4, 5 )
       local i,j
       local aBtnDropBrw:=array(2)

    //Array Demo Data
   for i := 1 to 4
      aData[ i ][ 1 ] := 'Prod-' + Chr(64+i)
      for j := 2 to 5
         aData[ i ][ j ] := Round( hb_Random( 100, 999 ), 2 )
      next j
   next i


    DEFINE CURSOR oCursor hand
    DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
    DEFINE DIALOG oDlg SIZE 900,570 PIXEL;
    TRUEPIXEL RESIZABLE FONT oFont

 // First Listbox

@ 55, 40  XBROWSE oLbx OF oDlg COLUMNS 1,2,3,4,5 ;
          ARRAY aData SIZE 350, 200  PIXEL


// Set a DropOver action for the ListBox
       oLbx:bDropOver = { | uDropInfo, nRow, nCol, nKeyFlags | ; //AAdd( oLbx:aArrayData,  oLbx2:aArrayData[ uDropInfo ] ), ;
              ADel( oLbx2:aArrayData, uDropInfo, .t. ), ;
                            oLbx:Refresh(.t.), oLbx2:Refresh(.t.) }

       oLbx:oDragCursor = oCursor         // Select a Drag cursor
       oLbx:bDragBegin  = { | nRow, nCol, nKeyFlags | ;
                            SetDropInfo( oLbx:nArrayAt )}






    // second Listbox

   @ 55,oLbx:nwidth+290 XBROWSE oLbx2 ;
                            OF oDlg COLUMNS 1,2,3,4,5 ARRAY {} ;
                            size 350,200  pixel

       // Set a DropOver action for the ListBox2
       oLbx2:bDropOver = { | uDropInfo, nRow, nCol, nKeyFlags | ;
                            AAdd( oLbx2:aArrayData,  oLbx:aArrayData[ uDropInfo ] ), ;//ADel( oLbx:aArrayData, uDropInfo, .t. ), ;
                            oLbx:Refresh(.t.), oLbx2:Refresh(.t.) }

       oLbx2:oDragCursor = oCursor         // Select a Drag cursor
       oLbx2:bDragBegin  = { | nRow, nCol, nKeyFlags | ;
                            SetDropInfo( oLbx2:nArrayAt )}


       oLbx:CreateFromCode()
       oLbx2:CreateFromCode()



 // Set a Drop action for the buttons

@ 95, oLbx:nwidth+90 Button   aBtnDropBrw[1] PROMPT "Drop in" OF  oDlg;
          SIZE 90, 30 PIXEL        ;
            ACTION    (uDropInfo:=SetDropInfo( oLbx:nArrayAt ),;
                        AAdd( oLbx2:aArrayData,  oLbx:aArrayData[oLbx:nArrayAt  ] ), ;
                              oLbx:Refresh(.t.), oLbx2:Refresh(.t.)  )


  @ 145, oLbx:nwidth+90  Button  aBtnDropBrw[2] PROMPT "Drop Out"  OF  oDlg;
    SIZE 90, 30 PIXEL       ;
  ACTION    (uDropInfo:=SetDropInfo( oLbx2:nArrayAt ),;
             ADel( oLbx2:aArrayData, uDropInfo, .t. ), ;
             oLbx:Refresh(.t.), oLbx2:Refresh(.t.)  )



 oDlg:bResized  := <||
      local oRect    := oDlg:GetCliRect()
      local x        := Int( oRect:nWidth / 2 )

      oLbx:nWidth   := x - 80
      oLbx2:nLeft   := x + 130

      aBtnDropBrw[1]:nTop       := oLbx:nTop + 50
      aBtnDropBrw[1]:nLeft      := oLbx:nWidth + 90

      aBtnDropBrw[2]:nTop       := oLbx:nTop + 100
      aBtnDropBrw[2]:nLeft      := oLbx:nWidth + 90


 return nil
      >

    ACTIVATE DIALOG oDlg CENTERED
     RELEASE FONT oFont
return nil







 



If I wrote

@ 145, oLbx:nwidth+90 Button aBtnDropBrw[2] PROMPT "Drop Out" OF oDlg;
SIZE 90, 30 PIXEL ;
ACTION (uDropInfo:=SetDropInfo( oLbx2:nArrayAt ),;
ADel( oLbx2:aArrayData, oLbx2:nArrayAt, .t. ), ;
oLbx:Refresh(.t.), oLbx2:Refresh(.t.) )

It run ok but I not understood what need uDropInfo

then when I take the item fron oLbx to move to oLbx2 it take allways the first and not that where is the cursor
then if I click on a item and press the button then run
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7068
Joined: Thu Oct 18, 2012 7:17 pm

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Marc Venken and 97 guests