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

請問button的form怎麼傳送參數到FormCreate裡

答題得分者是:carstyc
js80875
一般會員


發表:2
回覆:2
積分:0
註冊:2008-12-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-06-09 03:03:50 IP:220.140.xxx.xxx 訂閱
我想要由input_ok的button經過字元判斷來傳送參數,
符合的傳送到FormCreate裡的接收條件,
想要傳送int
不曉得要用什麼指令,

[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString s;
float x;
接收條件 =0;
while(接收條件 == 1){
x=StrToFloat(x_input->Text);
s.printf("%2.2f",x);
printf("%2.2f",x);
info1->Lines->Add(s);
}
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
if(x_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
傳送參數
}
}
[/code]
編輯記錄
js80875 重新編輯於 2009-06-09 03:05:20, 註解 無‧
js80875 重新編輯於 2009-06-09 03:06:30, 註解 無‧
js80875 重新編輯於 2009-06-09 03:07:30, 註解 無‧
js80875 重新編輯於 2009-06-09 03:08:49, 註解 到FormCreate裡的while‧
js80875 重新編輯於 2009-06-09 03:11:25, 註解 無‧
js80875 重新編輯於 2009-06-09 05:59:48, 註解 無‧
js80875 重新編輯於 2009-06-09 06:40:55, 註解 無‧
taishyang 重新編輯於 2009-06-09 09:57:31, 註解 刪除[急急急]‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-06-09 09:34:31 IP:163.28.xxx.xxx 訂閱
FormCreate() ??
只會執行一次~就是Form建立時,
所以沒辦法傳進去...
------
FPGA驗證, FPGA開發平台, http://smims.com
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-09 10:25:47 IP:203.79.xxx.xxx 訂閱
如ikk大大所講的, FormCreate 只會執行一次。

你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它

[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
myprocedure(1);
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
if(x_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
myprocedure(1);
}
}
void __fastcall TForm1::myprocedure(int nIn)
{
AnsiString s;
float x;
接收條件 =0;
while(接收條件 == 1){
x=StrToFloat(x_input->Text);
s.printf("%2.2f",x);
printf("%2.2f",x);
info1->Lines->Add(s);
}
}

[/code]




===================引 用 js80875 文 章===================
我想要由input_ok的button經過字元判斷來傳送參數,
符合的傳送到FormCreate裡的接收條件,
想要傳送int
不曉得要用什麼指令,

[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString s;
float x;
接收條件 =0;
while(接收條件 == 1){
x=StrToFloat(x_input->Text);
s.printf("%2.2f",x);
printf("%2.2f",x);
info1->Lines->Add(s);
}
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
if(x_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
傳送參數
}
}
[/code]
js80875
一般會員


發表:2
回覆:2
積分:0
註冊:2008-12-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-06-09 16:52:51 IP:220.140.xxx.xxx 訂閱
感謝ikk和carstyc的回覆,我自己敲了一個procedure放主程式下去測試,
出現了兩個錯誤,Call to undefined function 'myprocedure''
上面說未定義,我先前的TForm都是從button或者memo或者event的屬性來的,
是要從Form面板上或者event屬性來定義嗎,
因為我procedure打算要放主程式,不知道要選哪個event來放比較合適,
另一個錯誤'_fastcall TForm1::myprocedure(int)' is not a member of 'TForm1'
不屬於TForm1的成員,我網路上找的定義方式大至上都是類似這宣告方式,
不知道是什麼細節出錯,

void __fastcall TForm1::FormCreate(TObject *Sender)
{
myprocedure(1);
}
void __fastcall TForm1::myprocedure(int input_x)
{
AnsiString infoprt1;
infoprt1.printf("%d",input_x);
info2->Lines->Add(infoprt1);
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
int input_x;
int touch1=1;
if(x_coord_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
input_x=StrToFloat(x_coord_input->Text);
myprocedure(1);
}
}

===================引 用 carstyc 文 章===================
如ikk大大所講的, FormCreate 只會執行一次。

