全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1211
推到 Plurk!
推到 Facebook!

如何設定在未關閉form前指標不可跑出form的範圍吶???

尚未結案
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-15 16:08:26 IP:61.59.xxx.xxx 未訂閱
請問各位前輩高手們~~~ 若以主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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-15 16:38:26 IP:63.84.xxx.xxx 未訂閱
您好﹗    1﹒可以改用ShowModal方法來控制使用者只能作業當前Form3﹐就不會點擊到Form2中的物件了﹒ 2﹒在Form3的OnClose事件中﹐加入您需要在Form2中處理的程式碼﹐如﹕Form2.Show等等﹐Unit中請Use Form2 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-15 17:04:57 IP:61.59.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-15 17:12:25 IP:202.39.xxx.xxx 未訂閱
引言: Application.CreateForm(TUnionForm, UnionForm); UnionForm.ShowModal; 時,當我在form2按下Button時會出現下列的錯誤訊息”Cannot make a visible window modeal"耶~~~
關於這一點, form2 在 CreateForm 前 的 Visible 要設為 False --- 歡迎光臨 KTop 研究院
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-15 17:50:23 IP:63.84.xxx.xxx 未訂閱
您好﹗    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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-15 18:18:15 IP:218.160.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-16 16:49:22 IP:61.59.xxx.xxx 未訂閱
感謝各位高手的回應~~~ 依據大家的教導,我將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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-16 17:04:14 IP:63.84.xxx.xxx 未訂閱
您好﹗    請參考如下紅色藍色修改處﹕ 感謝各位高手的回應~~~ 依據大家的教導,我將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
------
忻晟
系統時間:2024-05-18 13:16:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!