ListView中用鼠标拖动各项上下移动的问题。(100分)

在OnDragDrop事件中處理:
以下是delphi的例子

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);

begin
Accept := Source is TLabel;

end;

This OnDragDrop event handler implements the drop behavior.

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin
if (Sender is TListBox) and (Source is TLabel) then
begin
with Sender as TListBox do
begin
Font := (Source as TLabel).Font;
Color := (Source as TLabel).Color;
end;
end;
end;

但如果将Drag设为TRUE
就会出现难看的鼠标残影
怎样去掉?

下面这个是LISTBOX1的,都差不多的,你参考一下看看吧
要声明一个窗体级以上的变量oldrect:Trect;,可以加在private下面

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
//这是让FORM接受从LISTBOX里拖出的动作,注意要个FORM留出空间在外面
if source=listbox1 then
accept:=true;
end;

procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if (target<>nil)and(target.ClassName<>sender.ClassName) then
listbox1.Items.Delete(listbox1.itemindex);
if target=nil then
listbox1.Canvas.DrawFocusRect(oldrect);
oldrect.Bottom:=0; //拖放完之后把矩形变量清空
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
mypos:Tpoint;
begin
if source=listbox1 then
accept:=true;
mypos.x:=x;
mypos.y:=y;
if listbox1.ItemAtPos(mypos,true)<>-1 then
begin 
listbox1.Canvas.DrawFocusRect(oldrect); //通过‘异或’去掉上次的框框
listbox1.Canvas.DrawFocusRect(listbox1.ItemRect(listbox1.ItemAtPos(mypos,true)));//画上本次的框框
oldrect:=listbox1.ItemRect(listbox1.ItemAtPos(mypos,true));
end;

end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
P_move:Tpoint;
begin
{通过坐标获得ITEM}
P_move.x:=x;
p_move.y:=y;

if (listbox1.itemindex<>-1) and (listbox1.ItemAtPos(P_move,true)<>-1) then
//这一句可以替换上次那几句
listbox1.Items.Exchange(listbox1.itemindex,listbox1.ItemAtPos(P_move,true));//互换ITEM

//下面一句也是拖放不成功的时候要去掉最后画的那个FOCUS框
if listbox1.ItemAtPos(P_move,true)=-1 then
listbox1.Canvas.DrawFocusRect(oldrect);

原文地址:https://www.cnblogs.com/jijm123/p/11106181.html

时间: 2024-08-05 10:57:59

ListView中用鼠标拖动各项上下移动的问题。(100分)的相关文章

鼠标拖动虚影效果(拖动的时候使用图片蒙人,但效果不错)

疯狂delphi delphiXE7.XE8.XE10公开课A 群号:58592705 鼠标拖动虚影效果 1 //1.定义消息 2 procedure MYHideMessage(var Msg: tagMSG; var Handled: Boolean); 3 4 //2.执行消息 5 procedure TForm2.MYHideMessage(var Msg: tagMSG; var Handled: Boolean); 6 var 7 pt:TPoint; 8 bit: TBitmap;

jquery 鼠标拖动排序Li或Table

1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Table.aspx.cs" Inherits="拖动排序Li或Table" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

简单的鼠标拖动效果

使用js实现简单的鼠标拖动效果,但此部分代码有个小小的BUG,后期改进好我会写进来,但基本的效果已经实现,请大家参考. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标移动</title> <style> #box{ width: 50px; height: 50px; position:

js鼠标控制图片的特效,滚轮控制放大、缩小、鼠标拖动、聚焦。。。

项目需要做一个js控制图片的特效,滚轮控制放大.缩小.鼠标拖动等效果,网上找方法,各种报错.不兼容...最终自己研究出一套方案如下: 代码直接从项目中拷了,就不整理格式了 <script type="text/javascript"> //图片特效 by jifei_mei //图片大小,记录放大或缩小图片前的大小 var pic_size = { width:0, height:0 }; //绑定滚轮滚动事件 if (window.addEventListener) {

可是鼠标拖动的菜单

<html> <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>阿里西西网页特效演示,可以拖动的显隐导航菜单</title><style>body,td,a {font-size:9pt;color:black}.none{border:black 1px solid;backgrou

禁用网页右键菜单和鼠标拖动选择

一.禁止鼠标右键菜单: 有如下两种方法来禁止鼠标右键 1.在HTML元素的Body标签中加入Javascript事件句柄,代码如下: <body onContextMenu="return false"> 说明:您也可以在网页指定的位置禁止右键,比如您只想在网页中的某个图片上禁右键防下载,或您只想在网页中的一段文字或表格上禁右键,您也只需将如上红色代码加入到相应的HTML标签元素中,例: <img src="logo.gif" width=88 h

jQuery实现鼠标拖动改变Div高度

最近项目中需要在DashBoard页面做一个事件通知栏,该通知栏固定位于页面底部,鼠标拖动该DIV实现自动改变高度扩展内容显示区域. 以下是一个设计原型,基于jQuery实现,只实现了拖动效果,没有做页面美化,可以根据需求做相应修改. 直接上代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quo

鼠标拖动图片移动

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>鼠标拖动图片移动</title> <script type="text/javascript" src="js/jquery-1.11.3.js&q

flex 事件注册和鼠标拖动

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" applicationComp