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

在DLL內變更FORM內元件的屬性問題

尚未結案
chinliang
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-26 14:24:40 IP:210.243.xxx.xxx 未訂閱
各位先進好,小弟想將一些控制UI的程式放在DLL內供專案共用,但對於DLL還是一知半解,找了站內的東西有的太深了看不太懂,希望各位先進能提供小弟那裡有這方面的資料可閱讀,謝謝!我的問題如下: 我的SetForm的程序為將Form內的所有Button全部變成Disabled,程式碼為:
Procedure SetForm(FormName: TForm);
var I: Integer;
begin
  for I := 0 to FormName.ControlCount - 1 do
  begin
    if FormName.Controls[i] is TButton then
   begin
     (FormName.Controls[i] as TButton).Enabled := False;
     ShowMessage('Disabled Button!');
   end;
  end;
end;
這段程式碼若放在Form內呼叫是沒有問題的,但是如果寫在DLL內卻沒有作用了,Form對該DLL的宣告如下:
Procedure SetForm(FormName: TForm); far;
  external 'D:\DLL\UIControl\UIControl.DLL';
Form對該DLL的呼叫如下: SetForm(InfoFrm); 在DLL內的宣告為: Procedure SetForm(FormName: TForm); export; 問題發生在於判斷式"if FormName.Controls[i] is TButton then",明明FORM上有Button但是就是沒進去執行(註:可以進入"for I := 0 to FormName.ControlCount - 1 do"內執行),不知道是那方面的問題?請各位先進賜教,謝謝!
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-26 15:41:09 IP:147.8.xxx.xxx 未訂閱
I think it may becasue the dll and your exe are using different Application instance (actually I think Application within dll is nill). In your case, I suggest NOT to use "is" and "as" operator. Try:
if FormName.Controls[i].ClassName=TButton.ClassName then begin 
    TButton(FormName.Controls[i]).Enabled := False;
chinliang
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-26 17:54:41 IP:210.243.xxx.xxx 未訂閱
謝謝William,問題已解決,但我有幾個問題,不知能否解惑? 1.意思就是說當呼叫DLL時,傳入DLL內的元件(本例為TForm)無法為DLL所用嗎?還是DLL用法是不同的? 2.有看到本站文章,說DLL最好不要拿來作UI的設定,不知是否為真?還是另有他法? 再次謝謝William。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-27 15:32:54 IP:210.3.xxx.xxx 未訂閱
The last time I implemented dll plugin (in a MDI application) was long ago (I am getting old... ). >).
chinliang
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-27 18:40:31 IP:210.243.xxx.xxx 未訂閱
感謝william提供意見,謝謝!
系統時間:2024-05-04 6:36:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!