當變數抓取一個Form的名稱時,要如何使該Form顯示? |
尚未結案
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
我照你的方式加了下面 3行
Handle Handle;
Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString);
ShowWindow(Handle); 但會出現錯誤下面的錯誤訊息.可再指點迷津ㄇ 謝謝!
statement missing; -> 這個錯誤指向了 Handle Handle;這行
引言: 阿都比:你試試看HANDLE Handle; Handle = FindWindow(null,"表單名稱"); ShowWindow(Handle); //也可試試看下列FUNCTION //BringWindowToTop(Handle) //SetForegroundWindow(Handle) //SetActiveWindow(Handle) |
plihui
初階會員 發表:88 回覆:96 積分:41 註冊:2003-07-03 發送簡訊給我 |
引言: 我照你的方式加了下面 3行 Handle Handle; ^^^^^^->這裡改成HANDLE(大小寫有差喔!!) Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString); ShowWindow(Handle); 但會出現錯誤下面的錯誤訊息.可再指點迷津ㄇ 謝謝! statement missing; -> 這個錯誤指向了 Handle Handle;這行呵... 小問題 以後多多注意一下喔 |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
Handle Handle;
請注意大小寫.正確為
HANDLE Handle;
在C 下.大小寫是不一樣ㄉㄛ~~
引言: 我照你的方式加了下面 3行 Handle Handle; Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString); ShowWindow(Handle); 但會出現錯誤下面的錯誤訊息.可再指點迷津ㄇ 謝謝! statement missing; -> 這個錯誤指向了 Handle Handle;這行引言: 阿都比:你試試看HANDLE Handle; Handle = FindWindow(null,"表單名稱"); ShowWindow(Handle); //也可試試看下列FUNCTION //BringWindowToTop(Handle) //SetForegroundWindow(Handle) //SetActiveWindow(Handle) |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
sorry 因為我是新手 請多包函
我改了一下,沒有錯誤出現,不過表單還是沒有顯示出來!! 但還是感謝你的幫忙
我把我的程式碼貼出來.(這個問提用很久了 還是弄不出來 嗚~~)
========================================================
DM->Query->Close();
DM->Query->SQL->Clear();
DM->Query->SQL->Add("SELECT 表單名稱 FROM TABLE_功能表 WHERE 功能名稱 LIKE '%"+NodeText+"%'"); if (! DM->Query->Prepared )
{
DM->Query->Close();
}
DM->Query->Active=true;
DM->Query->Open(); String MyFormName=DM->Query->Fields->FieldByName("表單名稱")->AsString;
HANDLE Handle;
Handle = FindWindow(NULL,MyFormName.c_str());
ShowWindow(Handle,SW_SHOW);
//BringWindowToTop(Handle);
//SetForegroundWindow(Handle);
//SetActiveWindow(Handle); ==============================================================
引言: Handle Handle; 請注意大小寫.正確為 HANDLE Handle; 在C 下.大小寫是不一樣ㄉㄛ~~引言: 我照你的方式加了下面 3行 Handle Handle; Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString); ShowWindow(Handle); 但會出現錯誤下面的錯誤訊息.可再指點迷津ㄇ 謝謝! statement missing; -> 這個錯誤指向了 Handle Handle;這行引言: 阿都比:你試試看HANDLE Handle; Handle = FindWindow(null,"表單名稱"); ShowWindow(Handle); //也可試試看下列FUNCTION //BringWindowToTop(Handle) //SetForegroundWindow(Handle) //SetActiveWindow(Handle) |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
DEBUG後..
MyFormName 的值為"Form_CheckList",而我也確時有個名為"Form_CheckList"的表單.但Handle的值是NULL....不知為何?
引言: 阿都比: 有兩各地方你Debug看看String MyFormName=DM->Query->Fields->FieldByName("表單名稱")->AsString; //1.你先看MyFormName的值,是否正確 HANDLE Handle = NULL; Handle = FindWindow(NULL,MyFormName.c_str()); //2.你在看看Handle是否有數值 ShowWindow(Handle,SW_SHOW); |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
阿都比:
妳可以參考下列文章
http://delphi.ktop.com.tw/topic.php?topic_id=44630
bruce0211大大的心得分享中有'結束或最小化指定的程式 '可參考
http://delphi.ktop.com.tw/topic.php?topic_id=18760
|
Londer
一般會員 發表:5 回覆:32 積分:7 註冊:2003-01-08 發送簡訊給我 |
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
謝謝李國維大大及Londer大大的解答:
我試了Londer大大的這段指令 為何會出現下面的錯誤畫面 ,我也有找之前的文章.但不了解此訊息的意思
引言: 請問一下阿都比大大,您所謂的 Form 名稱指的是 Form->Name 還是 Form->Caption 呢? 如果是前者的話~那麼請用這個方式讓它顯示: ((TForm*)FindComponent(MyFormName.c_str()))->Show(); 或 ((TForm*)FindComponent(MyFormName.c_str()))->Visible=true; 後者才是使用李國維大大的方式喔 ^_^發表人 - 阿都比 於 2004/11/08 10:42:24 |
Londer
一般會員 發表:5 回覆:32 積分:7 註冊:2003-01-08 發送簡訊給我 |
引言: 謝謝李國維大大及Londer大大的解答: 我試了Londer大大的這段指令 為何會出現下面的錯誤畫面 ,我也有找之前的文章.但不了解此訊息的意思呵呵~~可能您的這個表單還尚未宣告建立喔~~~ 呼叫前您必須要先確認它已經建立起來了才行~~ 為了不讓它顯示錯誤訊息~~可以這樣寫喔 ^^ if(((TForm*)FindComponent(MyFormName.c_str())))((TForm*)FindComponent(MyFormName.c_str()))->Show();引言: 請問一下阿都比大大,您所謂的 Form 名稱指的是 Form->Name 還是 Form->Caption 呢? 如果是前者的話~那麼請用這個方式讓它顯示: ((TForm*)FindComponent(MyFormName.c_str()))->Show(); 或 ((TForm*)FindComponent(MyFormName.c_str()))->Visible=true; 後者才是使用李國維大大的方式喔 ^_^發表人 - 阿都比 於 2004/11/08 10:42:24 |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
阿都比:
1.FindComponent是Form的method之一(繼承自TComponent)
在HLEP中有詳細的說明,請注意紅色字體
Use FindComponent to determine whether a given component is owned by another.
2.建議你先參考bruce0211大大的文章
http://delphi.ktop.com.tw/topic.php?topic_id=18760
裡面有一篇文章在教"列出目前桌面上所有視窗代碼"你先利用此文章的程式碼
去試試看.然後看一下你DM->Query->Fields->FieldByName("表單名稱")->AsString中的視窗名稱是否相同.
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
Londer兄:
想請問一下.你所提供的方法.好像不可行.
因為FindComponent是Form的Method,
所以說他只能找到Parent是Form本身ㄉ.
應該沒辦法找到別的Form吧..
這是小弟的看法.請指教..
引言: 呵呵~~可能您的這個表單還尚未宣告建立喔~~~ 呼叫前您必須要先確認它已經建立起來了才行~~ 為了不讓它顯示錯誤訊息~~可以這樣寫喔 ^^ if(((TForm*)FindComponent(MyFormName.c_str())))((TForm*)FindComponent(MyFormName.c_str()))->Show(); |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
原來FindWindow要的是Form的Caption而不是Form的Name.....
==================================================================
Handle Handle;
Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString);
ShowWindow(Handle);
==================================================================
用李國維大大的這段可以顯示表單了,也感謝Londer 大大的提醒 但表單顯示出來後 還是有一些問題....希望你們還有耐心告訴我^^" 1.表單顯示後,表單裡的EditBox還有Botton的元件無法顯示出來? (FindWindow只單純呼叫其Form元件?) 謝謝李國維告知我要參考那些文章!3q~ 發表人 - 阿都比 於 2004/11/08 15:56:09 發表人 - 阿都比 於 2004/11/08 15:57:52
|
Londer
一般會員 發表:5 回覆:32 積分:7 註冊:2003-01-08 發送簡訊給我 |
回李國維大大~~
FindComponent 是 Form 的 Method 沒錯~~但它也是 Application 的 Method 呢
所以只要要控制的那個 >
不過您說的也沒有錯啦~~~ >
我是覺得阿都比大大的表單應該也都是動態產生的~~所以才會想說要他試試這個方法的 < > <>< face="Verdana, Arial, Helvetica">引言:
Londer兄:
想請問一下.你所提供的方法.好像不可行.
因為FindComponent是Form的Method,
所以說他只能找到Parent是Form本身ㄉ.
應該沒辦法找到別的Form吧..
這是小弟的看法.請指教..
引言: 呵呵~~可能您的這個表單還尚未宣告建立喔~~~ 呼叫前您必須要先確認它已經建立起來了才行~~ 為了不讓它顯示錯誤訊息~~可以這樣寫喔 ^^ if(((TForm*)FindComponent(MyFormName.c_str())))((TForm*)FindComponent(MyFormName.c_str()))->Show(); |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
sorry我好像沒說很清處...我想要動態呼叫的表單是"事先已經建立"好的 我是把資料庫中的"主選單"資料表中的功能一個一個掛到TreeView 元件中..當我點到我要的node時就把對應好的功能表單叫出來...就這樣... 其實可以在程式中寫死...但很沒效率 到時要增加一個新功能 又要去改一次程式碼,如果能把所以功能都寫在一個資料表 以後只要修改或新增這個資料表就可以了...只是為啥看起來很簡單的東西 我好像被弄的暈頭轉向了@.@~ 我的主選單資料表如下:(資料表中的表單名稱 是已事先建立存在的Form) 功能名稱 表單名稱(對應到Form->Name)
======== ==============
開票清單 Form_CheckList
支票列印 Form_TicksPrint
.
.
.
. 偶這個新手快轟了啦~~~~ =====================================================
[quote]
回李國維大大~~
FindComponent 是 Form 的 Method 沒錯~~但它也是 Application 的 Method 呢
所以只要要控制的那個 >
不過您說的也沒有錯啦~~~ >
我是覺得阿都比大大的表單應該也都是動態產生的~~所以才會想說要他試試這個方法的 < >
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
Londer兄:多謝你的解釋,清除ㄌ我心理的疑惑.
<>< face="Verdana, Arial, Helvetica">引言:
回李國維大大~~
FindComponent 是 Form 的 Method 沒錯~~但它也是 Application 的 Method 呢
所以只要要控制的那個 >
不過您說的也沒有錯啦~~~ >
我是覺得阿都比大大的表單應該也都是動態產生的~~所以才會想說要他試試這個方法的 < >
>>< face="Verdana, Arial, Helvetica">
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
阿都比:
請問一下EditBox跟Botton是什麼,是指TEdit跟TButton嗎.
如果是的話.基本上來說只要是Form上的元件就會跟著顯示,
所以我判斷你是不是程式有做處理哪些元件該顯示哪些元件不該顯示,
重點就是你是在哪裡處理?應該是在Form的OnCreate事件中.
然而ShowWindow不會觸發OnCreate事件.是觸發OnShow的事件.
請檢查.
如果在不行,並且你方便的話,將有問題的Form傳給我,我幫你Debug看看
加油啦~~
<>< face="Verdana, Arial, Helvetica">引言:
原來FindWindow要的是Form的Caption而不是Form的Name.....
==================================================================
Handle Handle;
Handle = FindWindow(NULL,Query->Fields->FieldByName("表單名稱")->AsString);
ShowWindow(Handle);
==================================================================
用李國維大大的這段可以顯示表單了,也感謝Londer 大大的提醒 但表單顯示出來後 還是有一些問題....希望你們還有耐心告訴我^^" 1.表單顯示後,表單裡的EditBox還有Botton的元件無法顯示出來? (FindWindow只單純呼叫其Form元件?) 謝謝李國維告知我要參考那些文章!3q~ 發表人 - 阿都比 於 2004/11/08 15:56:09 發表人 - 阿都比 於 2004/11/08 15:57:52
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
小弟在最後把解決方式POST出來.希望能夠解決有相關問題的人
1.阿都比的專案中.表單是非動態產生的.所以本來建議用FindWindow的方式
經過測試後發覺不妥(困難度比較高)所以改成建議用Screen->FormCount去判斷
語法如下:
AnsiStirng MyFormCaption="Test"; for (int i=0;i2.為ㄌ方便表單下次能夠順利顯示所以在各Form的OnClose事件中,將 Action設為caHide; |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
對了 ,小弟想再請教一個問題..
如果我把要顯示的功能表單 從 Auto-create forms 搬到 available forms 中
(不想一開始就把專案中的所有表單都load進來)..那下面這段程式碼是否也適用呢 或是要做怎樣的修正呢?
引言: 小弟在最後把解決方式POST出來.希望能夠解決有相關問題的人 1.阿都比的專案中.表單是非動態產生的.所以本來建議用FindWindow的方式 經過測試後發覺不妥(困難度比較高)所以改成建議用Screen->FormCount去判斷 語法如下:AnsiStirng MyFormCaption="Test"; for (int i=0;i2.為ㄌ方便表單下次能夠順利顯示所以在各Form的OnClose事件中,將 Action設為caHide; |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
對了 ,小弟想再請教一個問題..
如果我把要顯示的功能表單 從 Auto-create forms 搬到 available forms 中
(不想一開始就把專案中的所有表單都load進來)..那下面這段程式碼是否也適用呢 或是要做怎樣的修正呢?
引言: 小弟在最後把解決方式POST出來.希望能夠解決有相關問題的人 1.阿都比的專案中.表單是非動態產生的.所以本來建議用FindWindow的方式 經過測試後發覺不妥(困難度比較高)所以改成建議用Screen->FormCount去判斷 語法如下:AnsiStirng MyFormCaption="Test"; for (int i=0;i2.為ㄌ方便表單下次能夠順利顯示所以在各Form的OnClose事件中,將 Action設為caHide; |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
尋找的方式是一樣的
問題就是說如果你發現你所要找的表單沒有找到
你要如何動態建立ㄌ,舉例來說
for (i=0;i很熟悉的程式吧.重點在藍色字體部份.你要如何去利用一各Form的caption然後動態建立該Form.做的到就OKㄌ |
阿都比
一般會員 發表:2 回覆:11 積分:2 註冊:2004-11-03 發送簡訊給我 |
李國維大大 但我最大的疑問及不解的是:下面這段成式碼
===========================
TFrmSearchTrend *ChildFrmSearchTrend;
ChildFrmSearchTrend = new TFrmSearchTrend(Application);
ChildFrmSearchTrend->Show();
ChildFrmSearchTrend->BringToFront();
ChildCount ++
======================
他的表單名稱已知道 就把他動態建立起來...但如果專案中有100個表單
不就要寫一百次這段程式馬(應為表單的Caption都不同阿???!!! )
這樣也不就又是寫死在程式中了? ..不知小弟這樣的疑問是否有錯? <>< face="Verdana, Arial, Helvetica">引言:
尋找的方式是一樣的
問題就是說如果你發現你所要找的表單沒有找到
你要如何動態建立ㄌ,舉例來說
for (i=0;i很熟悉的程式吧.重點在藍色字體部份.你要如何去利用一各Form的caption然後動態建立該Form.做的到就OKㄌ >>< face="Verdana, Arial, Helvetica"> |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
阿都比:這各部分說真的我就不清楚ㄌ
我有空的時候會實作.如果成功的話我在post出來^^
引言: 李國維大大 但我最大的疑問及不解的是:下面這段成式碼 =========================== TFrmSearchTrend *ChildFrmSearchTrend; ChildFrmSearchTrend = new TFrmSearchTrend(Application); ChildFrmSearchTrend->Show(); ChildFrmSearchTrend->BringToFront(); ChildCount ====================== 他的表單名稱已知道 就把他動態建立起來...但如果專案中有100個表單 不就要寫一百次這段程式馬(應為表單的Caption都不同阿???!!! ) 這樣也不就又是寫死在程式中了? ..不知小弟這樣的疑問是否有錯? >>< face="Verdana, Arial, Helvetica"> |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |