国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 開發設計 > 正文

發掘ListBox的潛力(二):鼠標拖放插入點提示

2019-11-18 18:05:59
字體:
來源:轉載
供稿:網友
 

鼠標拖放插入點提示

  鼠標拖放是Windows常見的操作,比如拷貝文件就可用拖放方式進行。在我們編寫的應用程序中,有時為了方便用戶操作需要支持鼠標拖放。對于大部分的VCL控件只要鼠標將DragMode設為dmAutomatic,就可以在OnDragDrop、OnDragOver和OnEndDrag中處理拖放事件。與Drag類似的還有一個Dock方式用于支持控件懸浮,控件在懸浮時會顯示一個虛線框來表示懸浮位置,而Drag方式卻沒有這功能。現在讓我們嘗試在Listbox中顯示拖放插入點。
  上面提及的三個事件中OnDragOver是用來拖放鼠標經過控件上面時產生的,要顯示插入點提示當然是在這里進行處理了。事件中先用Listbox.ItemAtPos(Point(X, Y) , true)取鼠標所有在的打目Index,再用Listbox.ItemRect(Index)取得作圖區域,最后在區域中畫出提示線框。下面給出代碼:

Unit1.pas內容
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    PRocedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
  private
    FDragOverObject: TObject;    //ListBox1DragDrop、ListBox1DragOver由多個Listbox共享,這里記錄當前那個Listbox接受鼠標拖放
    FDragOverItemIndex: Integer;  //記錄鼠標所在條目的Index
    procedure DrawInsertLine;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{========================================================================
  DESIGN BY :  彭國輝
  DATE:        2004-12-24
  SITE:       
http://kacarton.yeah.net/
  BLOG:        http://blog.csdn.net/nhconch
  EMAIL:       kacarton#sohu.com

  文章為作者原創,轉載前請先與本人聯系,轉載請注明文章出處、保留作者信息,謝謝支持!
=========================================================================}


procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
    i: integer;
begin
  //拖放完成,將內容從原來的Listbox讀到目標Listbox
  with TListBox(Source) do begin
    i := TListBox(Sender).ItemAtPos(Point(X, Y) , true);
    if i<>-1 then
      TListBox(Sender).Items.InsertObject(i, Items[ItemIndex], Items.Objects[ItemIndex])
    else
      i := TListBox(Sender).Items.AddObject(Items[ItemIndex], Items.Objects[ItemIndex]);
    if (Sender=Source) and (i>ItemIndex) then i := i-1;
    DeleteSelected;
    if (Sender=Source) then ItemIndex := i;
  end;
  FDragOverObject := nil;
  FDragOverItemIndex := -1;
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  Index: Integer;
begin
  Accept := (Source is TListBox) and (TListBox(Source).ItemIndex>-1);  //只接受來自Listbox的內容
  if not Accept then Exit;
  if (FDragOverObject<>nil) and (Sender<>FDragOverObject) then
    DrawInsertLine; //鼠標離開Listbox時,擦除插入位置提示線框
  Index := TListBox(Sender).ItemAtPos(Point(X, Y) , true);
  if (FDragOverObject = Sender) and (FDragOverItemIndex = Index) then Exit; //當鼠標在同一條目上移動時,只畫一次即可
  if (FDragOverObject = Sender) and (FDragOverItemIndex <> Index) then
    DrawInsertLine; //鼠標移到新位置,擦除舊的插入位置提示線框
  FDragOverObject := Sender;
  FDragOverItemIndex := Index;
  DrawInsertLine;   //畫出插入位置提示線框
end;

procedure TForm1.DrawInsertLine;
var
  R: TRect;
begin
  if FDragOverObject = nil then Exit;
  with TListBox(FDragOverObject) do begin
    if FDragOverItemIndex > -1 then begin
      R := ItemRect(FDragOverItemIndex);
      R.Bottom := R.Top + 4;
    end else if Items.Count>0 then begin
      R := ItemRect(Items.Count-1);
      R.Top := R.Bottom - 4;
    end else begin
      windows.GetClientRect(Handle, R);
      R.Bottom := R.Top + 4;
    end;
    DrawFocusRect(Canvas.Handle, R);
    InflateRect(R, -1, -1);
    DrawFocusRect(Canvas.Handle, R);
  end;
end;

end.


上一篇:中港臺譯名對照表簡易語法版