你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它

[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
myprocedure(1);
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
if(x_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
myprocedure(1);
}
}
void __fastcall TForm1::myprocedure(int nIn)
{
AnsiString s;
float x;
接收條件 =0;
while(接收條件 == 1){
x=StrToFloat(x_input->Text);
s.printf("%2.2f",x);
printf("%2.2f",x);
info1->Lines->Add(s);
}
}
[/code]
編輯記錄
js80875 重新編輯於 2009-06-09 17:25:39, 註解 無‧
js80875 重新編輯於 2009-06-09 17:35:22, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-06-09 16:57:46 IP:118.169.xxx.xxx 訂閱
個人覺得你需要一本BCB的書帶你入門,熟悉BCB的IDE環境與使用
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-06-09 17:08:49 IP:203.79.xxx.xxx 訂閱
真的,  taishyang  大大說的沒錯。

論譠中只能跟你講程式處理的模式,但基本的BCB 語法還是要靠你自己去完成。

你說的問題是因為你在程式段寫了一個 procedure ,但未在 .h 的檔案中去宣告它屬於這個 Form 的 method 。

你把你程式的 .h (如 Unit1.h ) 打開看一下,應該就能明白了。



===================引 用 js80875 文 章===================
感謝ikk和carstyc的回覆,我自己敲了一個procedure放主程式下去測試,
出現了兩個錯誤,Call to undefined function 'myprocedure''
上面說未定義,我先前的TForm都是從button或者memo或者event的屬性來的,
是要從Form面板上或者event屬性來定義嗎,
因為我procedure打算要放主程式,不知道要選哪個event來放比較合適,
另一個錯誤'_fastcall TForm1::myprocedure(int)' is not a member of 'TForm1'
不屬於TForm1的成員,我網路上找的定義方式大至上都是類似這宣告方式,
不知道是什麼細節出錯,

void __fastcall TForm1::FormCreate(TObject *Sender)
{
myprocedure(1);
}
void __fastcall TForm1::myprocedure(int input_x)
{
AnsiString infoprt1;
infoprt1.printf("%d",input_x);
info2->Lines->Add(infoprt1);
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
int input_x;
int touch1=1;
if(x_coord_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
input_x=StrToFloat(x_coord_input->Text);
myprocedure(1);
}
}

===================引 用 carstyc 文 章===================
如ikk大大所講的, FormCreate 只會執行一次。

你要做的應該是把 FormCreate 要做的事,寫成另一個 procedure ,然後在 FormCreate 時去呼叫它

[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
myprocedure(1);
}
void __fastcall TForm1::input_okClick(TObject *Sender)
{
if(x_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
myprocedure(1);
}
}
void __fastcall TForm1::myprocedure(int nIn)
{
AnsiString s;
float x;
接收條件 =0;
while(接收條件 == 1){
x=StrToFloat(x_input->Text);
s.printf("%2.2f",x);
printf("%2.2f",x);
info1->Lines->Add(s);
}
}
[/code]
js80875
一般會員


發表:2
回覆:2
積分:0
註冊:2008-12-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-06-09 19:30:06 IP:220.140.xxx.xxx 訂閱
感謝taishyang大大的指點,我是去圖書館借旗標的c++ builder 6來參考,
大部分是去網路上爬文,之後會買本比較詳細的書來看,
也感謝carstyc大大提示我method,
carstyc大大我還有個問題想問,
scanf指令在dos視窗會等待使用者輸入字元,
在bcb上我把主程式放進新增的procedure內,
想要寫和scanf一樣有等待輸入字元鍵入enter效果的迴圈,
裡頭有好幾個類似input=StrToFloat(x_input->Text);的edit接收參數,
分別用while條件迴圈去做和scanf一樣暫停的動作,
來和一樣在暫停時能在edit上鍵入字元,
可是測試的時候會因為迴圈的關係讓form面板和物件顯示不出來,
無法鍵入數字,不知道有沒有其他的方式來讓面板顯示出來再停住,
我有上傳檔案,/* */框住的部份是讓面板顯示不出來的while迴圈,
http://ultrashare.net/hosting/fl/9f127af2d9/3test

