線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1856
推到 Plurk!
推到 Facebook!

程式開啟前先登入...

答題得分者是:herbert2
don750421
一般會員


發表:11
回覆:12
積分:4
註冊:2012-09-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-11-23 23:12:52 IP:114.27.xxx.xxx 訂閱
小弟想要再開啟主程式前,先載入一個登入視窗讓使用者登入
再登入成功後,再將登入的資訊傳入主程式

我已經先將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
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-11-29 17:03:19 IP:202.39.xxx.xxx 訂閱
將 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-11-29 21:55:49 IP:118.171.xxx.xxx 訂閱
感謝您的回覆,但是照您上述修改,Key入我預設的ID(apple)及PW(123456)..
無論是否有Key 正確,都跳出MessageBox("YourMessage","YourCaption",MB_IC==================引 用 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
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-11-29 23:59:40 IP:202.39.xxx.xxx 訂閱
這是因您的 LoginCtrl.cpp 寫錯, 永遠是 mrNo 所致.

if(cv_txtLoginID == "apple" && cv_txtLoginPW == "123456")
應更正為
if(cv_txtLoginID->Text == "apple" && cv_txtLoginPW->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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-11-30 01:31:17 IP:118.171.xxx.xxx 訂閱
感謝您,一時沒注意到要擷取到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 == "apple" && cv_txtLoginPW->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
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-11-30 22:30:32 IP:202.39.xxx.xxx 訂閱


[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]
編輯記錄
herbert2 重新編輯於 2012-11-30 07:31:58, 註解 無‧
herbert2 重新編輯於 2012-11-30 07:33:53, 註解 無‧
herbert2 重新編輯於 2012-11-30 07:37:14, 註解 無‧
herbert2 重新編輯於 2012-11-30 07:38:20, 註解 無‧
herbert2 重新編輯於 2012-11-30 07:39:53, 註解 無‧
系統時間:2017-12-14 2:46:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!