Pergunta

Eu tenho uma GUI VCL desenvolvida no CodeGear. Eu criei um DropTarget para a forma principal e o objeto DropTarget implementa a interface IDROPTARGET que me permite arrastar e soltar arquivos do Explorer. Agora, porque eu só quero que alguns dos componentes da criança sejam alvos de queda (não todo o formulário), só tenho o método Dragenter retorna S_OK quando as coordenadas Pointl estão dentro dos limites do componente.

No entanto, se eu arrastar o item lentamente para os limites do formulário, mas não o componente, o Dragenter retorna e_nointerface, portanto, não permitindo uma queda. Se eu continuar a arrastar para a zona dropzone, o Dragenter não vai disparar, entendo por que não está disparando. Então minha pergunta é Como posso disparar manualmente no evento Dragenter?

Foi útil?

Solução

Parece que você está ignorando que o iDropTarget possui um método dragover () que você precisa usar, além do dragenter (). Se o dragenter () não começar com coordenadas que você permite, então você terá que retornar S_OK com o parâmetro pdweffet definido como DROPEFFECT_NONE, e depois deixe o Dragover () continuar fazendo sua própria verificação de coordenadas posteriormente.

Além disso, como você deseja arrastar apenas para controle específico, você deve ligar para o RegisterDragdrop () para cada um desses controles individuais (supondo que sejam descendentes de Twincontrol), não para o próprio TForm.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top