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

請問關於下達Abort後,讓之後的動作都無法運作

答題得分者是:Justmade
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-06 17:46:34 IP:61.219.xxx.xxx 未訂閱
目前我是用一個TEdit, 在onExit事件中判斷該Edit中的值是否存在在資料庫, 有則可以離開, 沒有的話,先顯示訊息,讓Foucs在自己,再下abort。 一開始是用按鈕做存檔的功能時, 可以因為讓Focus離開而觸發onExit事件,而使得按鈕無法按下去。 但是後來為了畫面的美觀,改用TImage後, 在OnClick寫下跟按鈕一樣的功能。 但此時按扭按下時,卻不會觸發該Edit的onExit, 只會直接執行圖片的功能。 下面有一個簡單的例子, 一個Form上有一個Edit,一個Button,一個Image 一開始Foucs在Edit,在onExit有顯示訊息和Focus回自己 , 按下按鈕時,會觸發onExit的事件, 但是按圖片卻不會觸發onExit的事件, 可能是因為圖片無法focus,所以仍然可以觸發圖片的onClick。 請問有沒有辦法讓圖片在被按到的時候, 會先判斷是否有下abort的動作, 如果有的話, 則不做TImage的動作。 例子的程式如下 ------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Image1: TImage; procedure Edit1Exit(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Image1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Edit1Exit(Sender: TObject); begin Showmessage('Error'); Edit1.SetFocus; abort; end; procedure TForm1.Button1Click(Sender: TObject); begin showmessage('Button'); end; procedure TForm1.Image1Click(Sender: TObject); begin showmessage('Image'); end; end. ------------------------------------ ---------------- 快滿一年程設師, 日日工作寫程式, 每買樂透眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-06 17:54:54 IP:147.8.xxx.xxx 未訂閱
procedure TForm1.Image1Click(Sender: TObject);
begin
   Edit1Exit(nil);
   showmessage('Image');
end;
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-06 18:19:34 IP:61.219.xxx.xxx 未訂閱
有沒有辦法是利用移動Focus, 然後觸發到Edit1的onExit後,因為Abort, 使得Image的程序無法執行。 因為我把Edit1做成另一個元件, 主要是判斷目前某一個Table內是否有該資料 然後用 procedure CMExit(var Message: TCMExit); message CM_EXIT; 來寫離開focus要做什麼, 所以可能沒有辦法呼叫onExit事件(因為該事件沒有寫程式,是利用訊息來做) 而且會觸發這個事件的元件有很多,所以也可能無法一個個這樣呼叫。 因為我原本以為只要下abort,所有的程式都不會執行下去, 可是目前看來好像是只有Edit1的程序不會執行, Image好像還是會Run下去, 有其他的方法可以解決嗎? ---------------- 快滿一年程設師, 日日工作寫程式, 每買樂透眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-06 19:09:23 IP:61.70.xxx.xxx 未訂閱
skurama SIR:    你的意思是否為 按下IMAGE 時  EDIT 並沒有ONEXIT    僅供參考,歡迎繼續發言願以此功德 莊嚴佛淨土 上報四重恩 下濟三塗苦 若有見聞者 悉發菩提心 盡此一報身 同生極樂國
------
︿︿
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-06 19:20:39 IP:219.130.xxx.xxx 未訂閱
有一個旁門方法 1. 放一個可Focus的元件 (例如 Edit, 叫 FakeEdit) 2. 將它藏在其他元件後便使看不見(不能設 Visiable=false 否則不能 Focus) 3. 在Image.onClick 設 : FakeEdit.SetFocus; // 觸法之前 Control 的 CMExit if ActiveControl <> FakeEdit then exit; // 註 ShowMessage('click'); 註 : 若出錯 你的 CMExit 會將 Focus 移回,所以不會留在 FakeEdit。這時一對若 ActiveControl 不是 FakeEdit 即出錯下面程式不執行,若Focus 成功移到 FakeEdit 即沒出錯可執行。 這個程序沒限死某個元件,所以你可有很多不同的元件檢錯只要錯誤時回到自己元件 Image,onClick 下面的 Code 就不會執行。
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-06 19:32:33 IP:61.219.xxx.xxx 未訂閱
我在Image中會加入Query.Applyupdates的命令, 此時會觸發Edit1的onExit事件, 如果此時Edit1的資料不正確時,則會觸發abort, 但是此時Image仍然在做寫入資料的動作, 也就是畫面會顯示錯誤訊息,但資料仍然寫到資料庫中, 所以想問問看,是否有什麼方法,能夠觸發到onExit事件, 而如果有錯時,能讓Image存入資料庫的程式不被執行 Ex: 判斷是否有abort的動作 有:Exit; 沒有:query1.applyupdates; 甚至當Edit1的onExit被下Abort後,所有的程式都不會繼續下去。 william大大的方法雖然可以解決, 但因為會有一個畫面有七八個元件都要判斷, 變成在image中要下八次onExit而且要只到目前foucsed在哪個元件, 而目前我也把onExit事件的程式包成一個元件, 所以會發生元件的onExit並沒有寫程式, 而是寫在該元件的 procedure CMExit(var Message: TCMExit); message CM_EXIT;事件中, 所以變成william大大的方法也無法用。 所以想問問是否有人也是把程式寫在Image中, 也有在Edit1的focused離開時,卻可以做到判斷資料正確性, 正確則存檔,不正確則不能存檔。 之前我的做法有二個 一個是在元件的onExit事件中寫一次, 在Image中在寫一次判斷的程式, 後來改成在元件的onExit事件中存一個存域變數, 當有錯時該變數變成False, 在image一開始些讓Focused跳離,觸發onExit事件, 一但該變數為False時,則不存檔了。 不過就像之前說的,判斷的程式已包在元件中, 而包在裡面的程式有下abort, 所以想問問看, 是否有辦法能判斷是否目前有下abort的程式, 然後做後面的動作? 謝謝~ ---------------- 快滿一年程設師, 日日工作寫程式, 每買樂透眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-06 19:58:56 IP:61.13.xxx.xxx 未訂閱
旁門歸旁門, 還是個不錯地方法呢~~~ 謝謝啦~~~ ---------------- 快滿一年程設師, 日日工作寫程式, 每買樂透眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
系統時間:2024-11-23 7:26:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!