在DLL內變更FORM內元件的屬性問題 |
尚未結案
|
chinliang
一般會員 發表:16 回覆:26 積分:13 註冊:2002-06-17 發送簡訊給我 |
各位先進好,小弟想將一些控制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 發送簡訊給我 |
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 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
chinliang
一般會員 發表:16 回覆:26 積分:13 註冊:2002-06-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |