程式開啟前先登入... |
答題得分者是:herbert2
|
don750421
一般會員 發表:11 回覆:12 積分:4 註冊:2012-09-27 發送簡訊給我 |
小弟想要再開啟主程式前,先載入一個登入視窗讓使用者登入
再登入成功後,再將登入的資訊傳入主程式 我已經先將Login畫面設為程式 那麼如果我登入成功,我要使用哪種方式開啟主要的程式?? 使用ShowModel的話,那只是將登入視窗隱藏在主程式背後 想請問一下,如果我要在使用者按下登入按鈕後,如果登入正確 就Load 主程式的畫面,而"關閉"登入畫面.. ================================================ 我上網找了一些資料大概先寫一個版本測試...如下 http://www.mediafire.com/download.php?fioxvgbkfc4qfo6 因為先測試階段,假設ID為apple,PW為123456 如果輸入的ID及PW正確,則將ID傳到Mainform的Label.. 但是,無論我輸入的ID及密碼是否正確,都跳出輸入錯誤的MessageBox... 請問是我的寫法哪有問題呢?? 不曉得有沒有BCB版本的Sample可以參考呢?? 編輯記錄
don750421 重新編輯於 2012-11-28 08:39:46, 註解 無‧
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
將 TEST_CWF.cpp 修改如下試試
[code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "LoginCtrl.h" //--------------------------------------------------------------------------- USEFORM("Main.cpp", MainForm); USEFORM("Class\Login\LoginCtrl.cpp", frmLogin); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); TfrmLogin* LogInForm=new TfrmLogin(Application); /* if (mrYes == LogInForm->ShowModal()) { // 這句 if 不對, LogInForm 不會傳回 mrYes Application->CreateForm(__classid(TMainForm), &MainForm); // Application->CreateForm(__classid(TfrmLogin), &frmLogin); // 刪掉, 它已 new 並 ShowModal Application->Run(); } else { MessageBoxA(NULL,"tEST","TEST",NULL); } */ Application->CreateForm(__classid(TMainForm), &MainForm); LogInForm->ShowModal(); if (LogInForm->ModalResult != mrYes) { Application->MessageBox("YourMessage","YourCaption",MB_ICONSTOP||MB_OK); delete LogInForm; return 0; } Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } /* 刪掉贅段 catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } */ delete LogInForm; // 補, new 後要 delete return 0; } //--------------------------------------------------------------------------- [/code] |
don750421
一般會員 發表:11 回覆:12 積分:4 註冊:2012-09-27 發送簡訊給我 |
感謝您的回覆,但是照您上述修改,Key入我預設的ID(apple)及PW(123456)..
無論是否有Key 正確,都跳出MessageBox("YourMessage","YourCaption",MB_ICONSTOP||MB_OK); 另外再請教一個問題!!... 如果我在Login畫面輸入的ID是正確的,我想要將ID傳回主畫面.. 那麼我該怎麼做呢??有辦法傳嗎?? 謝謝 ===================引 用 herbert2 文 章=================== 將 TEST_CWF.cpp 修改如下試試 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "LoginCtrl.h" //--------------------------------------------------------------------------- USEFORM("Main.cpp", MainForm); USEFORM("Class\Login\LoginCtrl.cpp", frmLogin); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); TfrmLogin* LogInForm=new TfrmLogin(Application); /* if (mrYes == LogInForm->ShowModal()) { // 這句 if 不對, LogInForm 不會傳回 mrYes Application->CreateForm(__classid(TMainForm), &MainForm); // Application->CreateForm(__classid(TfrmLogin), &frmLogin); // 刪掉, 它已 new 並 ShowModal Application->Run(); } else { MessageBoxA(NULL,"tEST","TEST",NULL); } */ Application->CreateForm(__classid(TMainForm), &MainForm); LogInForm->ShowModal(); if (LogInForm->ModalResult != mrYes) { Application->MessageBox("YourMessage","YourCaption",MB_ICONSTOP||MB_OK); delete LogInForm; return 0; } Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } /* 刪掉贅段 catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } */ delete LogInForm; // 補, new 後要 delete return 0; } //--------------------------------------------------------------------------- [/code]
編輯記錄
don750421 重新編輯於 2012-11-29 07:11:42, 註解 無‧
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
這是因您的 LoginCtrl.cpp 寫錯, 永遠是 mrNo 所致.
if(cv_txtLoginID == "apple" && cv_txtLoginPW == "123456") 應更正為 if(cv_txtLoginID->Text == "123456") TEdit 與 AnsiString 是無法比較的. 您應多注意 Component 的各 Property 的型別與意義. 只要在 Main.cpp 開頭的宣告段, 加入 『#include "LoginCtrl.h"』及『extern TfrmLogin *LogInForm;』 Main.cpp 就可以讀取 LogInForm->cv_txtLoginID->Text 與 LogInForm->cv_txtLoginPW->Text.
編輯記錄
herbert2 重新編輯於 2012-11-29 09:15:56, 註解 無‧
|
don750421
一般會員 發表:11 回覆:12 積分:4 註冊:2012-09-27 發送簡訊給我 |
感謝您,一時沒注意到要擷取到Edit的屬性..測試之後確定OK。
但是,第二個將輸入的ID傳回Main.. 我是直接將#include "LoginCtrl.h"放在Main.h的上方 並且將extern TfrmLogin *LogInForm; 放置在Main.h的最下方... 並在將Mainform 顯示時將ID秀在Mainform的Label上.. __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { AnsiString cv_LoginUser = LogInForm->cv_txtLoginID->Text; Label1->Caption = cv_LoginUser; } 但是卻出現以下錯誤 [Linker Error] Unresolved external '_LoginForm' referenced from "D:\Temp\TEST_CWF"... 另外一個問題是,我在LoginForm會透過DB去確認ID及PW是否正確.. 一併將使用者的名字存放在一個變數中...假設為AnsiString cv_username 那麼,如果要給MainForm存取,是麼是否要將這個變數設為public呢?? 不好意思,問題有點多 ===================引 用 herbert2 文 章=================== 這是因您的 LoginCtrl.cpp 寫錯, 永遠是 mrNo 所致. if(cv_txtLoginID == "apple" && cv_txtLoginPW == "123456") 應更正為 if(cv_txtLoginID->Text == "123456") TEdit 與 AnsiString 是無法比較的. 您應多注意 Component 的各 Property 的型別與意義. 只要在 Main.cpp 開頭的宣告段, 加入 『#include "LoginCtrl.h"』及『extern TfrmLogin *LogInForm;』 Main.cpp 就可以讀取 LogInForm->cv_txtLoginID->Text 與 LogInForm->cv_txtLoginPW->Text. |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
[code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "LoginCtrl.h" //--------------------------------------------------------------------------- USEFORM("Main.cpp", MainForm); USEFORM("Class\Login\LoginCtrl.cpp", frmLogin); //--------------------------------------------------------------------------- /* 插入下列 2012/11/30 22:42 */ TfrmLogin* LogInForm; WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); // TfrmLogin* LogInForm=new TfrmLogin(Application); /* 改如下列 2012/11/30 22:42 */ LogInForm=new TfrmLogin(Application); /* if (mrYes == LogInForm->ShowModal()) { // 這句 if 不對, LogInForm 不會傳回 mrYes Application->CreateForm(__classid(TMainForm), &MainForm); // Application->CreateForm(__classid(TfrmLogin), &frmLogin); // 刪掉, 它已 new 並 ShowModal Application->Run(); } else { MessageBoxA(NULL,"tEST","TEST",NULL); } */ Application->CreateForm(__classid(TMainForm), &MainForm); LogInForm->ShowModal(); if (LogInForm->ModalResult != mrYes) { Application->MessageBox("YourMessage","YourCaption",MB_ICONSTOP||MB_OK); delete LogInForm; return 0; } Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } /* 刪掉贅段 catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } */ delete LogInForm; // 補, new 後要 delete return 0; } //--------------------------------------------------------------------------- [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |