全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2368
推到 Plurk!
推到 Facebook!

TShellTreeView清單更新的問題?

答題得分者是:malanlk
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-09 12:59:02 IP:211.22.xxx.xxx 未訂閱
在一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-09 18:27:41 IP:203.69.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-09 21:08:46 IP:211.22.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-09 23:08:32 IP:61.219.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-09 23:25:29 IP:61.219.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33074 爬到 包子大大 裡面消失的網頁了... 發表人 - malanlk 於 2005/09/09 23:38:59
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-09 23:29:22 IP:211.22.xxx.xxx 未訂閱
感謝manlanlk兄再次回應,按照malanlk兄的說法,其實我之前也是按照那個作法實作的,唯一不同的是define NO_WIN32_LEAN_AND_MEAN的位置放的不對,經過調整後,之前的錯誤訊息不見了,但取而代之的是winsock2.h的多種multiple declaration fd_set...等等的錯誤,原因可能是我的程式中有引用TIdFTP,TIdLogEvent與TIdAntiFreeze的多種元件所造成的,不知道有否類似的解決方案?謝謝~ ----------------------------------------------
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-09 23:49:20 IP:61.219.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64814 Comxxx.hpp
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-10 00:07:07 IP:211.22.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-10 00:30:39 IP:61.219.xxx.xxx 未訂閱
可惜手邊沒 BCB 不然我就直接找出 fd_set 的定義了    不過在 Indy 原始碼下 有找到    
(*$HPPEMIT '#include '*)
(*$HPPEMIT '#include '*)
(*$HPPEMIT '#include '*)
(*$HPPEMIT '#include '*)
(*$HPPEMIT '#include '*)
(*$HPPEMIT '#include '*)
(*$HPPEMIT ''*)
(*$HPPEMIT 'namespace Idwinsock2'*)
(*$HPPEMIT '{'*)
(*$HPPEMIT '    typedef fd_set *PFDSet;'*) // due to name conflict with procedure FD_SET
(*$HPPEMIT '    typedef fd_set TFDSet;'*)  // due to name conflict with procedure FD_SET
(*$HPPEMIT '}'*)
所以應該要找出其他地方重複定義之處... 發表人 - malanlk 於 2005/09/10 00:51:30
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-10 00:59:35 IP:211.22.xxx.xxx 未訂閱
小弟適才重新起了一個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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-10 19:32:26 IP:210.68.xxx.xxx 未訂閱
VC .net 7 與 C Builder6 編譯評測 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77120 唉! 成也 Anders Hjelsberg 敗也 Anders Hjelsberg...
系統時間:2024-04-30 11:35:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!