MDI呼叫DLL能否判斷或避免重覆呼叫?? |
答題得分者是:eaglewolf
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
用變數去記 ?
===================引 用 shine0989 文 章=================== 請問各位先進...... 小弟已爬文了很久... 都找不到答案..!! 或是看不太懂..!! 問題是這樣子的..↓ 小弟已做好DLL了..(DLL已設為fsMDIChild) 但是在做MDI呼叫DLL之後.. 發現到..可重覆呼叫..!! 小弟主要是要避免重覆呼叫DLL... 請教各位先進能否教教小弟可以避免這個問題的方法嗎??
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝 eaglewolf 大大回覆~
請問大大說的 用變數去記.. 小弟是Delphi 新手..不知道要怎麼去用變數去記!!?? 這樣說好了.. 那如何將已呼叫到的DLL的窗體 跳到最上層 也就是active 等於 true 的情況!! ===================引 用 eaglewolf 文 章=================== 用變數去記 ? ? ===================引 用 shine0989 文 章=================== 請問各位先進...... 小弟已爬文了很久... 都找不到答案..!! 或是看不太懂..!! 問題是這樣子的..↓ 小弟已做好DLL了..(DLL已設為fsMDIChild) 但是在做MDI呼叫DLL之後.. 發現到..可重覆呼叫..!! 小弟主要是要避免重覆呼叫DLL... 請教各位先進能否教教小弟可以避免這個問題的方法嗎?? |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
簡單一點 用 Array 去存
假設你有20個不同的MDI ChildForm DLLForm: array[1..20] of bool; 每次要載入前 檢查對應array value為true 若否則載入並設定相對應array value為true 若是則不再載入dll 而是呼叫dll的提供的procedure 讓視窗恢復 normal size 並將視窗提到最上層 (Form.BrintToFront) 當你卸載Dll時 設定相對應array value為false ===================引 用 shine0989 文 章=================== 感謝 eaglewolf大大回覆~ 請問大大說的 用變數去記.. 小弟是Delphi 新手..不知道要怎麼去用變數去記!!?? 這樣說好了.. 那如何將已呼叫到的DLL的窗體 跳到最上層 也就是active 等於 true 的情況!! ===================引 用 eaglewolf 文 章=================== 用變數去記 ? ? ===================引 用 shine0989 文 章=================== 請問各位先進...... 小弟已爬文了很久... 都找不到答案..!! 或是看不太懂..!! 問題是這樣子的..↓ 小弟已做好DLL了..(DLL已設為fsMDIChild) 但是在做MDI呼叫DLL之後.. 發現到..可重覆呼叫..!! 小弟主要是要避免重覆呼叫DLL... 請教各位先進能否教教小弟可以避免這個問題的方法嗎??
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
非常感謝eaglewolf 大大回覆...
不太懂大大的說方法..... 請問是將DLL FORM的名字存在陣列中是嗎?? 還是我換個問法好了..!! 問題: 我怎麼得知(搜尋)我目前已開的DLL的FORM的名字?? 目的: 當我用MDI呼叫DLL時~ MDI下方的任務欄能暫存有DLL的FORM的名字! 方便查看已呼叫的DLL~ 且希望能防止重覆呼叫DLL! ===================引 用 eaglewolf 文 章=================== 簡單一點 用 Array 去存 假設你有20個不同的MDI ChildForm DLLForm: array[1..20] of bool; 每次要載入前 檢查對應array value為true 若否則載入並設定相對應array value為true 若是則不再載入dll 而是呼叫dll的提供的procedure 讓視窗恢復 normal size 並將視窗提到最上層 (Form.BrintToFront) 當你卸載Dll時 設定相對應array value為false ===================引 用 shine0989 文 章=================== 感謝 eaglewolf大大回覆~ 請問大大說的 用變數去記.. 小弟是Delphi 新手..不知道要怎麼去用變數去記!!?? 這樣說好了.. 那如何將已呼叫到的DLL的窗體 跳到最上層 也就是active 等於 true 的情況!! ===================引 用 eaglewolf 文 章=================== 用變數去記 ? ? ===================引 用 shine0989 文 章=================== 請問各位先進...... 小弟已爬文了很久... 都找不到答案..!! 或是看不太懂..!! 問題是這樣子的..↓ 小弟已做好DLL了..(DLL已設為fsMDIChild) 但是在做MDI呼叫DLL之後.. 發現到..可重覆呼叫..!! 小弟主要是要避免重覆呼叫DLL... 請教各位先進能否教教小弟可以避免這個問題的方法嗎??
編輯記錄
shine0989 重新編輯於 2010-04-07 16:49:50, 註解 無‧
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
或者你可以用一個 TStringList 存 DLL Name(或MDI Child Name)
透過TStringList 提供的方法 應該可以達到你的要求 var DLLNameList:TStringList; //when Load Main Form LoadedDLLs := TStringList.Create; //when Close Main Form LoadedDLLs.Clear; LoadedDLLs.Free; //load dll if LoadedDLLs.IndexOf(DllName) < 0 then begin LoadedDLLs.Append(DllName); //load dll end else begin //briing form to front end; //unload dll var index:Integer; index := LoadedDLLs.IndexOf(DllName); if (index > -1) then begin LoadedDLLs.Delete(index); //unload dll end;
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
太感謝eaglewolf大大回覆^^
大大真的太神了..!! 小弟真的佩服的呢~ 剛用了大大給的語法.. 行的通了耶.^^ 真的不會再重覆呼叫了.. 可是有一個問題.. 就是..當DLL關掉後..釋放掉.. //unload dll var ? index:Integer; index := LoadedDLLs.IndexOf(DllName); if? (index > -1) then begin ?? LoadedDLLs.Delete(index); ?? //unload dll end; 的這段語法要下在那.?? 是MDI 那嗎... 還是DLL那??? 還有另一個小問題.. 大大指的↓ //briing form to front 要怎麼下?? ===================引 用 eaglewolf 文 章=================== 或者你可以用一個 TStringList 存 DLL Name(或MDI Child Name) 透過TStringList 提供的方法 應該可以達到你的要求 var ? DLLNameList:TStringList; //when Load Main Form LoadedDLLs := TStringList.Create; //when Close Main Form LoadedDLLs.Clear; LoadedDLLs.Free; //load dll if LoadedDLLs.IndexOf(DllName) < 0 then begin ? LoadedDLLs.Append(DllName); ?? //load dll end else begin ?? //briing form to front end; //unload dll var ? index:Integer; index := LoadedDLLs.IndexOf(DllName); if? (index > -1) then begin ?? LoadedDLLs.Delete(index); ?? //unload dll end; |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
(1) unload dll:
當User關閉MDI Child Form時 要通知Main Form卸載Dll 就是在這個時候 設定 (2) bring form to front: 在DLL中提供類似的procedure: [code delphi] procedure BringFormToFront; begin if WindowState <> wsNormal then WindowState := wsNormal; BringToFront; end; [/code]
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
真的真的再次感謝eaglewolf大大用心回覆..!!
小弟真的太嫩了.. 已將unload dll的這段語法 放置大大所說的地方了.. 可是關掉時..會報錯..!! 我不知怎麼上傳圖片.. 錯誤訊息是.↓ Access violation at address 0AFDCEB1 in module '我的DLL名稱'. Read of address B88366A7 真的是太麻煩大大了..><" ===================引 用 eaglewolf 文 章=================== (1) unload dll: 當User關閉MDI Child Form時 要通知Main Form卸載Dll 就是在這個時候 設定 (2) bring form to front: 在DLL中提供類似的procedure: [code delphi] procedure BringFormToFront; begin ? if WindowState <> wsNormal then ??? WindowState := wsNormal; ? BringToFront; end; [/code] |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
這個就要檢查你的DLL
相關資源是否有正確的被釋放 ===================引 用 shine0989 文 章=================== 真的真的再次感謝eaglewolf大大用心回覆..!! 小弟真的太嫩了.. 已將unload dll的這段語法 放置大大所說的地方了.. 可是關掉時..會報錯..!! 我不知怎麼上傳圖片.. 錯誤訊息是.↓ Access violation at address 0AFDCEB1 in module '我的DLL名稱'. Read of address B88366A7 真的是太麻煩大大了..><" ===================引 用 eaglewolf 文 章=================== (1) unload dll: 當User關閉MDI Child Form時 要通知Main Form卸載Dll 就是在這個時候 設定 (2) bring form to front: 在DLL中提供類似的procedure: [code delphi] procedure BringFormToFront; begin ? if WindowState <> wsNormal then ??? WindowState := wsNormal; ? BringToFront; end; [/code]
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝eaglewolf大大的回覆 ^^
小弟的問題已經結決了.. 小弟把unload dll這段語法放置.. MDI的檢查子FORM是否關闢的小程式裡 居然可以通..^^ 這陣子真的很感謝eaglewolf大大的大力幫忙..太謝謝您了..^^ ===================引 用 eaglewolf 文 章=================== 這個就要檢查你的DLL? 相關資源是否有正確的被釋放 ===================引 用 shine0989 文 章=================== 真的真的再次感謝eaglewolf大大用心回覆..!! 小弟真的太嫩了.. 已將unload dll的這段語法 放置大大所說的地方了.. 可是關掉時..會報錯..!! 我不知怎麼上傳圖片.. 錯誤訊息是.↓ Access violation at address 0AFDCEB1 in module '我的DLL名稱'. Read of address B88366A7 真的是太麻煩大大了..><" ===================引 用 eaglewolf 文 章=================== (1) unload dll: 當User關閉MDI Child Form時 要通知Main Form卸載Dll 就是在這個時候 設定 (2) bring form to front: 在DLL中提供類似的procedure: [code delphi] procedure BringFormToFront; begin ? if WindowState <> wsNormal then ??? WindowState := wsNormal; ? BringToFront; end; [/code] |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
eaglewolf大大不好意思又打擾您...
請問一下.. 以下這段語法的 //briing form to front ↓ //load dll if LoadedDLLs.IndexOf(DllName) < 0 then begin ? LoadedDLLs.Append(DllName); ?? //load dll end else begin ?? //briing form to front end; 是我要先在MDI裡下↓再load dll時再呼叫它嗎?? ↓ procedure BringFormToFront; begin ? if WindowState <> wsNormal then ??? WindowState := wsNormal; ? BringToFront; end; ===================引 用 eaglewolf 文 章=================== 這個就要檢查你的DLL? 相關資源是否有正確的被釋放 ===================引 用 shine0989 文 章=================== 真的真的再次感謝eaglewolf大大用心回覆..!! 小弟真的太嫩了.. 已將unload dll的這段語法 放置大大所說的地方了.. 可是關掉時..會報錯..!! 我不知怎麼上傳圖片.. 錯誤訊息是.↓ Access violation at address 0AFDCEB1 in module '我的DLL名稱'. Read of address B88366A7 真的是太麻煩大大了..><" ===================引 用 eaglewolf 文 章=================== (1) unload dll: 當User關閉MDI Child Form時 要通知Main Form卸載Dll 就是在這個時候 設定 (2) bring form to front: 在DLL中提供類似的procedure: [code delphi] procedure BringFormToFront; begin ? if WindowState <> wsNormal then ??? WindowState := wsNormal; ? BringToFront; end; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |