如何設定在未關閉form前指標不可跑出form的範圍吶??? |
尚未結案
|
rich777
一般會員 ![]() ![]() 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
請問各位前輩高手們~~~
若以主form call -> Available form 再call另一個-> Available form
如何設定第三層的form show出來時,在未close前滑鼠指標不可以移出form的範圍吶?
因為第三層form的顯示範圍比第二層的還小,怕使用者按到第二層的資料。
我試了半天只能將第三層from.TFormStyle=fsStayOnTop只能顯示在最上層,
若第二層有DBGrid元件不小心按到的話資料還是會動。 再延伸上述的問題,當第三層的from close時,會引動第二層的from什麼元素吶?
因在第三的from是多系統使用的,我希望第三層關閉時第二層的from可以做一些事。如我原來的工程單是新生狀態,我將其狀態以DBGrid顯示在第二層的form,
當我開啟第三層的from Key了該單的印刷資料並關閉回到第二層時,第二層表示生產狀態的欄位並不肥更新耶,須重新再SHOW一次第二層的form資料才會更新,如此問題該如何解決呢? 請問各位前輩高手們指導,謝謝!!!
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
rich777
一般會員 ![]() ![]() 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
感謝cashxin2002的熱心回應~~~
ShowModal並無法支援Available form型態的form耶...
我將原來的程式碼由
Application.CreateForm(TUnionForm, UnionForm);
UnionForm.Show;
改成
Application.CreateForm(TUnionForm, UnionForm);
UnionForm.ShowModal;
時,當我在form2按下Button時會出現下列的錯誤訊息”Cannot make a visible window modeal"耶~~~ 而第二點的form3 close回form2時要做的事,我是希望可以在form2做,因為那支程式會call from3我不清楚,所以希望可以在form3 close是否會觸動from2的什麼事件或方法,程式可以因為form2的獨特性,而有自己的程式碼? 再請高手們指導喔!!!感謝!!!
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 1﹒這個問題﹐請參考如下程式碼﹕
begin if Form3 <> Nil then Form3.ShowModal else Form3 := TForm3.Create(Self); Form3.ShowModal; end; end; Available Form是可以ShowModal的﹒ 2﹒小弟有些了解您所需要的效果了﹐請參考如下﹕ Form2的Button1(此Button的作用是開啟Form3)的Onclick事件中﹕ Var MyResult : Integer; begin Form3 := TForm3.Create(self); MyResult := Form3.ShowModal;取得Form3的ModalResult if MyResult = mrOk then ShowMessage('您按下OK按鈕關閉Form3') else if MyResult = mrYES then ShowMessage('您按下YES按鈕關閉Form3'); end; Form3中加入兩個Button﹐分別為OK和YES ButtonOK的OnClick事件﹕ begin ModalResult := mrOK; end; ButtonYES的OnClick事件﹕ begin ModalResult := mrYES; end;參考看看﹐是不是您需要的﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi rich777您好:
限制滑鼠試試
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Var FormRect : TRect; CursorPoint: TPoint; begin GetWindowRect(Form1.Handle, FormRect); GetCursorPos(CursorPoint); Windows.ScreenToClient(Form1.Handle,CursorPoint); ClipCursor(@FormRect); end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
rich777
一般會員 ![]() ![]() 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
感謝各位高手的回應~~~
依據大家的教導,我將Form3的 Visible 要設為 False
並將程式碼為改為:
procedure TForm_621.BitUnionsClick(Sender: TObject);
Var MyResult : Integer;
begin
UnionForm := TUnionForm.Create(Self);
MyResult := UnionForm.ShowModal; showmessage(inttostr(MyResult)); //測試回應值用 if MyResult>=0 then
begin
Tab_LotH2.Close;
Tab_LotH2.Open;
end;
end;
如此使用者按form2上任何物件皆無影響了~~~ 但還是有不足的地方,不管使用者在form3按了什麼buttom離開的無法辨別。
因MyResult的回應皆是2
我在form3放了二個buttom
form3.[存檔]的程式碼:
procedure TUnionForm.BitSaveClick(Sender: TObject);
Var WriteUnion:Boolean;
begin
ModalResult := mrOk;
.
.
.
略
close
end; form3.[離開]的程式碼:
procedure TUnionForm.Bit_ExitClick(Sender: TObject);
begin
ModalResult := mrAbort;
close;
end; 不管使用者按了什麼鈕離開的,from2上的MyResult變數皆收到2耶.... 而Miles建議的程式碼是要放那裡???
form1 or form2 or form3
我每個都試了一下還,不管放那個form都無效耶,滑鼠還是可以離開視窗耶~~~
procedure TUnionForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
FormRect : TRect;
CursorPoint: TPoint;
begin
GetWindowRect(UnionForm.Handle, FormRect);
GetCursorPos(CursorPoint);
Windows.ScreenToClient(UnionForm.Handle,CursorPoint);
ClipCursor(@FormRect);
end; 若各位前輩高手們,還有更好的方法希望再次指導,謝謝!!! ps.我使用的是delphi3
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 請參考如下紅色及藍色修改處﹕ 感謝各位高手的回應~~~
依據大家的教導,我將Form3的 Visible 要設為 False
並將程式碼為改為:
procedure TForm_621.BitUnionsClick(Sender: TObject); Var MyResult : Integer; begin UnionForm := TUnionForm.Create(Self); MyResult := UnionForm.ShowModal; showmessage(inttostr(MyResult)); //測試回應值用 if MyResult>=0 then begin Tab_LotH2.Close; Tab_LotH2.Open; end; end; 如此使用者按form2上任何物件皆無影響了~~~ 您沒有設定其MyResult的Modal﹐ShowModal當然抓不到其是用何種Modal結束Form3的﹕ if MyResult = mrOk then ShowMessage('您按下OK按鈕關閉Form3') ...... else if MyResult = mrYES then ShowMessage('您按下YES按鈕關閉Form3'); ...... 但還是有不足的地方,不管使用者在form3按了什麼buttom離開的無法辨別。 因MyResult的回應皆是2 我在form3放了二個buttom form3.[存檔并離開]的程式碼: procedure TUnionForm.BitSaveClick(Sender: TObject); Var WriteUnion:Boolean; begin ModalResult := mrOk; . . 略 close//請刪除此Close方法﹐因為ShowModal方法和ModalResult屬性之配合就可以抓出使用何種方法結束Form的 end; form3.[離開]的程式碼: procedure TUnionForm.Bit_ExitClick(Sender: TObject); begin ModalResult := mrAbort; close;//請刪除此Close方法﹐因為ShowModal方法和ModalResult屬性之配合就可以抓出使用何種方法結束Form的 end;不管使用者按了什麼鈕離開的,from2上的MyResult變數皆收到2耶.... 同上理﹐語法部分請參考小弟以上修改之處及前篇回复中的語法 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/09/16 18:31:38
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |