14.Delphi 在窗體中移動(dòng)控件

1.任務(wù):在窗體中隨意移動(dòng)某個(gè)控件课竣,本例子選用的是個(gè)Shape控件挟鸠,且不能移出窗體炭懊;
2.打開(kāi)IDE,新建VCL應(yīng)用务冕,添加一個(gè)Shape1控件拇囊,添加一個(gè)RichEdit1控件;

  1. 需要手動(dòng)設(shè)置的屬性:Shape1.Shape 為'stCircle'覆享;
    4.需要手動(dòng)添加的事件:
    (1)窗體的創(chuàng)建事件:onCreate佳遂;
    (2)Shape1的鼠標(biāo)操作事件:MouseDown、MouseMove撒顿、MouseUp;
    5.編寫代碼:
var
  c: boolean; // 是否移動(dòng)的開(kāi)關(guān)
  tx, ty: Integer; // 鼠標(biāo)在控件上按下時(shí)的坐標(biāo)

procedure TForm1.FormCreate(Sender: TObject); 
begin
  c := false; // 窗體啟動(dòng)時(shí)丑罪,設(shè)置控件不可移動(dòng)
end;

// 下面是控件的鼠標(biāo)按下事件
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then   //判斷按下的是不是鼠標(biāo)左鍵
  begin
    c := true; // 按下鼠標(biāo)左鍵后,可以移動(dòng)

    RichEdit1.SelAttributes.Color := clBlue; // 改變最下一行的字體顏色
    RichEdit1.Lines.Add('開(kāi)始坐標(biāo):Left:' + Shape1.Left.ToString + '--Top:' +
      Shape1.Top.ToString);
    tx := X; // 記錄下鼠標(biāo)點(diǎn)擊的開(kāi)始坐標(biāo)X
    ty := Y; // 記錄下鼠標(biāo)點(diǎn)擊的開(kāi)始坐標(biāo) Y
  end;
end;

// 下面是控件的鼠標(biāo)移動(dòng)事件
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if c then
  begin

    Shape1.Left := Shape1.Left + X - tx; // 改變控件的Left坐標(biāo) ,X-tx是相對(duì)開(kāi)始時(shí)移動(dòng)的距離
    Shape1.Top := Shape1.Top + Y - ty; // 改變控件的Top坐標(biāo) ,Y-ty是相對(duì)開(kāi)始時(shí)移動(dòng)的距離

    // Form1.ClientWidth是窗體的用戶區(qū)的大小凤壁,即除去邊框的大小吩屹,控件在這個(gè)范圍內(nèi)是可見(jiàn)的。
    if Shape1.Left >= Form1.ClientWidth - Shape1.Width then // 如果移動(dòng)到右邊界了
      Shape1.Left := Form1.ClientWidth - Shape1.Width // 讓控件緊靠右邊界
    else if Shape1.Left <= 0 then // 如果移動(dòng)到左邊界
      Shape1.Left := 0; // 讓控件緊靠左邊界

    if Shape1.Top >= Form1.ClientHeight - Shape1.Height then // 如果移動(dòng)到下邊界了
      Shape1.Top := Form1.ClientHeight - Shape1.Height // 讓控件緊靠下邊界
    else if Shape1.Top <= 0 then // 如果移動(dòng)到上邊界了
      Shape1.Top := 0; // 讓控件緊靠上邊界

    RichEdit1.Lines.Add('移動(dòng)坐標(biāo):Left:' + Shape1.Left.ToString + '--Top:' +
      Shape1.Top.ToString);
  end;

end;

// 下面是控件的鼠標(biāo)釋放事件
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  c := false; // 放開(kāi)鼠標(biāo)后拧抖,不可以移動(dòng)
  RichEdit1.SelAttributes.Color := clRed; // 改變最下一行的字體顏色
  RichEdit1.Lines.Add('終點(diǎn)坐標(biāo):Left:' + Shape1.Left.ToString + '--Top:' +
    Shape1.Top.ToString);
end;

示例圖片:


14.1.jpg
14.2.jpg
14.3.jpg
14.4.jpg
14.5.jpg
14.6.jpg
14.7.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祟峦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子徙鱼,更是在濱河造成了極大的恐慌宅楞,老刑警劉巖针姿,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異厌衙,居然都是意外死亡距淫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門婶希,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榕暇,“玉大人,你說(shuō)我怎么就攤上這事喻杈⊥啵” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵筒饰,是天一觀的道長(zhǎng)缴啡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瓷们,這世上最難降的妖魔是什么业栅? 我笑而不...
    開(kāi)封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮谬晕,結(jié)果婚禮上碘裕,老公的妹妹穿的比我還像新娘。我一直安慰自己攒钳,他們只是感情好帮孔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著不撑,像睡著了一般文兢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燎孟,一...
    開(kāi)封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天禽作,我揣著相機(jī)與錄音尸昧,去河邊找鬼揩页。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烹俗,可吹牛的內(nèi)容都是我干的爆侣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼幢妄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兔仰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蕉鸳,我...
    開(kāi)封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乎赴,失蹤者是張志新(化名)和其女友劉穎忍法,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體榕吼,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饿序,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羹蚣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片原探。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖顽素,靈堂內(nèi)的尸體忽然破棺而出咽弦,到底是詐尸還是另有隱情,我是刑警寧澤胁出,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布型型,位于F島的核電站,受9級(jí)特大地震影響划鸽,放射性物質(zhì)發(fā)生泄漏输莺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一裸诽、第九天 我趴在偏房一處隱蔽的房頂上張望嫂用。 院中可真熱鬧,春花似錦丈冬、人聲如沸嘱函。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)往弓。三九已至,卻和暖如春蓄氧,著一層夾襖步出監(jiān)牢的瞬間函似,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工喉童, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撇寞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓堂氯,卻偏偏與公主長(zhǎng)得像蔑担,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咽白,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容