線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1109
推到 Plurk!
推到 Facebook!

動態元件如何拖曳呢?

尚未結案
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-12 08:40:38 IP:61.221.xxx.xxx 未訂閱
各位先進好:            小弟想要在使用動態元件時,想要讓一動態元件拖曳至另一動態   元件時,交換彼此的值(可能是caption or TEXT),想請問各位大大要如何達成呢? 如下圖是小弟建立的動態元件EDIT的距陣,目前想要拖曳1至3時,希望能讓 值互相對換, 經由拖曳變成如下圖的效果,請問前輩們可行嗎?
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-12 18:41:45 IP:61.63.xxx.xxx 未訂閱
引言: 各位先進好: 小弟想要在使用動態元件時,想要讓一動態元件拖曳至另一動態 元件時,交換彼此的值(可能是caption or TEXT),想請問各位大大要如何達成呢? 如下圖是小弟建立的動態元件EDIT的距陣,目前想要拖曳1至3時,希望能讓 值互相對換, 經由拖曳變成如下圖的效果,請問前輩們可行嗎?
terence_lee你好: 寫一個兩個 class="code"> Unit1.h ~~ class TForm1 : public TForm { __published: // IDE-managed Components void __fastcall FormCreate(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall Edit1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Edit1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall Edit1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Edit2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Edit2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall Edit2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); }; Unit1.cpp ~~ TForm1 *Form1; TEdit* Edit1; //初始時設定有兩個TEdit元件 TEdit* Edit2; int org1_x,org1_y; //Edit1的原始座標(x,y) int now1_x,now1_y; //Edit1移動過程的座標(x,y) int org2_x,org2_y; //Edit2的原始座標(x,y) int now2_x,now2_y; //Edit2移動過程的座標(x,y) //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Edit1=new TEdit(this); Edit1->Parent=this; Edit1->this->Edit1MouseDown; Edit1->this->Edit1MouseMove; Edit1->this->Edit1MouseUp; Edit1->Left=50; Edit1->Top=100; Edit1->Width=100; Edit1->Height=50; Edit1->Text="OOO"; Edit1->AutoSize=false; Edit1->Font->Size=24; Edit2=new TEdit(this); Edit2->Parent=this; Edit2->this->Edit2MouseDown; Edit2->this->Edit2MouseMove; Edit2->this->Edit2MouseUp; Edit2->Left=500; Edit2->Top=100; Edit2->Width=100; Edit2->Height=50; Edit2->Text="XXX"; Edit2->AutoSize=false; Edit2->Font->Size=24; org1_x=Edit1->Left; org1_y=Edit1->Top; org2_x=Edit2->Left; org2_y=Edit2->Top; } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button==mbLeft) { org1_x=Edit1->Left; org1_y=Edit1->Top; now1_x=X; now1_y=Y; SetWindowPos(Edit1->Handle,HWND_TOP,Edit1->Left,Edit1->Top,Edit1->Width,Edit1->Height,SWP_SHOWWINDOW); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (Shift.Contains(ssLeft)) { Edit1->Left+=(X-now1_x); Edit1->Top+=(Y-now1_y); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int hon_diff,ver_diff; hon_diff=abs(Edit1->Left-Edit2->Left); ver_diff=abs(Edit1->Top-Edit2->Top); if (hon_diff<15 && ver_diff<15) { //判斷是否交換 AnsiString buf; buf=Edit1->Text; Edit1->Text=Edit2->Text; Edit2->Text=buf; } Edit1->Left=org1_x; Edit1->Top=org1_y; } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button==mbLeft) { org2_x=Edit2->Left; org2_y=Edit2->Top; now2_x=X; now2_y=Y; SetWindowPos(Edit2->Handle,HWND_TOP,Edit2->Left,Edit2->Top,Edit2->Width,Edit2->Height,SWP_SHOWWINDOW); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (Shift.Contains(ssLeft)) { Edit2->Left+=(X-now2_x); Edit2->Top+=(Y-now2_y); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int hon_diff,ver_diff; hon_diff=abs(Edit1->Left-Edit2->Left); ver_diff=abs(Edit1->Top-Edit2->Top); if (hon_diff<15 && ver_diff<15) { //判斷是否交換 AnsiString buf; buf=Edit1->Text; Edit1->Text=Edit2->Text; Edit2->Text=buf; } Edit2->Left=org2_x; Edit2->Top=org2_y; } //--------------------------------------------------------------------------- Conclusion 1.範例示範如果任一元件托到另一元件上時,就交換彼此的caption(text),,不管有無交換caption,托曳完後元件都各自回到自已原來的postion 2.承上,當Edit1托曳至Edit2上方時,是要完全疊合才可以交換caption,或是只要大概 疊合就可以交換,這個尺度要以自身的需求衡量設定! 3.同時有9個TEdit元件時,判斷某個元件托曳到那一個元件上時的判斷過程當然比較複雜 ,這個就請自行再延伸撰寫了,只是精神比照本範例! 4.另外一樣,事件最好要共用,才不用寫一堆! All,! 發表人 -
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-15 16:14:32 IP:61.221.xxx.xxx 未訂閱
謝謝版主再次為小弟解答...感激不盡...
系統時間:2024-06-18 0:42:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!