亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

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

鼠標拖放插入點提示

  鼠標拖放是Windows常見的操作,比如拷貝文件就可用拖放方式進行。在我們編寫的應用程序中,有時為了方便用戶操作需要支持鼠標拖放。對于大部分的VCL控件只要鼠標將DragMode設為dmAutomatic,就可以在OnDragDrop、OnDragOver和OnEndDrag中處理拖放事件。與Drag類似的還有一個Dock方式用于支持控件懸浮,控件在懸浮時會顯示一個虛線框來表示懸浮位置,而Drag方式卻沒有這功能?,F在讓我們嘗試在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控件

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

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免费观看一区| 久久久久久久久久久人体| 都市激情亚洲色图| 亚洲精品99久久久久中文字幕| 久久精品国产一区二区电影| 亚洲激情在线观看视频免费| 亚洲free性xxxx护士白浆| 92福利视频午夜1000合集在线观看| 91av在线视频观看| 91久久国产精品91久久性色| 国产日韩在线视频| 亚洲视频在线观看免费| 最新国产精品拍自在线播放| 欧美国产日韩视频| 欧洲亚洲妇女av| 亚洲三级黄色在线观看| 亚洲成人教育av| 日韩中文字幕视频在线| 欧美在线观看日本一区| 国产精品久久久久久久久久久新郎| 国产精品一区二区女厕厕| 日韩精品高清视频| 亚洲视频免费一区| 久久精品中文字幕免费mv| 亚洲欧美国产一区二区三区| 久久99久久亚洲国产| 国产精品99久久久久久久久久久久| 国产精品高潮在线| 一区二区三区 在线观看视| 欧洲中文字幕国产精品| 美女黄色丝袜一区| 久久精品电影一区二区| 欧美视频13p| 人体精品一二三区| 亚洲国产美女久久久久| 精品国产91乱高清在线观看| 亚洲精品影视在线观看| 国产亚洲欧洲高清一区| 亚洲欧美精品在线| 午夜精品视频网站| 欧美一区二区三区免费视| 亚洲精品视频在线播放| 1769国内精品视频在线播放| 久久精品视频中文字幕| 日韩欧美亚洲成人| 欧美成人午夜免费视在线看片| 欧美日韩一二三四五区| 一区二区三区国产在线观看| 色琪琪综合男人的天堂aⅴ视频| 久久精品国产亚洲7777| 亚洲一区二区三区视频播放| 日韩在线小视频| 亚洲国产成人久久综合| 亚洲人成亚洲人成在线观看| 久久综合国产精品台湾中文娱乐网| 日本久久久久久久| 亚洲欧洲日韩国产| 国产在线98福利播放视频| 亚洲欧美第一页| 自拍偷拍亚洲在线| 国产一区二区色| 91久久久久久| 国产91精品网站| 欧美性猛交xxxx| 亚洲第一中文字幕在线观看| 91av视频在线观看| 欧美有码在线观看视频| 欧洲成人在线视频| 久久综合久中文字幕青草| 97热精品视频官网| 国产国语刺激对白av不卡| 国产精品视频资源| 92看片淫黄大片欧美看国产片| 欧美高清视频在线| 欧美视频中文在线看| 亚洲欧美日韩爽爽影院| 亚洲国产成人在线视频| 日韩精品在线观看一区| 欧美有码在线观看视频| 国产精品国产三级国产aⅴ9色| 亚洲欧美日韩在线一区| 久久久久亚洲精品国产| 亚洲国产日韩欧美在线图片| 国产91色在线免费| 欧美成年人在线观看| 亚洲第一天堂无码专区| 97在线精品国自产拍中文| 按摩亚洲人久久| 91亚洲精品在线| 日韩经典第一页| 久久视频精品在线| 欧美老女人bb| 一区二区国产精品视频| 亚洲a成v人在线观看| 欧美国产日韩一区二区| 国内精品久久久久影院 日本资源| 狠狠躁夜夜躁人人爽超碰91| 亚洲二区在线播放视频| 亚洲欧美在线一区二区| 欧美国产精品日韩| 日韩黄色高清视频| 97福利一区二区| 日本一区二区在线播放| 欧美成人精品三级在线观看| 国产色综合天天综合网| 欧美又大粗又爽又黄大片视频| 国产精品91一区| 欧美性高潮床叫视频| xvideos亚洲| 一区二区亚洲欧洲国产日韩| 播播国产欧美激情| 91精品国产91久久久久久| 国产ts人妖一区二区三区| 97国产精品久久| 国产精品视频内| 国产一区玩具在线观看| 欧美超级乱淫片喷水| 91超碰中文字幕久久精品| 亚洲国产精品va在线观看黑人| 亚洲成人国产精品| 国产91精品青草社区| 久久精品成人欧美大片| 韩国三级日本三级少妇99| 日韩欧美在线国产| 欲色天天网综合久久| 亚洲女在线观看| 国产精品男人的天堂| 久久精品国产电影| 91sao在线观看国产| 亚洲精品视频免费在线观看| 日韩专区在线播放| 成人午夜一级二级三级| 亚洲精品网站在线播放gif| 欧美精品久久久久久久| 中文字幕在线视频日韩| 欧美国产一区二区三区| 高跟丝袜一区二区三区| 日韩久久精品电影| 欧美性在线视频| 国产精品网红福利| 成人免费淫片视频软件| 国产美女久久精品香蕉69| 欧美另类高清videos| 精品国产乱码久久久久酒店| 亚洲国产美女久久久久| 国产欧美在线看| 中文字幕日韩专区| 最近2019年好看中文字幕视频| 亚洲成人教育av| 少妇高潮 亚洲精品| 亚洲а∨天堂久久精品9966| 国产精品入口免费视| 久久久久亚洲精品成人网小说| 日韩欧美亚洲范冰冰与中字| 国产精品久久视频| 尤物九九久久国产精品的特点| 欧美性极品少妇精品网站| 2023亚洲男人天堂| 亚洲区在线播放| 欧美日韩国产在线| 欧美诱惑福利视频| 亚洲国产成人在线视频| 久久久免费精品| 亚洲国产成人久久|