請問關於下達Abort後,讓之後的動作都無法運作 |
答題得分者是:Justmade
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
目前我是用一個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 發送簡訊給我 |
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
有沒有辦法是利用移動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 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
有一個旁門方法
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 發送簡訊給我 |
我在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |