[BCB] 如何寫一個模擬DOS輸入命令列的視窗
2011/06/06 17:02
瀏覽1,139
迴響0
推薦0
引用0
問題:
在C++Builder中,我想寫一個類似(模擬) DOS視窗的組件,有以下特性:
每次我都只能在某一列輸入指令,指令最前面最好有個>提醒記號
按下Enter時候,會顯示在命令列上面,並自動換下一行
答案:
事實上BCB沒有提供這樣的元件,這的確是一種遺憾。.Net也沒有,看來使用Dos命令列來輸入指令大概只能當老人的喜好,
既然沒有我們就自己寫吧!基本原理是使用Memo搭配Edit來模擬。事實上我們是在Edit上輸入命令,並輸出在Memo中
具體做法:
拉一個Memo,一個Edit,將memo的enabled設為false讓使用者無法focured,拉一個Edit,擺在適當位置。
按一下Memo的Lines,改變內容為:
Please input your data at below:
>
當然你也可以根據你的喜好改變這段文字,重點是Edit要剛好在>後面,使用者以為在Memo裡,實際輸入都在Edit中,只是每次按下Enter,會輸出訊息在Memo中...
接著輸入以下程式碼,這邊都很白話,你應該要看得懂每一行在做甚麼
int LineNum=1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
LineNum = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Edit_Simulation->SetFocus(); //讓游標聚焦在edit,好像命令列一樣
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit_SimulationKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==13)
{
suiMemo_Input->Lines->Delete(LineNum++); //消去最後一行
suiMemo_Input->Lines->Append(">"+Edit_Simulation->Text);//將訊息印出
suiMemo_Input->Lines->Append(">"); //並增加下一個>記號
if(Edit_Simulation->Top<100) Edit_Simulation->Top+=21; //改變Edit位置,讓使用者以為換行
Edit_Simulation->Clear(); //當然,要清除掉原先內容
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit_SimulationKeyPress(TObject *Sender, char &Key)
{
if(Key==13 || Key==1) Key=0; //消除令人困擾的訊息聲音
}
//---------------------------------------------------------------------------
在C++Builder中,我想寫一個類似(模擬) DOS視窗的組件,有以下特性:
每次我都只能在某一列輸入指令,指令最前面最好有個>提醒記號
按下Enter時候,會顯示在命令列上面,並自動換下一行
答案:
事實上BCB沒有提供這樣的元件,這的確是一種遺憾。.Net也沒有,看來使用Dos命令列來輸入指令大概只能當老人的喜好,
既然沒有我們就自己寫吧!基本原理是使用Memo搭配Edit來模擬。事實上我們是在Edit上輸入命令,並輸出在Memo中
具體做法:
拉一個Memo,一個Edit,將memo的enabled設為false讓使用者無法focured,拉一個Edit,擺在適當位置。
按一下Memo的Lines,改變內容為:
Please input your data at below:
>
當然你也可以根據你的喜好改變這段文字,重點是Edit要剛好在>後面,使用者以為在Memo裡,實際輸入都在Edit中,只是每次按下Enter,會輸出訊息在Memo中...
接著輸入以下程式碼,這邊都很白話,你應該要看得懂每一行在做甚麼
int LineNum=1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
LineNum = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Edit_Simulation->SetFocus(); //讓游標聚焦在edit,好像命令列一樣
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit_SimulationKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==13)
{
suiMemo_Input->Lines->Delete(LineNum++); //消去最後一行
suiMemo_Input->Lines->Append(">"+Edit_Simulation->Text);//將訊息印出
suiMemo_Input->Lines->Append(">"); //並增加下一個>記號
if(Edit_Simulation->Top<100) Edit_Simulation->Top+=21; //改變Edit位置,讓使用者以為換行
Edit_Simulation->Clear(); //當然,要清除掉原先內容
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit_SimulationKeyPress(TObject *Sender, char &Key)
{
if(Key==13 || Key==1) Key=0; //消除令人困擾的訊息聲音
}
//---------------------------------------------------------------------------
你可能會有興趣的文章:
限會員,要發表迴響,請先登入