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

有关焦点问题

答題得分者是:Fishman
Anonimity
一般會員


發表:8
回覆:9
積分:3
註冊:2004-01-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-28 13:29:25 IP:220.173.xxx.xxx 未訂閱
大家好。本人是新进会员,请多关照。 本人想请教一个问题。在Windows程序中,如“记事本”,输入内容后,如直接点击退出,将会出现一对话框,询问是否保存,如点取消,焦点就在最后编辑的位置闪烁,以便继续输入。现在用DBEdit控件向数据库输入,实现类似的功能。以下是本人写的代码: procedure TTestForm.ExitButtonClick(Sender: TObject); begin if ADOTable1.Modified then begin if flag=1 then//以下为添加状态 begin case Application.MessageBox('是否保存已输入的内容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) of IDYES:DBNavigator1.BtnClick(nbPost); IDCancel:Abort; IDNO:TestForm.Close; end; end else//以下为编辑状态 begin case Application.MessageBox('是否保存已修改的内容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) of IDYES:DBNavigator1.BtnClick(nbPost); IDCancel:Abort; IDNO:TestForm.Close; end; end; end; TestForm.Close; end; 现在的问题是点击取消后,焦点消失了。如何实现焦点就在最后编辑的位置闪烁,如用指定控件名,SetFocus,是可以实现。但控件太多,如何知道焦点最后所处的位置?有简捷的方法吗?请指点,谢谢。 不断学习
------
不断学习
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-28 13:48:20 IP:210.65.xxx.xxx 未訂閱
Hi:    先定義一個全域變數 LastEdit : TObject; 並將所有的 DBEdit 的 OnExit 事件指定為以下之程式碼
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
    LastEdit := Sender;
end;    再用
CASE Application.MessageBox('是否保存已修改的內容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) OF
    IDYES    : DBNavigator1.BtnClick(nbPost);
    IDCancel : BEGIN
                   Abort;
                   TDBEDit(LastEdit).SetFocus;
               END;
    IDNO     : TestForm.Close;
END;
即可 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Anonimity
一般會員


發表:8
回覆:9
積分:3
註冊:2004-01-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-28 14:36:31 IP:220.173.xxx.xxx 未訂閱
谢谢Fishman,您提供的解决方法不错。只是顺序有些问题,我试验后应为: CASE Application.MessageBox('是否保存已修改的內容?','提示',MB_YESNOCANCEL MB_ICONEXCLAMATION) OF IDYES : DBNavigator1.BtnClick(nbPost); IDCancel : BEGIN TDBEDit(LastEdit).SetFocus; Abort; END; IDNO : TestForm.Close; END; 再表谢意。 贪心多问一下,用以上方法光标是停在DBEdit控件内容的最后位置,但不是原来的某一个任意位置,有解决办法吗? 实际上FishMan已经解决了我的问题,只是想再请教请教,技术上更精而已。 不断学习
------
不断学习
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-28 14:48:50 IP:210.65.xxx.xxx 未訂閱
Hi:    將 DBEdit 的 AutoSelect 屬性設為 False 再試試!!    此外,若你的元件非 TDBEdit 也可以,只是在 SetFocus 前須先判定 LastEdit 的 Type(用 Sender.ClassNameIs('xxx'))後再做處置     -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Anonimity
一般會員


發表:8
回覆:9
積分:3
註冊:2004-01-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-28 15:47:20 IP:220.173.xxx.xxx 未訂閱
确如FishMan所言,谢谢。 不断学习
------
不断学习
系統時間:2024-06-24 21:00:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!