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

取出DELPHI所有元件模板的所有元件名稱

尚未結案
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-16 16:53:24 IP:61.218.xxx.xxx 未訂閱
小弟欲取出DELPHI所有元件模板的所有元件名稱,參考如下範例程式碼,不過在執行到ToolServices.GetModuleCount時,就會發生Access violation at address 0044120B in mudule project1.exe的錯誤,想請各位先進幫忙測一下在您們的環境上也會有錯誤嗎?    小弟系統目前為安裝DELPHI 5 Update Pack 1(之前有裝DELPHI 6,不過已經反安裝了)。    請各位先進指教,謝謝。    
uses ToolIntf,Exptintf;    procedure TDBWizardForm.FormCreate(Sender: TObject);
var
  i,k: Integer;
begin
  CBAncestor.Items.Clear;
  for i:=0 to ToolServices.GetModuleCount-1 do
  begin
    for k:=0 to ToolServices.GetComponentCount(i)-1 do
       CBAncestor.Items.Add(ToolServices.GetComponentName(i,k));
  end;
end;
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-16 19:19:58 IP:61.155.xxx.xxx 未訂閱
//取出FORM1上所有的元件名称 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin memo1.Clear ; for i:=form1.ComponentCount-1 downto 0   do memo1.Lines.Add(form1.Components[i].Name);    end;    风花雪月 e梦情缘
------
风花雪月 e梦情缘
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-16 19:59:20 IP:218.16.xxx.xxx 未訂閱
看到好多次了... 終於忍不住想問一聲...
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-16 20:59:54 IP:61.59.xxx.xxx 未訂閱
chinliang 兄,您這些問題,可以請教副站長阿子 他是OTA這領域的高手    ps: wnhoo 兄 各版主已經注意你很久了    如果您所給的答案,就算不能夠給予幫助 至少也要是"正確"的方向吧    我們相信您的實力不差,可是問題沒有看清楚就隨便回答,無異是自暴其短    本站維護不易煩請多多配合,若有得罪尚啟見諒     發表人 - ddy 於 2003/05/16 21:02:17
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-16 22:12:39 IP:61.64.xxx.xxx 未訂閱
wnhoo兄可能是China來的吧,看不懂小弟的繁體問題,還請各位版主海涵。 感謝Justmade版主兄提供方向,我再往這方面找找看。 感謝ddy版主兄告知,站長大人有看到小弟的問題時,有勞指點迷津了 ^_^ 上面的範例程式碼是在以下網址找到的: http://www.caravan.ru/~kukmeet/tipstric.html#s5 另外用google查了ToolServices.GetModuleCount關鍵字只有二個結果,上面那個網址是第一個: http://www.google.com.tw/search?q=ToolServices.GetModuleCount&ie=UTF-8&oe=UTF-8&hl=zh-TW&btnG=Google 搜尋&lr= 小弟之前是用delphi 6開發,不過目前公司的東西都是delphi 5,想說直接拿來6跑,不過很多是有問題的,像上面所引用的 *intf的部份,6已經都拿掉了,所以只能先在5上面跑。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-16 23:29:55 IP:218.16.xxx.xxx 未訂閱
我大約看過一下 : ToolService 是 定義在 ExpIntf 的 : ToolServices: TIToolServices = nil; 而 TIToolService 是 TInterface 即是包含空的 函數定義給其他支援這個 Interface 的 Class 用的。 不過我在 Sources 資料夾卻找不到任何引用這個 Interface 的 Class , 反而在 bin 及 lib 就有不少 binary 檔有 ToolService 字眼。 Delphi 7 也有一個範例引用了 ToolService : C:\Program Files\Borland\Delphi7\Demos\ToolsAPI\XPAppWiz 看它是不需Create的直接可使用但那個是 DesignTime 的 Wizard 而不是獨立執行的。 我到現時為止的結論是在IDE的環境下 ToolService 會自動被制做並可以使用,但獨立執行(包括在 Delphi Run, 因為Application是用獨立的process run 的) 則不可。所以 ToolService 應專為 Wizard / Component Editor / Property Editor 而設。 請問你執行出錯是在 Delphi IDE wizarrd / editor 還是 Run 它呢?
阿子
站務副站長


