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

關於TModalResult

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


發表:1
回覆:4
積分:1
註冊:2009-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-20 23:40:11 IP:125.230.xxx.xxx 訂閱
各位大大請幫個忙

小弟剛接觸BCB不久,現在陷入難題已經兩三個禮拜了

小弟想做一個影像處理的MDI介面

基本上,效果都可以執行,影像都可以處理

但是,為了使程式更加人性化

所以我希望可以結合另一個From

譬如說

現在要做一個Lowpass Filter好了

我希望在點「Lowpass Filter」的時候,會出現From1

然後可以選擇3*3或5*5或7*7的遮罩

最後按下Ok,才執行動作

---------------------------------------------------------
Lowpass的程式都打好了

Form1也設計好了

Form1的Unit1也include了

我在程式前

打了一些判斷的程式

TModalResult result = Form1->ShowModal();


if(result == mrOk )

{
if(Form1->RadioGroup1->ItemIndex==0)
{
[程式省略]
}

}

不知道這樣打有什麼錯誤

執行Lowpass時,中斷會停在
TModalResult result = Form1->ShowModal()這行

這應該要怎麼解決

我的Form1的buttom也有設bkOk 回傳mrOk



請幫個忙謝謝!!

------------------------------------------------------

我重做一個Form


程式都一樣,竟然可以跑= =

滿想知道問題發生在哪裡@@
編輯記錄
john90471 重新編輯於 2009-03-21 11:20:14, 註解 無‧
john90471 重新編輯於 2009-03-29 15:58:09, 註解 無‧
john90471 重新編輯於 2009-04-03 16:49:48, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-21 08:21:15 IP:211.72.xxx.xxx 訂閱
TModalResult result = Form1->ShowModal();
// ShowModal() 若 Form1 不 Close 便一直等待, 不知您是否卡在這兒?

我的Form1的buttom也有設mbOk(筆誤?) 回傳mrOk

john90471
一般會員


發表:1
回覆:4
積分:1
註冊:2009-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-21 11:19:42 IP:125.230.xxx.xxx 訂閱

===================引 用 herbert2 文 章===================
TModalResult result = Form1->ShowModal();
// ShowModal() 若 Form1 不 Close 便一直等待, 不知您是否卡在這兒?

我的Form1的buttom也有設mbOk(筆誤?) 回傳mrOk



--------------------------------------------------------------------------
/ ShowModal() 若 Form1 不 Close 便一直等待, 不知您是否卡在這兒?
↑我不懂甚麼意思

我希望了[影像處理的->lowpass]按鈕,會出現From1

然後Key完值,按下確定,才開始動作

目前我一執行,他就跳回程式,中斷在
TModalResult result = Form1->ShowModal();


下面是筆誤


我的Form1的buttom也有設mbOk(筆誤?) 回傳mrOk


應該是kind的bkOk
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-22 02:38:59 IP:211.72.xxx.xxx 訂閱
令 Form1 執行(顯示於螢幕上) 的方法有兩種:
一: Form1->Show(); 則 Form1 便開始執行, 然後繼續執行呼叫 Form1 之 Form (例如 Form0) 的下一列程式指令,
例如: if (result == mrOK) {....}
二: Form1->ShowModal(); 則 Form1 便開始執行, 然後須等 Form1 Close 後, 才繼續執行呼叫 Form1 之 Form (例如 Form0) 的下一列程式指令,
例如: if (result == mrOK) {....}

依據您的狀況, 採 ShowModal() 方式是正確的, 但要於 Form1 的 BtnOK 中設定 bkOK, 以便 Form1 Close 時,
將 Form1 的 ModalResult 設為 mrOK 並傳回給呼叫者, 讓.呼叫者可以依 Form1 之傳回值決定要如何進行下一步.

