首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經(jīng)濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產(chǎn)評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內(nèi)審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價師 | 土地估價師 | 巖土師
設備監(jiān)理師 | 房地產(chǎn)經(jīng)紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > Delphi > 復習資料 > 正文

2011計算機等級考試Delphi講義:Delphi拖放編程

來源:考試吧Exam8.com) 2010-10-27 14:55:28 考試吧:中國教育培訓第一門戶 模擬考場
Delphi提供的所有控件(Control,即能獲得輸入焦點的部件)都支持拖放操作,并有相應的拖放屬性、拖放事件和拖放方法。

  第九章 Delphi拖放編程

  拖放(DragDrop)是Windows提供的一種快捷的操作方式。作為基于Windows的開發(fā)工具,Delphi同樣支持拖放操作,而且開發(fā)應用系統(tǒng)的拖放功能十分方便,真正體現(xiàn)了Delphi的強大功能和方便性。

  Delphi提供的所有控件(Control,即能獲得輸入焦點的部件)都支持拖放操作,并有相應的拖放屬性、拖放事件和拖放方法。下面我們先介紹控件的拖放支持,而后再給出開發(fā)拖放操作的一般步驟和應用實例。

  9.1 控件的拖放支持

  拖放操作中控件可以分為源控件和目標控件兩類。絕大部分控件既可以作為源控件也可以作為目標控件。但也有一部分控件只能支持其中的一種。

  9.1.1 拖放屬性

  拖放屬性主要有兩個:

  ● DragMode : 拖動模式

  ● DragCursor : 拖動光標

  它們都是在拖放的源控件中設置。DragMode控制用戶在運行時間內(nèi)當在控件上按下鼠標時控件如何反應。如果DragMode置為dmAutomatic,那么當用戶在控件上按下鼠標時拖動自動開始;如果DragMode置為dmManual(這是缺省值),則將通過處理鼠標事件來判斷一個拖動是否可以開始。

  DragCursor用于選擇拖動時顯示的光標,缺省值是CrDrag,一般不要去修改它。在程序設計過程中通用的界面規(guī)范應該得到開發(fā)者的尊重。但有時候為了特定的目的,開發(fā)者也可以把自己設計的光標賦給DragCursor。

  9.1.2 拖放事件

  拖放事件主要有三個:

  ●OnDragOver:拖動經(jīng)過時激發(fā)

  ●OnDragDrop:拖動放下時激發(fā)

  ●OnEndDrop :拖動結(jié)束時激發(fā)

  前兩個事件由目標控件響應,后一個事件由源控件響應。

  OnDragOver事件最主要的功能是確定當用戶就地放下拖動時控件是否可以接受。它的參數(shù)包括:

  Source : TObject; {源控件}

  X,Y : Integer; {光標位置}

  State : TDragState; {拖動狀態(tài)}

  var Accept : Boolean {能否接受}

  TDragState是一個枚舉類型,表示拖放項目與目標控件的關(guān)系。

  type

  TDragState = (dsDragEnter, dsDragLeave, dsDragMove);

  不同取值的意義如下表:

  表9.1 DragState 的取值與意義

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  取 值 意 義

  ───────────────────────────

  dsDragEnter 拖動對象進入一個允許拖動對象放下

  的控件中。為缺省狀態(tài)。

  dsDragLeave 拖動對象離開一個允許拖動對象放下

  的控件。

  dsDragMove 拖動對象在一個允許拖動對象放下的

  控件內(nèi)移動。

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  用戶可以利用提供的參數(shù)來確定放下的拖動是否可被接受,如:

  ● 判斷源控件類型:

  Accept := Source is TLabel;

  ● 判斷源控件對象:

  Accept := (Source = TabSet1);

  ● 判斷光標位置:

  見(9.2),(9.3)中的例程。

  ● 判斷拖動狀態(tài):

  If (Source is TLabel) and (State = dsDragMove) then

  begin

  source.DragIcon := ' New.Ico ';

  Accept := True;

  end

  else

  Accept := False;

  當Accept=True時,目標控件可以響應OnDragDrop事件,用于確定拖動被放下后程序如何進行處理。

  OnDragDrop事件處理過程的參數(shù)包括源控件和光標位置。這些信息可用于處理方式的確定。

  OnEndDrag事件是在拖動操作結(jié)束后由源控件來進行響應的,用于源控件進行相應的處理。拖動操作結(jié)束既包括拖動放下被接受,也包括用戶在一個不能接受放下的控件上釋放了鼠標。該事件處理過程的參數(shù)包括目標控件(Target)和放下位置的坐標。如果Target=nil, 表示拖動項目沒有被任何控件接受。

  在第3節(jié)將介紹的文件拖放移動、拖放拷貝操作中,如果操作成功,則文件列表框應更新顯示內(nèi)容。下面這段程序用于實現(xiàn)這一功能。

  procedure TFMForm.FileListEndDrag(Sender, Target: TObject; X, Y: Integer);

  begin

  if Target <> nil then FileList.Update;

  end;

  除以上介紹的三個事件外,還有一個事件OnMouseDown 也常用于拖放操作的響應。OnMouseDown雖然不是一個專門的拖放事件,但在人工模式下拖動的開始是在這一事件的處理過程中實現(xiàn)的。

  9.1.3 拖放方法

  拖放方法有三個:

  ●BeginDrag : 人工方式下開始一個拖動

  ●EndDrag : 結(jié)束一個拖動

  ●Dragging : 判斷一個控件是否正被拖動

  這三個方法都被源控件使用。

  當DragMode置為dmManual時,拖動必須調(diào)用控件的BeginDrag方法才能開始。BeginDrag有一個布爾參數(shù)Immediate。如果輸入?yún)?shù)為True,拖動立即開始,光標改變到DragCursor的設置。如果輸入?yún)?shù)為False,直到用戶將光標移動了一定的距離(5個象素點)后才改變光標,開始拖動。這就允許控件接受一個OnClick事件而并不開始拖動操作。

  EndDrag方法中止一個對象的被拖動狀態(tài)。它有一個布爾參數(shù)Drop。如果Drop設置為True,被拖動的對象在當前位置放下(能否被接受由目標控件決定);如果Drop設置為False,則拖動就地被取消。

  下面一段程序表明當拖動進入一控制面板時拖動被取消。

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

  State: TDragState; var Accept: Boolean);

  begin

  Accept := False;

  if (Source is TLabel) and (State = dsDragEnter) then

  (Source as TLabel).EndDrag(False);

  end;

  Draging方法判斷一個控件是否正被拖動。在下面的例子中當用戶拖動不同的檢查框時窗口改變?yōu)椴煌念伾?/P>

  procedure TForm1.FormActivate(Sender: TObject);

  begin

  CheckBox1.DragMode := dmAutomatic;

  CheckBox2.DragMode := dmAutomatic;

  CheckBox3.DragMode := dmAutomatic;

  end;

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

  State: TDragState; var Accept: Boolean);

  begin

  if CheckBox1.Dragging then

  Color := clAqua;

  if CheckBox2.Dragging then

  Color := clYellow;

  if CheckBox3.Dragging then

  Color := clLime;

  end;

  9.2 開發(fā)拖放功能的一般步驟

  拖放作為Windows提供的一種方便操作對象的功能,在Delphi中可以很容易地開發(fā)出來。根據(jù)拖放操作的過程可以把開發(fā)步驟劃分為四個階段,即:

  ● 開始拖動操作

  ● 接收拖動項目

  ● 放下拖動項目

  ● 終止拖動操作

  在介紹過程中我們將結(jié)合一個TabSet(標簽集)的拖放操作實例。界面設計如圖。在運行時當用戶把一個標簽拖動到另一個標簽的位置時,該標簽將移動到該位置并引起標簽集的重新布置。

  9.2.1 開始拖動操作

  當拖動模式(DragMode)設置為dmAutomatic時,用戶在源控件上按下鼠標時拖動自動開始;當設置為dmManual時通過處理鼠標事件來決定拖動是否開始。如果想開始拖動調(diào)用BeginDrag方法。

  在TabSet拖放中,我們用下面的MouseDown事件處理過程來開始一個標簽的拖動。首先判斷按下的是否是左鍵,而后再判斷項目是否合法。

  procedure TForm1.TabSet1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

  var

  DragItem: Integer;

  begin

  if Button = mbLeft then

  begin

  DragItem := TabSet1.ItemAtPos(Point(X, Y));

  if (DragItem > -1) and (DragItem < TabSet1.Tabs.Count) then

  TabSet1.BeginDrag(False);

  end;

  end;

1 2 3 下一頁
  相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權(quán)聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。