如何滑鼠偵測重疊的元件 |
答題得分者是:jow
|
chen412
一般會員 ![]() ![]() 發表:2 回覆:4 積分:1 註冊:2008-01-30 發送簡訊給我 |
|
ttnnrsseb
中階會員 ![]() ![]() ![]() 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
|
chen412
一般會員 ![]() ![]() 發表:2 回覆:4 積分:1 註冊:2008-01-30 發送簡訊給我 |
|
jow
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin OnMouseDown := ___TEST; for I := 0 to ControlCount-1 do begin if not (Controls[I] is TPaintBox) then Continue; TPaintBox(Controls[I]).OnMouseDown := ___TEST; end; end; procedure TForm1.___TEST(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I: Integer; pt: TPoint; L: TStringList; begin L := TStringList.Create; try GetCursorPos(pt); pt := Self.ScreenToClient(pt); for I := 0 to ControlCount-1 do begin if not (Controls[I] is TPaintBox) then Continue; if not PtInRect(Controls[I].BoundsRect,pt) then Continue; L.Add(Controls[I].Name); end; ListBox1.Items.Text := L.Text; finally FreeAndNil(L); end; end; [/code] |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
jow前輩出手便知有沒有,借花獻佛將jow前輩的方式改成BCB版本 ^^ .h class TForm1 : public TForm { __published: // User declarations void __fastcall TForm1::___TEST(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); public: // User declarations __fastcall TForm1(TComponent* Owner); };
.cpp void __fastcall TForm1::FormCreate(TObject *Sender) { onMouseDown = ___TEST; for (int I=0; I
if (!Controls[I]->ClassNameIs("TPaintBox")){ continue; } ((TPaintBox*)Controls[I])->onMouseDown = ___TEST; } } //--------------------------------------------------------------------------- void __fastcall TForm1::___TEST(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int I; TPoint pt; TStringList *L = new TStringList; GetCursorPos(&pt); pt = this->ScreenToClient(pt); for (I=0; I
if (!Controls[I]->ClassNameIs("TPaintBox")){ continue; } if (!PtInRect(Controls[I]->BoundsRect, pt)){ continue; } L->Add(Controls[I]->Name); } ListBox1->Items->Text = L->Text; delete L; }
編輯記錄
taishyang 重新編輯於 2012-08-15 19:55:43, 註解 無‧
|
chen412
一般會員 ![]() ![]() 發表:2 回覆:4 積分:1 註冊:2008-01-30 發送簡訊給我 |
不好意思,請問FormCreate中的這兩行我編不過,要怎麼使用呢?
forbidden = ___TEST; ((TPaintBox*)Controls[I])->forbidden = ___TEST; 我用您的code再依 jow大的delphi的寫法改成OnMouseDown 就可以了! void __fastcall TForm2::Button1Click(TObject *Sender) { if (!Controls[I]->ClassNameIs("TPaintBox")){ } } }
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
chen412
一般會員 ![]() ![]() 發表:2 回覆:4 積分:1 註冊:2008-01-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |