兩則畫面處理問題 |
答題得分者是:P.D.
|
cilan
一般會員 發表:6 回覆:13 積分:3 註冊:2011-06-13 發送簡訊給我 |
Login Form處理 需求:Login畫面關閉後,直接進入主功能畫面。 // dpr程式段 Begin program ASSET; uses Forms, AstDM in '..\global\AstDM.pas' {DMAst: TDataModule}, uLogin in 'uLogin.pas' {frmLogin}, uMain in 'uMain.pas' {frmMain}, Aglobal in '..\global\Aglobal.pas'; {$R *.RES} begin Application.Initialize; Application.CreateForm(TDMAst, DMAst); Application.CreateForm(TfrmLogin, frmLogin); Application.CreateForm(TfrmMain, frmMain); Application.Run; end. // dpr程式段 End //Login form 片段Start if qryTemp.Fieldbyname('PWD').AsString <> edtPWD.Text then begin logintimes:=logintimes 1; if logintimes >= 3 then begin showmessage('連續輸入三次錯誤密碼,即將退出!'); Close; end else begin showmessage('密碼錯誤!->' inttostr(logintimes) ' (請確認大小寫的差異)'); edtPWD.SetFocus; end; end else begin frmLogin.FormStyle:= fsNormal; 會全部關掉,所以暫把推到底層 Application.CreateForm(TfrmMain, frmMain); // 進入Asset主畫面 當執行到這裡時全部都會關掉! end; //Login form 片段End 2.選單與畫面 (圖片請參考附檔) 功能主選單(frmMain) 整個藍色框內都屬於frmMain 功能訴求是希望點選功能項後,能把指定的功能畫面show在功能畫面區,且能緊貼著;當關閉功能時,又回復到如上圖畫面!也就是功能畫面能隨著主畫面移動座標。希望能像Word介面一樣:選單與編輯整合在一起。 請問在frmMain和各功能畫面的Position, FormStyle, WindowState分別要怎麼給值,才能達到需求?
------
- 嵐 - |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
你最大的問題在於
誤把frmLogin Form 當成 Main Form, 所以當然 frmLogin 被Free, 所有child form 都跟著被Free掉 到你的 Project 選項中的 Options 查看一下 Main Form 是指定給誰 我相信絕對是 Application.CreateForm(TfrmLogin, frmLogin); ===================引 用 cilan 文 章=================== Login Form處理 需求:Login畫面關閉後,直接進入主功能畫面。 // dpr程式段 Begin program ASSET; uses Forms, AstDM in '..\global\AstDM.pas' {DMAst: TDataModule}, uLogin in 'uLogin.pas' {frmLogin}, uMain in 'uMain.pas' {frmMain}, Aglobal in '..\global\Aglobal.pas'; {$R *.RES} begin Application.Initialize; Application.CreateForm(TDMAst, DMAst); Application.CreateForm(TfrmLogin, frmLogin); Application.CreateForm(TfrmMain, frmMain); Application.Run; end. // dpr程式段 End //Login form 片段Start if qryTemp.Fieldbyname('PWD').AsString <> edtPWD.Text then begin logintimes:=logintimes 1; if logintimes >= 3 then begin showmessage('連續輸入三次錯誤密碼,即將退出!'); Close; end else begin showmessage('密碼錯誤!->' inttostr(logintimes) ' (請確認大小寫的差異)'); edtPWD.SetFocus; end; end else begin frmLogin.FormStyle:= fsNormal; 會全部關掉,所以暫把推到底層 Application.CreateForm(TfrmMain, frmMain); // 進入Asset主畫面 當執行到這裡時全部都會關掉! end; //Login form 片段End 2.選單與畫面 (圖片請參考附檔) 功能主選單(frmMain) 整個藍色框內都屬於frmMain 功能訴求是希望點選功能項後,能把指定的功能畫面show在功能畫面區,且能緊貼著;當關閉功能時,又回復到如上圖畫面!也就是功能畫面能隨著主畫面移動座標。希望能像Word介面一樣:選單與編輯整合在一起。 請問在frmMain和各功能畫面的Position, FormStyle, WindowState分別要怎麼給值,才能達到需求?
|
cilan
一般會員 發表:6 回覆:13 積分:3 註冊:2011-06-13 發送簡訊給我 |
謝謝PD大大
調整程式碼後,帶來了另一個問題......如下 //////////////////////////////////////////////// procedure TfrmMain.FormCreate(Sender: TObject); var QryTemp:TADOQuery; lflag:boolean; begin frmLogin:= TfrmLogin.Create(Application); frmLogin.showmodal; lflag:=loginflag; frmLogin.free; // <-- 關閉登錄畫面 if not lflag then // <-- 當驗證失敗時 begin // 這一段要怎麼下指令,才能結束掉整支程式? end; ASTpath:=''; CNTpath:=''; QryTemp:=TADOQuery.Create(nil); QryTemp.ConnectionString := AstDM.conAsset; QryTemp.SQL.Add('select * from ASBSYSM'); try QryTemp.Open; : : /////////////////////////////////////////////////////////////
------
- 嵐 - |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
程式終結最常用 Application.Terminate
不過我個人並不很喜歡用這個方式 Form1 (mainform) call Form2 (loginform) Form2不符, Form1.Close 這是最好的做法 如果如你是把 Form2 Show 寫在 o n c r e a t e 事件上, 那基本上下 Form1.Close並不會把 MainForm給Close 因為它正在Creating 中 有很多方法調整 另外把 form2 create 放在 o n s h o w 或 o n a c t i v e 上應該都可行 或者我常的有一個 StartRun 的方式 放在 o n i d a l 上 搜尋一下本站 StartRun 用法, 我之前的案例應該還在站上 ===================引 用 cilan 文 章=================== 謝謝PD大大 調整程式碼後,帶來了另一個問題......如下 //////////////////////////////////////////////// procedure TfrmMain.FormCreate(Sender: TObject); var QryTemp:TADOQuery; lflag:boolean; begin frmLogin:= TfrmLogin.Create(Application); frmLogin.showmodal; lflag:=loginflag; frmLogin.free; // <-- 關閉登錄畫面 if not lflag then // <-- 當驗證失敗時 begin // 這一段要怎麼下指令,才能結束掉整支程式? end; ASTpath:=''; CNTpath:=''; QryTemp:=TADOQuery.Create(nil); QryTemp.ConnectionString := AstDM.conAsset; QryTemp.SQL.Add('select * from ASBSYSM'); try QryTemp.Open; : : ///////////////////////////////////////////////////////////// |
cilan
一般會員 發表:6 回覆:13 積分:3 註冊:2011-06-13 發送簡訊給我 |
首先,謝謝「老大仔」指點的方向;
MDI 方法不知道是不是不熟悉用法,怎麼用都怪! 目前還是用原來的笨方法......因為讓form on top,所以缺陷是其它視窗都會被蓋住! 再者,謝謝PD大大詳細指導。 問題解決了,不過幾種用法我都會嚐試看看! ===================引 用 P.D. 文 章=================== 程式終結最常用 Application.Terminate 不過我個人並不很喜歡用這個方式 Form1 (mainform) call Form2 (loginform) Form2不符, Form1.Close 這是最好的做法 如果如你是把 Form2 Show 寫在 o n c r e a t e 事件上, 那基本上下 Form1.Close並不會把 MainForm給Close 因為它正在Creating 中 有很多方法調整 另外把 form2 create 放在 o n s h o w 或 o n a c t i v e 上應該都可行 或者我常的有一個 StartRun 的方式 放在 o n i d a l 上 搜尋一下本站 StartRun 用法, 我之前的案例應該還在站上
------
- 嵐 - |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |