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

如何應用動態的表單及一些元件製作InputBox

尚未結案
phorn
一般會員


發表:28
回覆:60
積分:17
註冊:2004-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-03 13:21:32 IP:203.70.xxx.xxx 未訂閱
請問一下,因為我的程式需要Show出一個輸入方塊, 然後輸入函式執行所需要的參數,由於BCB內建的InputBox不方便輸入多個參數 所以我想應用動態的表單、按鈕、Edit製作一個輸入對話框,請問一下該怎麼寫呢?我現在只會把對話框建立出來,其他的功能就麻煩大大教導我了!!謝謝!! 發表人 -
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-03 15:33:32 IP:203.73.xxx.xxx 未訂閱
引言: 請問一下,因為我的程式需要Show出一個輸入方塊, 然後輸入函式執行所需要的參數,由於BCB內建的InputBox不方便輸入多個參數 所以我想應用動態的表單、按鈕、Edit製作一個輸入對話框,請問一下該怎麼寫呢?我現在只會把對話框建立出來,其他的功能就麻煩大大教導我了!!謝謝!! < face="Verdana, Arial, Helvetica">
phorn 你好:
(1)假設你的主 Form 叫做 Form1 (Unit1.h, Unit1.cpp),你自己製作用來讓使
   用者輸入資料的 Form 叫做 Form4 (Unit4.h, Unit4.cpp)
(2)假設在 Form4 上有兩個 Edit,分別為 Edit1, Edit2
(3)在 BCB 裡面按「Project/Options」出現「Project Options」Dialog,選擇
   「Forms」Tab,先確認 Form1 是「Auto-create forms」,而 Form4 是
   「Available forms」,最後按確定
(4)然後在 Unit1.cpp 裡面加入以下的程式碼,就可以達到目的
#include "Unit4.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form4=new TForm4(this);
   Form4->ShowModal();
   ShowMessage(Form4->Edit1->Text); // 取得 Form4 中 Edit1 的文字
   ShowMessage(Form4->Edit2->Text); // 取得 Form4 中 Edit2 的文字
   delete Form4;
   Form4=NULL;
}
(5)你在 Unit4.cpp 裡面可以利用一個全域變數,來標示是哪一個 Button 被按
   到,如果確定鈕被按到的話,可以先檢查 Edit1, Edit2 的內容是否正確,
   再決定關閉或讓使用者重新輸入;如果取消鈕被按到的話,無條件把 Form4
   關閉,並把 Edit1, Edit2 的內容清空,這樣子 Form1 就可以知道使用者是
   在什麼條件之下,把 Form4 給關閉了,例如:
// Unit1.cpp
#include "Unit4.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form4=new TForm4(this);
   Form4->ShowModal();
   if(Form4->Edit1->Text.Trim()=="" && Form4->Edit2->Text.Trim()=="")
   {
      ShowMessage("取消 或 x");
   }
   else
   {
      ShowMessage("確定\n"+Form4->Edit1->Text+"\n"+Form4->Edit2->Text);
   }
   delete Form4;
   Form4=NULL;
}    // Unit4.cpp
bool gbCanClose=true;
void __fastcall TForm4::FormCloseQuery(TObject *Sender, bool &CanClose)
{
   if(!gbCanClose)
   {
      // 檢查 Edit1, Edit2 的資料格式正確,例如: 檢查是否為空白?
      if(Edit1->Text.Trim()!="" && Edit2->Text.Trim()!="")
      {
         CanClose=true;
      }
      else
      {
         ShowMessage("重新輸入");
         CanClose=false;
         gbCanClose=true;
      }
   }
   else
   {
      Edit1->Text="";
      Edit2->Text="";
      CanClose=true;
   }
}
void __fastcall TForm4::Button1Click(TObject *Sender)
{
   gbCanClose=false;
   Close();
}
void __fastcall TForm4::Button2Click(TObject *Sender)
{
   gbCanClose=true;
   Close();
}
(6)請再依照自己的需求,自行修改
    < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --    發表人 - RaynorPao 於 2004/08/03  17:13:12
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
phorn
一般會員


發表:28
回覆:60
積分:17
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-03 16:38:00 IP:203.70.xxx.xxx 未訂閱
RaynorPao你好: 謝謝您的教導...< > 因為我需要的輸入方塊不只一個 而且每個輸入方塊的輸入項目不一樣,數量也不同 所以上面的方法不太適用...< >但是我也多學了一招...< > 那我想說能不能如我標題所說用動態的方法來完成< > 那我目前程式是寫到ShowModal()的部份 而我現在不知道『按確定時將值傳回,按取消及X時跳出』要怎麼寫? 麻煩 > 發表人 -
phorn
一般會員


發表:28
回覆:60
積分:17
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-05 15:08:41 IP:203.70.xxx.xxx 未訂閱
RaynorPao您好: 程式我已經寫好了,我是用BCB新增一個Dialog,然後在上面加入edit 然後要用時再去呼叫它 例如:    int Value = Dlg_Three->ShowModal();//Dlg_Threeg 是我新增的Dialog名稱 if(Value==2)return; int S1 = StrToInt(Dlg_Three->Edit1->Text); int S2 = StrToInt(Dlg_Three->Edit2->Text);    我們可以從他傳回的值判斷使用者是按確定或取消. 不知這麼做有沒有缺點,大大如果知道的話麻煩您??我謝謝!!
系統時間:2024-05-16 7:11:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!