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

奇怪的情形.....這行那錯了呢??

尚未結案
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-23 00:37:40 IP:61.225.xxx.xxx 未訂閱
奇怪的情形.....這面行那錯了呢?? 為什麼會 EAccess Violation ?? function diglist(acaption:string;astringlist:Tstringlist):string; var form:tform; ckecbox:Tchecklistbox; edit:Tedit; function ProcToMethod(Proc : Pointer; Obj : TObject) : TMethod; begin result.Code := Proc; result.Data := Obj; end; procedure MyClick(Self : TObject;Sender : TObject); begin edit.text:='s';<----------------------這那錯了呢? end; begin Form := TForm.Create(Application); with Form do try Edit := TEdit.Create(Form); <----------- with Edit do begin color:=clInfoBk; Parent := Form; Width := form.width-5; end; ckecbox:=Tchecklistbox.create(form); with ckecbox do begin Parent := Form; onclickcheck:= TNotifyEvent(ProcToMethod(@myClick,ckecbox)); end; if ShowModal = mrCancel then result:= edit.text; finally Form.Free; end; end;
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-23 03:28:05 IP:211.76.xxx.xxx 未訂閱
引言: 奇怪的情形.....這面行那錯了呢?? 為什麼會 EAccess Violation ?? function diglist(acaption:string;astringlist:Tstringlist):string; var form:tform; ckecbox:Tchecklistbox; edit:Tedit; function ProcToMethod(Proc : Pointer; Obj : TObject) : TMethod; begin result.Code := Proc; result.Data := Obj; end; procedure MyClick(Self : TObject;Sender : TObject); begin edit.text:='s';<----------------------這那錯了呢? end; begin Form := TForm.Create(Application); with Form do try Edit := TEdit.Create(Form); <----------- with Edit do begin color:=clInfoBk; Parent := Form; Width := form.width-5; name:='edit';//給個名字吧 end; ckecbox:=Tchecklistbox.create(form); with ckecbox do begin Parent := Form; onclickcheck:= TNotifyEvent(ProcToMethod(@myClick,ckecbox)); end; if ShowModal = mrCancel then result:= edit.text; finally Form.Free; end; end;
發表人 - hahalin 於 2003/09/23 03:28:52
william
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-23 09:12:23 IP:147.8.xxx.xxx 未訂閱
Edit is a local variable..... BTW I prefer using class procedure...    
type
    TMyClass = class
        class procedure MyClick(Sender: TObject);
    end;    procedure TMyClass.MyClick(Sender: TObject);
begin
    if Sender is TEdit then
        TEdit(Sender).Text := 's'
    else if Sender is TComboBox then
        TComboBox(Sender).Text := 's';
end;
{.... skip ....}
    Edit := TEdit.Create(Form); 
    with Edit do begin
        {... skip ...}
        OnClick := TMyClass.MyClick;
    end;
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-23 10:54:39 IP:210.243.xxx.xxx 未訂閱
william大大 佩服佩服 你的見解直接命中要害...
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-23 16:49:19 IP:61.219.xxx.xxx 未訂閱
謝謝 william 大大    不過...小弟程度不太好, 不是很了解..  能不能解說一下為什麼不能這麼作呢...?
william
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-23 17:35:05 IP:147.8.xxx.xxx 未訂閱
Edit is a local variable of functiuon diglist and it invalid once you exit this function. MyClick is probably fired by the control you created AFTER diglist has been run once, so the content of variable Edit is invalid in this case.
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-25 00:10:42 IP:61.225.xxx.xxx 未訂閱
不好意思.... 再請教一下 william 大大您的例子會出現這個說...小弟應該再多翻點書再發問的 汗~~ OnClick := TMyClass.MyClick; <----------- [Error] listfilename.pas(159): Incompatible types: 'TNotifyEvent' and 'Procedure'
william
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-25 09:00:47 IP:147.8.xxx.xxx 未訂閱
Sorry.... missing the class keyword in implementation... <>>
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-25 19:50:59 IP:61.225.xxx.xxx 未訂閱
太好了  總算弄出來了  ~~  感謝 william 大大  < > 我連 漏字出看不出來....還要再加油才行 < >
系統時間:2024-04-28 21:20:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!