Je vous ai fait quelques infidélités en essayant de développer sous Delphi pour mon boulot mais il n'y a pas à dire, on revient toujours à ses premières amours
Voici mon problème : j'ai une GUI avec plusieurs composants pour lesquels j'autorise le drag and drop (ici 2 labels) :
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 255, 215, 192, 124, BitOR($GUI_SS_DEFAULT_GUI,$WS_SIZEBOX,$WS_THICKFRAME), BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
Global $Label1 = GUICtrlCreateLabel("Label1", 40, 16, 180, 73)
GUICtrlSetBkColor(-1, 0x99B4D1)
Global $Label2 = GUICtrlCreateLabel("Label2", 40, 96, 180, 89)
GUICtrlSetBkColor(-1, 0x00FFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $gaDropFiles[1]
GUICtrlSetState($Label1, $GUI_DROPACCEPTED)
GUICtrlSetState($Label2, $GUI_DROPACCEPTED)
; Détection drag and drop
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_DROPPED
_ArrayDisplay($gaDropFiles)
EndSwitch
WEnd
Func WM_DROPFILES_FUNC($hwnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
ReDim $gaDropFiles[$i + 1]
$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc ;==>WM_DROPFILES_FUNC
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 255, 215, 192, 124, BitOR($GUI_SS_DEFAULT_GUI,$WS_SIZEBOX,$WS_THICKFRAME), BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
Global $Label1 = GUICtrlCreateLabel("Label1", 40, 16, 180, 73)
GUICtrlSetBkColor(-1, 0x99B4D1)
Global $Label2 = GUICtrlCreateLabel("Label2", 40, 96, 180, 89)
GUICtrlSetBkColor(-1, 0x00FFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $gaDropFiles[1]
GUICtrlSetState($Label1, $GUI_DROPACCEPTED)
GUICtrlSetState($Label2, $GUI_DROPACCEPTED)
; Détection drag and drop
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_DROPPED
_ArrayDisplay($gaDropFiles)
EndSwitch
WEnd
Func WM_DROPFILES_FUNC($hwnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
ReDim $gaDropFiles[$i + 1]
$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc ;==>WM_DROPFILES_FUNC
J'aimerai arriver à détecter quel est l'objet sur lequel à été déposé le drag and drop (label 1 ou label 2).
Dans mon code, ce sont des listviews.
Merci d'avance pour votre aide.
Cordialement.
BM