發表:120
回覆:230
積分:201
註冊:2002-03-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-17 00:43:24 IP:61.64.xxx.xxx 未訂閱
chinliang兄 Justmade 兄 wnhoo兄  1.在這先説明一下好了,之前小弟在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24930 有介紹了一下有關OTA方面的資料,説明OTA到目前為分為二個版本以Delphi5為分隔點,而chinliang兄您所用的ToolServices 是早期的版本,原則上不建議您在使用早期的版本了。 2.OAT是Delphi IDE 介面是無法單獨在EXE 執行檔中使用。 3.chinliang兄你要的這個功能剛好跟小弟所作的VCL TREE For IDE 工具中取出所有元件清單是一樣的以下附上一段程式碼給你參考,
procedure GetAllComponent;
var
  pks: IOTAPackageServices;
   i,j:integer;
begin
  //取得IOTAPackageServices介面
 if not Supports(BorlandIDEServices, IOTAPackageServices, pks) then
    raise Exception.create('Cannot get IOTAModuleServices');
  
    //取出所有注冊的Package作迴圈
    for i := 0 to pks.PackageCount - 1 do
    begin
      //取出Package中的Component 作迴圈
      for j := 0 to pks.ComponentCount[i] - 1 do
      begin
        try
          Application.ProcessMessages;   
          //取出元件的名稱   
          Memo1.lines.Add(pks.ComponentNames[i, j]   ':');
        except
          on e: Exception do
            ShowMessage(e.Message);
        end; // try/except
      end;
    end;
end; 

你先參考看看,若有問題可以一起討論 <>從思考取勝一切~>
------
從思考取勝一切~q
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-17 08:41:52 IP:61.155.xxx.xxx 未訂閱
上面各位给出的方法,我在D6中调试还是不能通过。    下面这篇关于Delphi向导制作基本介绍,继承于TIExpert(ExptIntf.pas)。 或许对chinliang兄有点启发 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30596    供参考!       风花雪月 e梦情缘
------
风花雪月 e梦情缘
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-17 09:52:05 IP:218.16.xxx.xxx 未訂閱
可以執行了,好棒! 發表人 - Justmade 於 2003/05/17 11:13:18
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-19 10:03:30 IP:61.218.xxx.xxx 未訂閱
感謝Justmade版主、阿子副站長及wnhoo兄熱心回答,照阿子副站長的範例程式碼,不過我跟wnhoo兄一樣不能執行,都會跑進raise Exception.create('Cannot get IOTAModuleServices')這一行,而無法執行下去,我只有uses ToolsAPI跟library path加入$(DELPHI)\Source\Toolsapi這個路徑,還要有其他動作嗎?目前在研究wnhoo兄所提供的資料部份。 我在delphi 5及delphi 6(update pack 2)的環境都試過了,結果都一樣,不知道先進能不能再給小弟指點,謝謝。 註:Justmade版主,可否將您的測試出來的程式碼給小弟試試看呢?小弟的email為chinliang67@yahoo.com.tw,希望不會造成您的困擾 m(_ _)m
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-19 11:39:45 IP:218.16.xxx.xxx 未訂閱
上面阿子大大己說好清楚,這是不能在 RunTime 用的,而是供 Design Time 用的 所以只能作為自制元件的輔助工具。 我測試是在我自己的元件的 Create 段測試若是 Design Time 就呼叫那個函數,然後 ShowMessage 出來,測試是可行的,由於我那個元件用不到這個功能,我已經刪除掉了。 若你確認你也是用做元件設計而非 Runtime 用的話,我可以特意做一個元件範例給你看看,只是要費點時間,不會做成困擾的。
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-19 14:27:44 IP:61.218.xxx.xxx 未訂閱
感謝Justmade版主,我自己試做了一個繼承自TButton的元件,像Justdade版主加入該程式碼在Create的地方,也用ShowMessage的方式,Designtime結果有正確執行。 不過小弟想做的是在Runtime執行,顯示在memo上,並把轉成XML的檔案,不知道這樣有辦法做嗎?還是有其他間接實作的方式,請再次給小弟指教。 感謝各位先進熱心幫忙 ^_^
系統時間:2024-05-17 0:01:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!