Italian B4J - (Risolto) indice oggetti

ivanomonti

Expert
Licensed User
Longtime User
Ciao di nuovo, mi sto creando un bottone personalizzato per la mia app, ho bisogno di creare un metodo che mi cambia l'ordine degli indici di ogni oggetto selezionato, come sapete object scritto per primo in root è sempre zero per poi crescere,,, questo fa si che oggetto ultimo sta sopra (a video) del primo, ma se cambio indice questo non mi succede.

quindi al click

1) leggo tutti gli object inseriti nella finestra
2) prendo indice del click selezionato
3) sostituisco indice dell'ultimo a quello del click
4) object selezionato lo posiziono nell'ultimo indice disponibile (punto 3)

non voglio ridisegnare ma sostituire (vedi immagine magari riesce a dare l'idea più precisa) mi date dei suggerimenti, plase :)

2020-04-21_133649.png
 

ivanomonti

Expert
Licensed User
Longtime User
questo è il frammento del codice che sto scrtivendo ma non da i risultati che voglio (desidero)

B4X:
Sub Base_MouseClicked (EventData As MouseEvent)
    
    Dim mBaseTemp As B4XView = Sender
    
    Dim indexNew, IndexOld As Int
    
    indexNew= mBase.Parent.NumberOfViews-1
    
    For i=0 To mBase.Parent.NumberOfViews-1
        Log (mBase.Parent.GetView(i))
        If mBase.Parent.GetView(i) = Sender Then
            IndexOld=i
        End If
    Next
    
    Dim miaold As Object = mBase
    Dim miaNew As Object = mBase.Parent.GetView(indexNew)
    
    mBase.Parent.GetView(indexNew) = miaold
    mBase.Parent.GetView(IndexOld) = miaNew
    
    Dim x,y,w,h As Int
    x=(mBase.Parent.Width-400)/2
    y=((mBase.Parent.Height/2)-(400/2))
    w=400
    h=400
    Log( x & " y=" & y & " w=" & w & " h=" & h)
    If EventData.ClickCount=2 Then
        mBaseTemp.SetLayoutAnimated(200,x,y,w,h)
    Else
        mBaseTemp.SetLayoutAnimated(200,mbaseL,mBaseT,mbaseW,mbaseH)
    End If
End Sub
 

ivanomonti

Expert
Licensed User
Longtime User
Risolto :) non vedevo il comando, e mi haa semplificato molto. in questo modo object selezionato e sempre in primo piano

BringToFront:
Sub Base_MouseClicked (EventData As MouseEvent)
    
    Dim mBaseTemp As B4XView = Sender
    
    mBase.BringToFront '<---------------------------------------------------------------------------------------------------------------------------------- qui
    
    Dim x,y,w,h As Int
    x=(mBase.Parent.Width-400)/2
    y=((mBase.Parent.Height/2)-(400/2))
    w=400
    h=400
    
    If EventData.ClickCount=2 Then
        mBaseTemp.SetLayoutAnimated(200,x,y,w,h)
    Else
        mBaseTemp.SetLayoutAnimated(200,mbaseL,mBaseT,mbaseW,mbaseH)
    End If

    
End Sub



2020-04-21_200842.png
 
Top