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

如何在Activeform中使用shellexecute的相對路徑

答題得分者是:HikaruGo
yakehsu
一般會員


發表:8
回覆:10
積分:3
註冊:2006-11-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-09 17:27:26 IP:210.69.xxx.xxx 訂閱
我用Shellexecute 在一般的Form下使用相對路徑沒有問題, 但在activeform下就不行, 
activeform deploy 在d:\dump下:
ShellExecute(Handle, 'open', 'dump.txt', nil, nil, SW_SHOWNORMAL); --------->不行
ShellExecute(Handle, 'open', './dump.txt', nil, nil, SW_SHOWNORMAL); -------->不行
ShellExecute(Handle, 'open', 'd:\dump\dump.txt', nil, nil, SW_SHOWNORMAL); ------>可以
請問大大,相對路徑要如何用?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-10 13:26:13 IP:210.208.xxx.xxx 未訂閱
提供一個想法,但是我沒有實際驗證過,不確定可行!所以請你試試
利用 Win32 API GetCurrentDirectory 和 SetCurrentDirectory 設定當時系統的工作路徑,例如:

[code delphi]
GetCurrentDirectory() // 先取得當時系統的工作路徑(先暫存,最後要再設回來)
SetCurrentDirectory() // 設定你想要的工作路徑(例如 D:\dump)
ShellExecute()
SetCurrentDirectory() // 設回原本的工作路徑

[/code]

有關 Win32 API GetCurrentDirectory 和 SetCurrentDirectory 的詳細使用方法,請參考 MSDN 的說明
http://msdn2.microsoft.com/en-us/library/aa364934(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/aa365530.aspx
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yakehsu
一般會員


發表:8
回覆:10
積分:3
註冊:2006-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-14 16:35:07 IP:61.219.xxx.xxx 訂閱
謝謝提供意見,但還是不行。
Activex總是把現在路徑都指向桌面,因此getcurrentdir所得到的還是桌面的路徑,而不是OCX檔案所在位置。
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-17 15:46:20 IP:220.130.xxx.xxx 訂閱

GetModuleName or GetModuleFileName
yakehsu
一般會員


發表:8
回覆:10
積分:3
註冊:2006-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-24 13:52:56 IP:210.69.xxx.xxx 訂閱
還是不行


GetModuleFileName(hInstance,FN,SizeOf(FN));
存在D:\dump下
結果 FN竟然是C:\windows\...下ActiveFormX Control元件的目錄
而不是我D:\dump 中 .OCX檔案目錄
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-29 13:40:42 IP:220.130.xxx.xxx 訂閱
那表示你 Deploy 的 ActiveXForm 的 OCX 被 IE 載入執行時, 
該 OCX 所在路徑並不是在 D:\Dump 下
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-05-06 14:44:50 IP:220.136.xxx.xxx 訂閱
我也正遇到同樣問題, 我的ActiveForm在IE中載入時, 我必須讀取我元件註冊所在目錄下的INI檔, 我要如何抓到元件的目錄呢?
用GetModuleFileName抓到的路徑是IE的路徑哩.
謝謝.
===================引 用 OsX 文 章===================
那表示你 Deploy 的 ActiveXForm 的 OCX 被 IE 載入執行時,
該 OCX 所在路徑並不是在 D:\Dump 下
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-05-06 14:58:40 IP:61.62.xxx.xxx 訂閱
請參閱Help  TComServer說明
就有答案了
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-05-06 18:14:21 IP:220.136.xxx.xxx 訂閱

不好意思, 不太了解您的意思, 因為我在TComServer的Help中並沒有看到可以抓元件路徑的屬性或Method
而且, 我做的ActiveForm中也沒有TComServer這些屬性耶.....
===================引 用 HikaruGo 文 章===================
請參閱Help TComServer說明
就有答案了
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-05-06 23:56:53 IP:61.64.xxx.xxx 訂閱
procedure TrbAXXX.ActiveFormCreate(Sender: TObject);
var
Buffer: array[0..261] of Char;
r:String;
begin
SetString(r, Buffer, Windows.GetModuleFileName(HInstance,
Buffer, SizeOf(Buffer)));
showmessage(r);
end;

不知你Test方式是如何,與IE如何調用,
我使用IE Call OCX 可以得到正確的FileName Path



不過IE 開一個 C:\Sample.html 非 http:// Mode

最近我同事也問我一樣的問題,真巧
yakehsu
一般會員


發表:8
回覆:10
積分:3
註冊:2006-11-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-05-07 11:46:42 IP:210.69.xxx.xxx 訂閱
謝謝樓上大大,可是我的電腦很詭異。
1. 按照大大的方法(只是改放在Button的Click中)後,
2. deploy這Activeform時,路徑為
d:\dump
./
d:\dump
3. 到目錄d:\dump下用IE執行Activeformproj1.htm
4. 按htm中的 Button後,message出現 c:\windows\downloaded program files\active~1.ocx
檢查結果,message顯示的目錄裡根本沒那檔案(.ocx是放在d:\dump),裡面倒是含一些可能過去下載的ActiveX檔案。更扯的是,把downloaded program files 目錄砍了,再執行IE後,該目錄又重新被造出來。
不知道是registry或ini那邊有被改了。
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-05-07 12:14:06 IP:220.136.xxx.xxx 訂閱
哈, 可以了
感謝大大的幫忙
真想給你分數, 可惜我不是原發問者
請原發問的大大給個燈吧


===================引 用 HikaruGo 文 章===================
procedure TrbAXXX.ActiveFormCreate(Sender: TObject);
var
Buffer: array[0..261] of Char;
r:String;
begin
SetString(r, Buffer, Windows.GetModuleFileName(HInstance,
Buffer, SizeOf(Buffer)));
showmessage(r);
end;

不知你Test方式是如何,與IE如何調用,
我使用IE Call OCX 可以得到正確的FileName Path



不過IE 開一個 C:\Sample.html 非 http:// Mode

最近我同事也問我一樣的問題,真巧
系統時間:2024-04-24 20:27:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!