void __fastcall TForm1::myprocedure(int input_x,int touch1)
{
info2->Lines->Add("請輸入X");
do{
Sleep(10);
}while(touch1!=1);
AnsiString infoprt1;
infoprt1.printf("%d",input_x);
info2->Lines->Add(infoprt1);
info2->Lines->Add("以上");
}
void __fastcall TForm1::input2Click(TObject *Sender)
{
Image_car->Hide();
info2->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::input_okClick(TObject *Sender)
{
int input_x;
//int touch1=1;
if(x_coord_input->Text ==""){
ShowMessage("未輸入數字,請重新輸入");
}else{
input_x=StrToFloat(x_coord_input->Text);
myprocedure(input_x,1);
}
}

===================引 用 carstyc 文 章===================[code cpp]
真的, taishyang 大大說的沒錯。

論譠中只能跟你講程式處理的模式,但基本的BCB 語法還是要靠你自己去完成。

你說的問題是因為你在程式段寫了一個 procedure ,但未在 .h 的檔案中去宣告它屬於這個 Form 的 method 。

你把你程式的 .h (如 Unit1.h ) 打開看一下,應該就能明白了。
[/code]
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-06-09 19:53:25 IP:118.169.xxx.xxx 訂閱
你現在寫的是[視窗程式]不是[console]
你現在寫的用的是console的思路 ^_^
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-06-09 21:23:19 IP:219.84.xxx.xxx 訂閱
你說的做法是以前在 Dos 時代,也就是你所謂的 Console 模式,才會有用while 迴圈等待輸入的狀態。

現在的開發工具,都是以事件趨動了。

也就是你在Form 上面 拉一個 Text ,再拉一個 Button 。程式就能執行了。

完全已經不用 while 迴圈來做事,當有人按 Button 時,就會去啟動 on Click 的事件。

你可以在 Button 的 on Click 事件,去寫你要做的事,這個時候也可以讀取使用者在 Text 中輸入的資料。


你在這樣的模式下,執行一個無窮while 迴圈,當然會把所有的resource 吃光,使的所有的Form 上面的元件都沒空去做其它事。

包含Refresh,所以看起來才像是Form上面的元件沒有回應。

建議你先不要再繼續Try code了.

先把借來的那本書,仔細的看看前面幾個章節。尤其看看沒有介紹 BCB 開發工具的章節。

等把基本的搞熟一點後,再來試看看繼續...這樣會比較有成就感哦...






===================引 用 js80875 文 章===================
感謝taishyang大大的指點,我是去圖書館借旗標的c builder 6來參考,
大部分是去網路上爬文,之後會買本比較詳細的書來看,
也感謝carstyc大大提示我method,
carstyc大大我還有個問題想問,
scanf指令在dos視窗會等待使用者輸入字元,
在bcb上我把主程式放進新增的procedure內,
想要寫和scanf一樣有等待輸入字元鍵入enter效果的迴圈,
裡頭有好幾個類似input=StrToFloat(x_input->Text);的edit接收參數,
分別用while條件迴圈去做和scanf一樣暫停的動作,
來和一樣在暫停時能在edit上鍵入字元,
可是測試的時候會因為迴圈的關係讓form面板和物件顯示不出來,
無法鍵入數字,不知道有沒有其他的方式來讓面板顯示出來再停住,
我有上傳檔案,/* */框住的部份是讓面板顯示不出來的while迴圈,
http://ultrashare.net/hosting/fl/9f127af2d9/3test
編輯記錄
carstyc 重新編輯於 2009-06-09 21:24:52, 註解 無‧
carstyc 重新編輯於 2009-06-09 21:26:13, 註解 無‧
系統時間:2024-03-29 23:50:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!