字體:小 中 大 |
|
|
|
| 2011/06/06 17:02:00瀏覽1209|回應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; //消除令人困擾的訊息聲音 } //--------------------------------------------------------------------------- |
|
| ( 不分類|不分類 ) |










