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

使用者登入

尚未結案
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-12 00:53:03 IP:203.70.xxx.xxx 未訂閱
請問各位一個問題唷, 我想為資料庫設計一個使用者登入時所遭遇到的。 我現有兩個Form,一個loginForm,一個是DataForm。 loginForm會先出現,要求使用者輸入密碼,正確後才會出現DataForm。 DataForm出現時,loginForm當然得關閉。 我不太清楚的地方是, Mainform在Option設為Dataform時, 我該在何處寫程式碼呼叫loginForm出現呢?? 且當使用者輸入完畢時,如何讓關掉LoginForm,出現DataForm?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-12 01:35:02 IP:203.204.xxx.xxx 未訂閱
avalokita 你好 你可以參考以下連結 http://delphi.ktop.com.tw/topic.php?topic_id=49716 注意程式碼是寫在專案檔(*.dpr)中! 發表人 - chance36 於 2004/07/12 01:36:16
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-12 09:57:09 IP:61.218.xxx.xxx 未訂閱
我的作法你參考看看 你可以在Mainform的onactive事件去呼叫loginform loginform設一個全域變數 紀錄login成功與否(在loginform做登錄檢查) 然後傳回給mainform 如果回傳是失敗的 則 application.Terminate 如果回傳成功 則 loginform就free掉 大致上是這樣做 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-12 17:05:28 IP:211.96.xxx.xxx 未訂閱
(1)在DataForm裡面加入; procedure TDataForm.FormCreate(Sender: TObject); begin loginForm.ShowModal ; end; (2)或者在DataForm裡面加入: procedure TForm1.FormShow(Sender: TObject); begin loginForm.ShowModal ; end; ====================== ^_^ 相信自己,你是最棒的! jacky ====================== 發表人 - guohua_fu 於 2004/07/12 17:08:48
------
jacky
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-12 23:31:20 IP:203.70.xxx.xxx 未訂閱
引言: 我的作法你參考看看 你可以在Mainform的onactive事件去呼叫loginform loginform設一個全域變數 紀錄login成功與否(在loginform做登錄檢查) 然後傳回給mainform 如果回傳是失敗的 則 application.Terminate 如果回傳成功 則 loginform就free掉
謝謝T.J.B您的解答: 但我發現若把呼叫loginform的code寫在onactive的事件時, 則畫面會出現loginForm在Mainform上的情形。 意即使用者即使登入不了,還是可看到MainForm的內容, 只是無法對MainForm進行操作而已。 而且在Onactive的事件中,似乎不能改變Mainform的Visible的性質。
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-12 23:42:32 IP:203.70.xxx.xxx 未訂閱
引言: avalokita 你好 你可以參考以下連結 http://delphi.ktop.com.tw/topic.php?topic_id=49716 注意程式碼是寫在專案檔(*.dpr)中! 發表人 - chance36 於 2004/07/12 01:36:16
謝謝chance36您的指教! 我現在把呼叫loginForm的Code寫在OnShow中, 是解決了方才的問題。 只是還想請教您,有關表單之間的參數傳遞問題。 若在loginForm的確定鈕Button按下後, 若登入成功,要讓MainForm出現的程式碼是這樣寫的嗎?? procedure TLogInForm.Button1Click(Sender: TObject); begin LogInForm.Close; mainform.Show; end; 還有在MainForm的OnShow部份.. procedure TMainForm.FormShow(Sender: TObject); begin loginform.ShowModal ; loginform.Free; end; 測試是可以, 但不曉得記憶體的配置, 有沒有問題?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-13 00:14:42 IP:203.204.xxx.xxx 未訂閱
avalokita 你好
procedure TLogInForm.Button1Click(Sender: TObject);
begin
  ModalResult := mrOK ; // 代表登入成功
  //ModalResult := mrCancel ; // 代表登入失敗
  Close;
end;    還有在MainForm的OnShow部份..
procedure TMainForm.FormShow(Sender: TObject);
begin
  If loginform.ShowModal= mrOK Then  Begin
    loginform.Free;
  End Else Begin
    //  loginform.Free;  // 反正要結束,Application會幫忙釋放
    Close; // 準備結束程式
  End;
end;    
基本上是沒什麼問題,只是你寫在FormShow的事件中,假如你有很多自動立的其他Form,則必須等所有的Form皆Create後,才會執行到MainFor.OnShow事件,所以這時Login不通過,要關閉程式時,剛剛好不容易建立的一些Form,還沒用到就要釋放了,似乎有點浪費。 之前那個連結中,即是將LoginFOrm在還沒建立MainForm及其他自動建立的Form之前即先行建立並讓使用者登入,未通過則直接結束程式,一點也不浪費建立及釋放的動作,若登入成功後才會建立主Form及其他Form。 發表人 - chance36 於 2004/07/13 00:24:32
系統時間:2024-09-10 11:13:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!