+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Owner di un oggetto dopo il drag&drop

  1. #1
    soucer2k6 non è in linea Novello
    Post
    2
    Like Inviati  
    0
    Like Ricevuti  
    0
    Salve a tutti,

    La situazione generale è la seguente:
    Nel mio form creo vari CommandButton a run-time. Questi possono essere spostati all'interno del form, nel quale è presente un PictureBox.
    L'obiettivo del drag&drop è permettere che i CommandButton vengano spostati all'interno del PictureBox.

    Il problema:
    Al momento di salvare la posizione dei CommandButton, devo accertarmi che l'owner del CommandButton sia il PictureBox e non il Form come invece risulta essere.

    La procedura di dragdrop del picturebox è:
    private sub picbox_dragdrop( source as control, ...)

    SetParent(source.hwnd, picbox.hwnd) 'cambia il proprietario del cmdbutton

    end sub

    Nonostante ciò al momento del controllo l'owner NON risulta il PictureBox ma il Form.

    Grazie.

  2. #2
    Post
    17,506
    Blogs
    6
    Like Inviati  
    6
    Like Ricevuti  
    35
    Forse e' meglio che mostri il codice in dettaglio ...
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    soucer2k6 non è in linea Novello
    Post
    2
    Like Inviati  
    0
    Like Ricevuti  
    0
    Di seguito ho riportato il codice:


    Option Explicit

    Dim intNum As Integer 'numero di pulsanti creati a run-timeDim intIDButton As Integer 'ID pulsante la cui posizione deve essere salvata
    Private Declare Function SetParent Lib "User32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Private Declare Function GetParent Lib "User32" (ByVal hWnd As Long) As Long


    Private Sub CommandADD_Click()
    If intNum = 0 Then intNum = 1

    Load cmdRT(intNum)

    cmdRT(intNum).Top = CommandADD.Top
    cmdRT(intNum).Left = CommandADD.Left + 600
    cmdRT(intNum).Visible = True
    cmdRT(intNum).DragMode = 1
    cmdRT(intNum).ZOrder 0
    intNum = intNum + 1

    End Sub


    Private Sub CommandSAVE_Click()
    If GetParent(Command2(intIDButton)) = picturePiantina.hWnd Then
    MsgBox "OK", vbOKOnly
    Else
    MsgBox "NO", vbRetryCancel
    End If

    'oppure

    If TypeOf Command2(intIDButton).Parent Is PictureBox Then
    MsgBox "OK", vbOKOnly
    Else
    MsgBox "NO", vbRetryCancel
    End If

    'è la stessa cosa.
    'la condizione dell'If risulta soddisfatta sostituendo a PictureBox l'oggetto Form

    End Sub


    Private Sub Form_Load()
    intNum = 0
    Picture1.ZOrder 1
    cmdRT(0).Visible = False

    End Sub


    Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
    Dim HandleOldControl As Long 'handle del controllo che conteneva in precedenza Source

    HandleOldControl = SetParent(Source.hWnd, picturePiantina.hWnd)

    Source.Move X, Y

    Source.Visible = True
    End Sub

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,239
    Like Inviati  
    21
    Like Ricevuti  
    11
    Perchè sbagli ad usare la funzioni GetParent, credendo che essa ti restituisca il padre, mentre invece restiuisce il figlio.
    Inoltre il parametro per la funzione deve essere l'Handle della finestra (hWnd)mentre tu passi solo l'oggetto e di conseguenza passi la proprietà predefinita dello stesso (che non è mai hWnd).

    Quindi, l'istruzione che hai usato:

    If GetParent(Command2(intIDButton)) = picturePiantina.hWnd Then
    non può dare il risultato che ti aspetti, perchè (amesso tu l'avessi scritta bene) stai chiedendo se picturePiantina è figlia di Command2.

    Quando si usano le funzioni dell'API bisogna leggere la guida con molta attenzione...

    Ma perchè non usi la proprietà Container che è fatta apposta per questi casi? Vedi la guida MSDN per uleriori informazioni


    HTH
    ℹ️ Leggi di più su gibra ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Drag & Drop
    Da fabel nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 14-11-2016, 07:37
  2. Drag And drop
    Da M4ndr4k377 nel forum C#
    Risposte: 3
    Ultimo Post: 01-10-2015, 08:44
  3. Drag&Drop
    Da IOprogrammo nel forum Visual Basic .Net
    Risposte: 12
    Ultimo Post: 29-01-2008, 10:00
  4. Drag & Drop
    Da barney..grumble nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 23-04-2006, 13:39
  5. Drag’n drop????
    Da massimo74rn nel forum Visual Basic 6
    Risposte: 14
    Ultimo Post: 03-04-2005, 15:12