不知您所謂的『就跳回程式,中斷在TModalResult result = Form1->ShowModal();』到底您想要什麼結果?
難到您是想要 Form1 繼續顯示於螢幕上嗎? 若真是如此, BtnOK 便不可設為 bkOK, 應設 bkCustom,
等 Form1 之 BtnOKClick() Event 執行完後, 才設 Form1 之 ModalResult = mrOK, 接著才執行 Close() ;
否則您一按 BtnOK 就會馬上令 Form1 Close 並傳回 mrOK 給 Form0.
請參考 Help 之 TBitBtn 之 Kind 的說明.

或許誤會您的意思了, 不知以上說明是否幫得上?
john90471
一般會員


發表:1
回覆:4
積分:1
註冊:2009-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-24 23:13:04 IP:125.230.xxx.xxx 訂閱
我是想按下Ok之後,Main上面的Image開始做處理

你的說話,我好像聽的懂

只是我現在沒辦法開啟另一個From

一開就錯誤

以下附上我的程式:



void __fastcall TMainForm::Log1Click(TObject *Sender)

{

TMDIChild *Child;

Child = ((TMDIChild*) ActiveMDIChild);

Graphics::TBitmap *TheBitmap;

TheBitmap = Child->Image1->Picture->Bitmap;



Byte *ptr1;

double s1, s2, s3;

float c;

int Gamma;







TModalResult result = Form2->ShowModal();





if(result == mrOk )



{

if(Form2->RadioGroup1->ItemIndex==0)

{

c = StrToFloat(Form2->Edit1->Text);

Gamma = StrToInt(Form2->Edit2->Text);



for(int j=0; jHeight; j )

{

ptr1 = (Byte*) TheBitmap->ScanLine[j];

for(int i=0; iWidth; i )

{

s1 = c*log(pow(1 (ptr1[i*3]/255.0),Gamma));

s2 = c*log(pow(1 (ptr1[i*3 1]/255.0),Gamma));

s3 = c*log(pow(1 (ptr1[i*3 2]/255.0),Gamma));



ptr1[i*3] =(Byte)s1;

ptr1[i*3 1] =(Byte)s2;

ptr1[i*3 2] =(Byte)s3;

}

}



}



}



Repaint();

Child->Image1->Picture->Bitmap->Assign(TheBitmap);



}



TModalResult result = Form2->ShowModal();

↑這個一定要打嗎?

我一開始只打 Form2->ShowModal();

也是不行
編輯記錄
john90471 重新編輯於 2009-03-24 23:15:11, 註解 無‧
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-25 09:44:44 IP:61.67.xxx.xxx 訂閱
若Form2的FormStyle屬性是fsMDIChild則無法使用ShowModal
請將Form2的FormStyle屬性改為fsNormal
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-25 14:48:44 IP:211.72.xxx.xxx 訂閱
您的用法有點奇怪!
既然 Form2 是 MDIChild, 且已經是 ActiveMDIChild, 那幹啥又要 ShowModal()?
宜設 Form2 為 fsNormal, 將其 ShowModal() 或 Show() 較恰當!

若您的 Form2 不立即 Close, 則不可用 ShowModal() 及 TModalResult,
須用 Show() 及另外的 Property (例如: Form2->Tag) 控制.
john90471
一般會員


發表:1
回覆:4
積分:1
註冊:2009-03-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-29 15:45:41 IP:125.230.xxx.xxx 訂閱
這個我都沒有動過

他本來就是設定這樣

謝謝你的提醒^^
john90471
一般會員


發表:1
回覆:4
積分:1
註冊:2009-03-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-29 15:46:44 IP:125.230.xxx.xxx 訂閱
@@我還是霧煞煞
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-03-29 20:20:26 IP:211.72.xxx.xxx 訂閱
"他本來就是設定這樣", 所以他本來就是不能正常執行嗎?
若本來就是不能正常執行, 則改用 fsNormal 試試又何妨?

===================引 用 john90471 文 章===================
這個我都沒有動過

他本來就是設定這樣

謝謝你的提醒^^
系統時間:2024-04-19 16:55:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!