下一篇:如何使程序在運行時自動注冊ActiveX控件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产成在线观看免费视频| av免费网站在线观看| 思思99精品视频在线观看| 亚洲电影先锋| 欧美性猛交xxxx免费看蜜桃| 成网站在线观看人免费| 国产一级片在线| 国产精品一区二区三区高清在线 | 国产中文第一页| 国产乱视频在线观看| 国产精品一卡二卡三卡| 国产www网站| 牛牛热在线视频| 国产精品视频一区麻豆| av中文在线| 久久久久久久久久久久网站 | 国产麻豆视频免费观看| 国产精品美女一区二区三区四区 | 天天爱天天做色综合| 精品视频vs精品视频| 青青草原国产在线| 精品卡1卡2卡三卡免费网站| 国产主播色在线| 色中文字幕在线| 国产激情视频一区二区| 在线视频xx| 国产网友自拍电影在线| 欧洲亚洲精品视频| 在线中文字幕第一页| 国产精品视频一区二区三区麻豆| 午夜在线视频播放| 99热播在线观看| 国产视频你懂的| 国产精品一区牛牛影视| 超碰免费在线| 国内外激情在线| 超碰在线网站| 青青草观看免费视频在线| 性国产高清在线观看| av在线播放国产| 国产va在线| 国产福利小视频在线观看| 国产一区二区三区美女秒播| 久久久久久久久亚洲精品| 欧美96在线| 最近久乱中文字幕| 国产极品嫩模在线视频一区| 国产精品入口麻豆免费| 国产videos| 一本久久精品| 日本电影在线观看| 国产麻豆高清视频在线第一页| 九九热在线观看视频| 国产美女视频一区二区二三区| 国产你懂的在线观看| 成人免费一区二区三区视频网站| 九九热免费视频| 午夜伦全在线观看| 精品一区二区在线欧美| eeuss影院在线播放| 丁香视频五月| 国产xxx在线| 欧美亚洲系列| 国产午夜精品一区理论片| 伊人av免费在线观看| 免费不卡中文字幕视频 | 国产黄色一级电影| 国产传媒在线播放| av色在线观看| 国产免费黄色| 精品国产二区三区| 麻豆福利在线观看| 国产黄色片大全| 免费看成年人视频在线观看| 国产视频一二三区| 日本成a人片在线观看| 国产亚av手机在线观看| 在线视频中文字幕| 中文字幕亚洲精品视频| www.操操| 国产精品视频福利一区二区 | 美女免费视频黄| 国产日韩网站| 免费电影网站在线视频观看福利| 中文字幕日本在线| 超碰在线网站| av在线中文| 91激情在线| 国产网站在线播放| 国产精品亚洲色图| 国产一区在线视频观看| av在线免费播放| 精品一区二区在线欧美| 国产精品久久久久久久牛牛| 丁香花视频在线观看| 青青草视频在线观看| av文字幕在线观看| 国产99在线|亚洲| 国产精品视频一区麻豆| 国产日本视频| 国产国产人免费人成免费视频| 国产精品㊣新片速递bt| 激情六月婷婷| 国产精品一区二区三区四区色| 国产在线黄色片| 国产麻豆一级片| 中文字幕专区| 国产午夜在线观看| 国产福利小视频在线| 国产啊啊啊视频在线观看| 国产福利小视频在线观看| 999在线视频| 99reav| 国产午夜电影| 中文日本在线观看| 欧美性猛交p30| 好看的中文字幕在线播放| 国产一级在线观看www色| 国产精品久久久久久久久鸭| 精品国内自产拍在线视频| 波多野结衣中文字幕久久| 狠狠狠综合7777久夜色撩人| 综合蜜桃精品| 在线久久视频| 国产毛片在线| 国产精彩视频在线观看免费蜜芽| 精品国产免费观看一区| 青青草原国产在线| 国产亚av手机在线观看| 一级二级三级在线观看| 国产美女在线一区二区三区| 18成年在线观看| 久久精品免视着国产成人| 精品偷拍激情视频在线观看 | 99爱视频在线观看| 黄色毛片在线| 91xx在线观看| 国产亚洲精品一区二区在线观看| 国产激情小视频在线| 超碰在线观看免费| 在线视频三级| 午夜视频在线观看网站午夜视频在线| 国产福利在线看| 免费观看久久久久| 中文日本在线观看| 国产一二三四| xxx国产精品| www.操操操.com| 在线中文资源天堂| 国产高清视频在线播放| 国产在线更新| 久久精品国产亚洲a∨麻豆| 亚洲电影视频在线| 99久久99久久免费精品小说| 国产精品入口麻豆免费| 国产视频三级在线观看播放| 欧美高清视频| 欧洲有码在线视频| jizz在线免费观看| www.色五月| 日本不卡影院| 久久综合精品视频| 国产美女免费观看| 最新超碰在线| 国产一级大片| 92久久精品| 牛牛精品视频在线| 高清视频一区二区三区四区| 麻豆网站在线| 国产理论电影在线观看| 国产主播福利在线| 国产免费专区| 最近中文字幕av免费高清| 国产视频一二三区| 91网页在线观看| 日本在线免费中文字幕| 九九热在线视频免费观看| 激情综合丁香| 最近免费中文字幕在线第一页| 国产视频福利| gogo在线观看| 国产一二区在线| 99re热在线观看| 国产中文字幕第一页| 国产黄色免费电影| 欧美午夜电影一区二区三区| 免费国产阿v视频在线观看| 中文字幕国产在线| 午夜影院免费看| 最新av免费看| 日本动漫同人动漫在线观看| 中文字幕中文字幕在线中高清免费版| 国产激情视频在线| 欧美aaa一级片| 国产寡妇树林野战在线播放| 精品中文字幕不卡在线视频| 精品国内自产拍在线视频| 麻豆国产视频| 香蕉视频网站在线观看| 国产三线在线|