TShellTreeView清單更新的問題? |
答題得分者是:malanlk
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
在一個FORM中各建立了一個TShellTreeView與TShellListView,並已經指定兩者的相互關係,另因為要控制TShellListView操作時的檔案內容,因此將其AutoRefresh設定為false,自行呼叫其Refresh方法,而TShellTreeView則維持AutoRefrsh為true。
現在的現象是,我在TShellListView中不管是新增了檔案或者是刪除檔案,在TShellListView可以見到檔案的新增與刪除,而相對的在TShellTreeView中並沒有同步的更新其清單中的內容,亦曾經試著使用:
ShellTreeView1->Refresh(ShellTreeView1->Selected);
也都沒有作用,請問先進們,這個問題應該如何解決? ----------------------------------------------
We will either find a way, or make one. -Hannibal -。
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
procedure TCustomShellTreeView.SetAutoRefresh(const Value: boolean); begin FAutoRefresh := Value; if not (csLoading in ComponentState) then begin if FAutoRefresh then begin if Assigned(FNotifier) then FreeAndNil(FNotifier); FNotifier := TShellChangeNotifier.Create(Self); FNotifier.FComponentStyle := FNotifier.FComponentStyle [ csSubComponent ]; FNotifier.WatchSubTree := False; if Assigned(FNodeToMonitor) then FNotifier.Root := TShellFolder(FNodeToMonitor.Data).PathName else FNotifier.Root := FRootFolder.PathName; FNotifier.OnChange := Self.RefreshEvent; end else if Assigned(FNotifier) then FreeAndNil(FNotifier); end; end;以上摘自 Delphi 的 ShellCtrls.pas 注意到 紅色那段 如果 AutoRefresh 設為 False 就不會再發出 SHChangeNotify(....) 訊息給系統, 因此 TShellTreeView 也不會自動更新, ShellTreeView1->Refresh(ShellTreeView1->Selected); 應該只會從 cache 中重讀, 除非接收到 SHChangeNotify, 否則不會有動作... 所以TShellListView在檔案異動後除了Refresh 外再補一個 SHChangeNotify 應該會有用... http://delphi.ktop.com.tw/quicksearch.exe/QuickView?topicid=77479 就像這支自殺函數補了一個 SHChangeNotify 一樣.... |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
感謝malanlk的回應,也覺得malanlk兄的指引是個方法,但照著這個方法去實作時,Compile卻無法過,我在WINAPI裏查閱了SHChangeNotify已經支援WINNT,且我在include header file最前方也加上了define NO_WIN32_LEAN_AND_MEAN,我所加上的敘述是:
::SHChangeNotify(SHCNE_CREATE | SHCNE_DELETE | SHCNE_MKDIR | SHCNE_RMDIR | SHCNE_RENAMEFOLDER |SHCNE_RENAMEITEM,SHCNF_PATH,LocalPathName,0);
但是Compiler還是給我下列的錯誤訊息:
call to undefined function SHChangeNotify.
Undefined symbol SHCNE_CREATE.
Undefined symbol SHCNE_DELETE.
....
請問我還少作了啥程序?
<>
補充一下,小弟經再次查閱>
----------------------------------------------
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
Stallion 兄,
http://bdn.borland.com/article/0,1410,26570,0.html
這篇應該是解答了.... http://delphi.ktop.com.tw/topic.php?topic_id=44313
奇怪, 放在程式裡 和放在 Project | Options | Directories/Conditionals 不一樣嗎? ... 貼上來以免網頁消失.... Question:
I am getting multiple declaration errors for FVSHOWINFO, FOLDERSETTINGS, DESKBANDINFO, SHELLFLAGSTATE, and I dont' know why. How do I resolve this problem? Answer:
This is caused by including shlobj.h in your project. The multiple declarations are coming from "shlobj.hpp", which is included with "vcl.h". Try this:
Click "Project | Options | Directories/Conditionals" and add "NO_WIN32_LEAN_AND_MEAN" to the conditional defines section, separating it from other defines with a semicolon (;). 發表人 - malanlk 於 2005/09/09 23:20:55
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
感謝manlanlk兄再次回應,按照malanlk兄的說法,其實我之前也是按照那個作法實作的,唯一不同的是define NO_WIN32_LEAN_AND_MEAN的位置放的不對,經過調整後,之前的錯誤訊息不見了,但取而代之的是winsock2.h的多種multiple declaration fd_set...等等的錯誤,原因可能是我的程式中有引用TIdFTP,TIdLogEvent與TIdAntiFreeze的多種元件所造成的,不知道有否類似的解決方案?謝謝~ ----------------------------------------------
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
引言: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64814 Comxxx.hpp感謝manlanlk兄的多次回應,之前的問題應該是解決了,剩下的winsock2問題,我並沒有上述討論中的問題,我的INDY9是重新安裝的,而之前的討論刪除Comxxx.hpp不知道指的是那個header file ?因為com...開頭的標頭檔實在很多,我曾試著把自己程式中的ComCtrls標頭去掉,但是程式開始Compile時都會自動加上去。 ---------------------------------------------- |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
可惜手邊沒 BCB 不然我就直接找出 fd_set 的定義了 不過在 Indy 原始碼下 有找到
(*$HPPEMIT '#include所以應該要找出其他地方重複定義之處... 發表人 - malanlk 於 2005/09/10 00:51:30 |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
小弟適才重新起了一個PROJECT,想試看看SHChangeNotify到底有啥問題,按照上述的方法,把該加入的都加入了,結果Compile完全通過無異議!唉~可見外掛入BCB的元件(indy),沒有像DELPHI那樣被妥善安裝(個人認為這個責任不應該在Indy project身上,既然Borland要採用INDY元件,在升級方案方面,就要有個好的範例程序)。
心裡不僅感慨起來,同樣是Borland的產品,為何對BCB的維護沒有對Delphi那樣的細緻呢?更何況當年Turbo C叱吒風雲的那段時光,Borland的產品也是靠C Compiler打下的江山(雖然BORLAND PASCAL也同樣享有盛名,但那時絕對不如C COMPILER),個人也是那時一頭栽入BORLAND C COMPILER的行列,但是到現在總覺得Borland C Compiler雖然依然強悍,卻可笑的是沒有自己C為主體的元件?更慘的是使用者在元件升級方面,還沒有DELPHI的優勢!
我們公司在BORLNAD的產品上相當推崇的,買了企業版的BCB6與DELPHI 2005,還好在BCB6使用有問題的時候,我還有DELPHI可以選擇,但總覺得自己用了十多年的C Compiler就這樣漸漸失去競爭力,實在心有不甘,也覺得令人扼腕! ----------------------------------------------
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |